[Java] : 강한 결합과 느슨한 결합

dohyoungK·2024년 4월 4일
0

면접 스크립트

목록 보기
21/25
post-thumbnail

[Java] : 강한 결합과 느슨한 결합


모듈화

모듈화란 소프트웨어를 기능별로 나누는 것을 의미하며, 각 기능별로 나누어진 결과를 모듈이라고 한다.

좋은 모듈화는 목적에 맞는 기능만으로 모듈을 나누어 다른 모듈과 적게 연관되는 것(독립성이 강한 모듈)을 의미한다.

모듈의 독립성은 모듈의 결합도와 응집도로 측정하며, 낮은 결합도와 높은 응집도일수록 모듈의 독립성이 높다고 한다.

  • 결합도(Coupling): 서로 다른 모듈 간 상호 의존 정도
  • 응집도(Cohesion): 모듈 내부 구성 요소 간 서로 관련되어 있는 정도

강한 결합

어떠한 객체가 다른 객체에 강한 의존성을 가지고 있는 것

class Person {
	private Pasta pasta;
    
    public Person() {
    	this.pasta = new Pasta();
    }
    
    public void startEat() {
    	pasta.eat();
    }
}
class Pasta {
	public void eat() {
        System.out.println("파스타를 먹습니다.");
    }
}

Person 클래스의 멤버 변수로 Pasta 클래스가 존재한다.

이 코드의 단점은 Pasta 클래스가 없으면 Person 클래스를 정의 할 수 없다.
그리고 Pasta 클래스를 다른 종류의 클래스로 바꾸게 되면 Person 클래스의 코드 대부분을 변경해야 한다. 유지 보수성이 낮아진다.

즉, Person 클래스가 Pasta 클래스에 의존하게 되고, 의존성이 존재하게 된다.

약한 결합

객체 간의 강한 결합을 약화시켜 약하게 만드는 방법은 인터페이스이다.

interface Food {
	void eat();
}
class Person {
	private Food food;
    
    public Person(Food food) {
    	this.food = food;
    }
    
    public void startEat() {
    	food.eat();
    }
}
class Pasta implements Food {
	@Override
	public void eat() {
        System.out.println("파스타를 먹습니다.");
    }
}
class Pizza implements Food {
	@Override
	public void eat() {
        System.out.println("피자를 먹습니다.");
    }
}

인터페이스를 만들어 추상 메소드를 선언하고 Pasta, Pizza 클래스에서 이를 구현한다.

그러면 Pasta 객체와 Pizza 객체는 Food 타입에 대입될 수 있으므로 Person 클래스에서 멤버 변수 타입을 Food로 할 수 있다.

따라서 이전의 강한 결합의 코드와 달리 Person 내부 코드의 변경 없이 생성자를 통해 객체로 받아 멤버 변수에 대입하면 오브젝트를 변경할 수 있다.

0개의 댓글