2023. 4. 15. 00:13ㆍ공부/Spring
앞서 살펴본 의존성에 관련해서 알아야 할 개념이 있는데, 객체 간의 결합도다.
강한 결합과 약한결합으로 나뉘는데, 먼저 강한결합에 대해 알아보겠다.
1. 강한 결합
하나의 객체가 다른 객체에 대해 직접적으로 의존하고 있는 상태를 의미한다. 이 경우, 하나의 객체를 수정하거나, 다른 객체를 추가하려고해도, 직접적으로 의존하고 있기 때문에 변경과 추가가 쉽지 않다. 이 것을 회피해서 추가하거나 수정하다보면 코드의 복잡도가 올라가고 결과적으로 유지보수의 지옥을 펼치는 원인이 된다.
물론 강한 결합이 나쁜점만 있는것은 아니다. 코드의 구현이 간단하고 직관적이고 객체 간의 연결이 명확하게 보이므로 코드를 이해하기 쉽다. => 초소규모 프로젝트의 경우엔 경우에 따라 강한 결합을 사용하기도 한다. 예시를 들어 설명하면 아래의 그림이 적절할것 같다.
Shrimp Patty를 추가하려고해도 FranchiseHamberger와 의존관계인 MeatPatty, Lettuce 클래스가 직접적으로 의존하고 있어 추가가 쉽지 않다. 이 상태를 강한 결합이라고 볼 수 있다.
2. 약한 결합
약한 결합은 객체가 서로 간접적으로 의존하도록 설계되어있는 상태를 의미하는데, 이 경우 객체들은 인터페이스를 통해 서로 통신하게 된다. 징검다리 역할을 하는 인터페이스를 통해 객체들은 서로 독립적으로 존재할 수 있으며, 하나의 객체를 수정해도 다른 객체는 영향을 받지 않는다. 이는 코드의 유연성을 높이고 유지보수를 용이하게 만든다. 예시를 추가해 조금 더 쉽게 알아보자. 다음 사진은 약한 결합을 보여주는 구조다.
Patty라는 interface를 통해서 햄버거 클래스와 MeatPatty, ShrimpPatty가 간접적으로 의존하고 있다. 이렇게 일반적으로 약한 결합을 사용하는것을 권장한다.
'공부 > Spring' 카테고리의 다른 글
[Spring] 의존성 역전 원칙 (Dependency Inversion Principle, DIP) (0) | 2023.04.15 |
---|---|
[Spring] Dependency Injection & IoC 톺아보기(1) - 의존성과 의존성 주입방식 (0) | 2023.04.14 |
[Lombok] @Builder.default (0) | 2023.02.08 |
[Querydsl] fetchResult() 가 deprecated 된 이유 (1) | 2023.02.02 |
@RequestBody에 왜 기본생성자는 필요하고 Setter는 필요 없을까? (1) | 2023.01.29 |