Section 1. Loose Coupling
1. 느슨한 결합력 (Loose Coupling)
하나의 컴포넌트 변경이 다른 컴포넌트의 변경을 요구하지 않도록 컴포넌트 간의 내부 의존성을 줄이는 것 (결합력을 낮춤)
2. 느슨한 결합력이 필요한 상황
- Service Layer - 사용자의 요구에 맞는 서비스를 제공하는 계층
- Dao Layer - 서비스가 비지니스 로직에 필요한 데이터를 요청하면 그에 알맞은 데이터를 제공하는 계층 (실직적으로 DB 접근)
- 서비스의 일부분 변경 등의 이유로 B1을 바꿔야 한다고 가정했을 때 아래와 같은 방법으로 변경할 수 있음
① 기존의 B1 코드 일부분을 수정 (코드 변경)
② B2라는 새로운 코드를 만들고 B1을 대체 (덮어쓰기, 코드 추가)
- 두번째 방법을 사용하게 되면, 코드를 변경하지 않고 새로운 코드를 추가하는 것이기 때문에 재배포를 하지 않아도됨, 하지만 두번째 방법을 사용하기 위해서는 Service의 코드를 아래와 같이 수정해야 하므로 결국 다시 재배포를 해야됨
private B1 b = new B1();
=> private B2 b = new B2();
3. 인터페이스 사용
- 위와 같은 상황처럼 하나의 컴포넌트가 변경될 때 다른 관련된 다른 컴포넌트 또한 변경되는 결합력을 없애기 위해 인터페이스를 이용
- 특정한 객체의 자료형이 아닌 공통의 인터페이스 자료형으로 접근 (1차적인 결합력 낮춤)
- 하지만 아직도 B1, B2 라는 특정 객체의 클래스명을 지정해서 접근해야함
private B b = new B1();
=> private B b = new B2();
4. spring IOC / DI
- B1() 부분의 객체 생성을 B2()로 변경할 때, 소스 코드를 이용해 변경하지 않고 객체 생성과 조립을 위한 외부 파일이나 설정 (XML, Annotation)을 이용하여 변경
- 이러한 느슨한 결합력을 구현하는 것이 바로 Spring Framework 가 제공하는 IOC / DI