모두가 좋아하는 사람이 될수없다한들, 좋은 사람이 될수없다는 것은 아니다
공부과정 중에 AllinOneController를 통해 모든 컨트롤 기능을 한곳에 모아두었다가 푸는 작업을 통해
하나의 컨트롤러에 모든 역할을 몰아주었을 때 생기는 문제점에 대해 배웠다.
그러다 "강한 결합" 에 대한 궁금증이 생겨서 "느슨한 결합"과 함께 찾아보게 되었다.
그리고 의존성 주입과 IoC 컨테이너는 Spring의 기본이자 핵심 기능 중 하나라는 것을 알게 되었다.
우선 짧게 보고 넘어가고 싶은 사람들을 위해
강한 결합(Tight Coupling)은 클래스와 객체가 서로 의존하고 있는 것
느슨한 결합(Loose Coupling)은 다른 클래스를 직접적으로 사용하는 클래스의 의존성을 줄이는 것
이라고 할수있는데, 일반적으로 강한 결합은 좋지 않다.
클래스와 객체가 서로 의존성이 높기 때문에 유연성과 코드를 재사용함에 있어 불편함이 생기기 때문이다.
또한 변경을 더 어렵게 하고 시험가능성(testability)을 지연시킨다.
💡 강한 결합 : 어떠한 객체가 다른 객체에 강한 의존성을 가지는 것
타이트한 연결된 애플리케이션에서 하나의 객체를 변경하는 것은 많은 다른 객체들을 변경을 요구한다.
작은 애플리케이션에서는 변경점들을 일일이 찾아 확인하고 수정하는 것이 가능하나 큰 프로젝트이면 그렇지 않다.
위 사진을 보면 바뀐 것은 멤버 변수 하나만 바꿨을 뿐인데 Person 클래스에 있는 대다수의 코드가 변경된다.
이는 유지보수 측면에서 굉장히 좋지 않은 케이스라고 할 수 있다.
💡 느슨한 결합 : 짧게 말하자면 현실적으로 쓸 수 있는 코드이다
하나의 컴포턴트 변경이 다른 컴포넌트들의 변경을 요구하는 위험을 줄이는 것을 목적으로 하는 시스템에서 컴포넌트 간의 내부 의존성을 줄이는 것을 추구하는 디자인 목표이다.
시스템을 더욱 유지하기 좋게 만들고, 전체 프레임워크를 더욱 안정적으로 만들고 시스템의 유연성을 증가하게 하려는 의도를 가진 포괄적인 개념이다.
✔느슨한 결합의 장점
- 시험 가능성(testability)을 향상시킨다
- 인터페이스에 대한 프로그램의 GOF 원칙(=구현하지 않기)을 준수하는데 도움을 준다
- 서로 의존성이 크지 않을 때 코드/모둘/객체/구성 요소의 다른 부분을 바꾸는 것이 훨씬 쉽다
- 높은 변경가능성, 하나의 모듈은 예측하지 않는 방법으로 다른 모듈을 깨지 않는다.
참고 자료
'I LEARNED > 자료구조' 카테고리의 다른 글
[자료 구조] 교착상태 (0) | 2023.01.24 |
---|---|
[자료 구조] TDD? (0) | 2023.01.20 |
[자료구조] 객체 지향적 설계 원칙 (0) | 2023.01.19 |
[자료구조] 객체지향? 객체지향 프로그래밍? (0) | 2023.01.17 |
[자료 구조] 정규화(Normalization) (0) | 2022.08.18 |
댓글