2023. 3. 20. 20:22ㆍ스터디/토비 스터디
스프링 프레임워크:
스프링 컨테이너(어플리케이션 컨텍스트) 엔진 제공
스프링 컨테이너(어플리케이션 컨텍스트) :
애플리케이션을 구성하는 오브젝트를 생성하고 관리
오브젝트가 생성되고 동작하는 방식에 대한 틀을 제공
코드가 어떻게 작성돼야 하는지에 대한 기준 제시
생성된 오브젝트를 Bean이라고 함
bean 생성, 관계설정 등 제어 작업을 총괄
애플리컨텍스트 사용시 장점
1. 구체적인 펙토리 클래스를 알 필요가 없음
2. 종합 IOC 서비스 제공
- 오브젝트가 만들어지는 방식, 시점, 전략 다르게 가져갈 수 있음
- 자동생성, 오브젝트 후처리, 설정 방식 다변화, 인터셉팅 등 다양한 기능 제공
3. 빈 검색 시 다양한 방법 제공
IOC/DI:오브젝트 생면주기와 의존관게애 대한 프로그래밍 모델 제공
서비스 추상화: 특정 기술에 종속되지 않고 이식성이 뛰어남
AOP : 부가적인 기능을 독립적으로 모듈화
클래스는 스프링 컨테이너 위에서 오브젝트를 생성
코드는 스프링의 모델을 따라 작성
스프링이 제공하는 기술API와 서비스를 활용
관심사 분리
변화는 대체로 집중된 한 가지 관심에 대해 일어나지만, 그에 따른 작업은 한 곳에 집중되지 않은 경우가 많음
관심이 같은 것끼리 모으고, 관심이 다른 것은 따로 떨어져있게 함
응집도는 높이고 결합도는 낮춰야
템플릿 메서드 패턴
추상 메서드나 오버라이딩이 가능한 protected 메서드 등으로 만든 뒤 서브클래스에서 이런 메서드를 필요에 맞게 구현하는 방법
펙터리 메서드 패턴
서브클레스에서 구체적인 오브젝트 생성 방법을 결정하게 하는 방법
추상 클래스는 다중 상속 불가 : 확장이 어려움
추상화 : 어떤 것들의 공통적인 성격을 뽑아서 분리
런타임 시점에 오브젝트 관계를 나타내야
인터페이스가 상속에 비해 훨씬 유연
OCP 개방 폐쇄 원칙
클래스나 모듈 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야
핵심 기능을 구현한 코드는 그런 변화에 영향 받지 않고 유지
전략 패턴
변경에 필요한 알고리즘을 인터페이스 통째로 외부로 분리
구체적인 알고리즘 클레스를 필요에 따라 바꿔 사용
팩토리
객체 생성 방법을 결정, 생성된 오브젝트를 반환
제어관계 역전
오브젝트 스스로 자신이 사용할 오브젝트를 선택/생성하지 않음, 모든 제어 권한을 자신이 아닌 다른 대상에게 위임
용어 정리
빈(BEAN): 스프링 IOC 방식으로 관리하는 오브젝트, 스프링을 사용하는 애플리케이션에서 만들어지는 모든 오브젝트가 다 빈은 아님
빈 팩토리(Bean Factory) : 스프링 IOC를 담당하는 핵심 컨테이너, 빈 생성,조회, 반환, 빈 관리 기능 담당
애플리케이션 컨텍스트(Application Context) : 빈 팩토리를 확장한 IOC 컨테이너, 기본적인 기능은 빈 팩토리와 동일, 여기에 스프링이 제공하는 각종 부가 서비스 추가 제공
동일성 : 완전히 같은 동일한(identical) 오브젝트, == 연산자로 비교 가능
동등성: 동일한 정보를 담고있는(equivalent) 오브젝트, equals() 메서드로 비교 가능
싱클톤
하나의 오브젝트를 공유해 동시에 사용
어플리케이션 컨텍스트는 싱글톤 레지스트리임
여러 스레드가 동시에 접근 가능 --> 상태 정보를 내부에 갖고있지 않는 stateless(무상태) 방식으로 만들어야
일반적으로 싱글톤 패턴 구현시 문제점
1. private Constructer를 갖고 있기에 상속 불가
2. mock 대체가 불가능해 테스트가 힘듬
3. 단 하나만 만들어지는 것을 보장하지 못함
4. 전역 상태를 만듬
의존 관계 주입 충족 조건
1. 런타임 시점의 의존관계가 드러나지 않아야 : 인터페이스에만 의존해야
2. 런타임 시점의 의존관계는 제 3의 존재(ex: 컨테이너, 팩토리)가 결정해야
3. 의존관계는 오브젝트에 대한 레퍼런스를 외부에서 주입해주어야