객체를 사용하는 두 가지 방법
첫 번째 그림은 A가 B와 C를 직접 생성해서 사용하는 것이므로 A가 갑이라고 할 수 있다.
두 번째 그림은 A가 B와 C에게 요청을 해서 받아온 것을 setter()나 construct()로 주입하기 때문에 A가 을, B와 C가 갑이라고 할 수 있다.
A에서 B나 C, X, Y, Z 등의 클래스를 요청을 하면 IoC 컨테이너에서 이를 넘겨주는데 이때 IoC 컨테이너는 스프링이라고 할 수 있다. IoC는 Inversion of Control 인데, 갑과 을 관계 즉, 개발자와 프레임워크의 관계가 역전되었다는 의미이다.
개발자 입장에서는 객체의 제어권이 컨테이너에 넘어갔다고 할 수 있다.
A가 B와 C를 생성하여 라이프사이클을 관리하게 되면 결합이 강해지기 때문에 관리하기가 힘들지만 외부에서 가져다 쓰기만 한다면 결합이 약해져서 관리하기 편해진다.
위의 코드를 보면 강한 결합인 메서드에서는 직접 Member 객체를 만들어서 쓰지만 약한 결합에서는 Member m을 파라미터로 받아서 m2에 주입한다.
위에서 Member 클래스 안에 있는 public Member(){}의 public을 private으로 바꾸면 강한 결합인 경우 에러가 발생한다.
반면에 약한 결합을 사용하는 경우엔 직접 생성자를 사용하여 생성하는 것이 아니라 이미 만들어져 있는 것을 요청하여 사용하는 느낌이다 보니 에러가 발생하지 않는다. 이처럼 약한 결합 형태로 프로그래밍을 한다면 변화에 보다 유연하게 대처할 수 있다는 장점이 있다.
싱글톤 패턴 (Singleton Pattern)
여기서 private으로 생성자를 설정하는 것은 싱글톤 패턴과도 연관이 있다.
싱글톤 패턴이란 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하는 디자인 유형이다.
싱글톤 패턴을 사용하면 메모리 낭비를 방지할 수 있고 싱글톤으로 만들어진 클래스의 인스턴스는 전역이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
'BE > Spring Boot' 카테고리의 다른 글
REST API와 flutter sdk를 이용한 카카오 로그인의 차이점 (0) | 2022.07.07 |
---|---|
의존관계 주입 (2) | 2022.03.20 |
싱글톤 방식의 주의점 (0) | 2022.03.20 |
웹 애플리케이션과 싱글톤 (0) | 2022.03.20 |
좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2022.03.11 |