Tight Coupling / Loose Coupling

이정수·2025년 10월 15일

Spring

목록 보기
1/18

강한결합 / 느슨한결합 ( Tight Coupling / Loose Coupling )
。특정 클래스인터페이스 의존 시 class 간 Loose Coupling이 발생했다고 간주.

。되도록 코드는 의존성이 낮도록 작성하여 결합도를 최소화해야한다.

  • Tight Coupling 예시
public class GameRunner {
    MarioGame game;
    public GameRunner(MarioGame game){
        this.game = game;
    }
    public void run(){
        System.out.printf("Running game:%s",game);
        game.up();
        game.down();
        game.left();
        game.right();
    }
}
public class MarioGame {
    public void up(){
        System.out.println("jump");
    }
    public void down(){
        System.out.println("go into a hole");
    }
    public void left(){
        System.out.println("go back");
    }
    public void right(){
        System.out.println("go forward");
    }
}
public class AppGamingBasicJava {
    public static void main(String[] args) {
        var marioGame = new MarioGame();
        var gameRunner = new GameRunner(marioGame);
        gameRunner.run();
    }
}

GameRunner 클래스에서 특정 MarioGame 클래스의존하여 강한 결합을 하고있음
고수준 모듈저수준 모듈의존하고있으므로 DIP 위반

  • Loose Coupling 예시
public interface GamingConsole {
    public void up();
    public void down();
    public void left();
    public void right();
}
public class MarioGame implements GamingConsole {
    public void up(){
        System.out.println("jump");
    }
    public void down(){
        System.out.println("go into a hole");
    }
    public void left(){
        System.out.println("go back");
    }
    public void right(){
        System.out.println("go forward");
    }
}
public class GameRunner {
    GamingConsole game;
    public GameRunner(GamingConsole game){
        this.game = game;
    }
    public void run(){
        System.out.printf("Running game:%s",game);
        game.up();
        game.down();
        game.left();
        game.right();
    }
}
public class AppGamingBasicJava {
    public static void main(String[] args) {
        var marioGame = new MarioGame();
        var scg = new SuperContraGame();
        var gameRunner1 = new GameRunner(scg);
        var gameRunner2 = new GameRunner(marioGame);
        gameRunner1.run();
        gameRunner2.run();
    }
}

GameRunner 클래스에서 GamingConsole Interface를 의존하여 MarioGame 클래스느슨한 결합을 유지
저수준모듈에서 고수준모듈의존성 역전

  • 결합 ( Coupling ) :
    소스코드를 변경 시 추가적인 소스코드 변경 작업이 연관되어있는지에 대한 측도.
    결합이 작을수록 좋다.
profile
공부기록 블로그

0개의 댓글