본문 바로가기

Spring

싱글톤 패턴 싱글톤패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. private 생성자를 사용해서 외부에서 임의로 new 키워들ㄹ 사용하지 못하게 막는다. 문제점 구현 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다 -> DIP, OCP 위반 테스트하기 어렵다 내부속성을 변경하거나 초기화 하기 어렵다. private생성로 자식 클래스를 만들기 어렵다. 유연성이 떨어진다. 안티패턴으로 불리기도 한다. 싱글톤컨테이너 문제점을 해결하고 객체 인스턴스를 싱글톤으로 관리 스프링 컨테이너의 기본방식이 싱글톤, 하지만 요청할 때마다 새로운 객체 반환도 가능 ApplicationContext ac = new AnnotationConfigApplicationContext(App.. 더보기
빈 생명주기 콜백 빈 생명주기 콜백 DB 커넥션 풀, 네트워크 소켓과 같이 미리 연결 및 초기화를 해놓기 위하여 사용자는 의존관계 주입 끝나고 초기화를 해야한다. ​ 스프링 빈 라이프 사이클 스프링 컨테이너 생성 -> 빈 등록 -> 의존관게 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 종료 Setter나 필드로 값을 주입시, 생성자에서 초기화를 하면 제대로 된 초기화가 이루어지지 않을 수 있다. 초기화 콜백 : 빈이 생성되고, 의존관계 주입 후 실행 소멸전 콜백 : 빈이 소멸되기 직전에 호출 @Configuration static class LifeCycleConfig{ @Bean public DbClient dbClient(){ DbClient dbClient = new DbClient(); //1 dbCl.. 더보기
의존관계 주입 다양한 의존관계 주입방법 생성자 주입 Setter 주입 필드 주입 일반 매서드 주입 생성자주입 생성자를 통하여 의존관계 주입 1번만 호출하는 것이 보장, 불변, 필수 의존관계에 사용 @Autowired public mainServiceImpl(userRepository userRepository, userPolicy userPolicy) { this.userRepository = userRepository; this.userPolicy = userPolicy; } **생성자가 1개만 있을 시 @Autowired 생략 가능 Setter 주입 수정자 매서드를 통하여 의존관계 주입 선택, 변경 가능성이 있는 경우 사용 Setter 주입 @Autowired(required = false)//주입할 대상이 없어도.. 더보기
컨테이너 IoC, DI, 컨테이너 제어의 역전(IoC) 기존 프로그램은 구현 객체가 필요한 서버 객체를 생성하고, 연결하고, 실행했다. -> 프로그램의 제어의 흐름을 조종 AppConfig를 사용하여 구현 객체는 자신의 로직만 실행 프로그램이 제어흐름을 하는 것이 아닌 외부에서 관리하는 것을 **제어의 역전(IoC)**라고 한다. 프레임워크 vs 라이브러리 프레임워크 : 내가 작성한 코드를 제어하고, 대신 실행 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 진행 DI 의존관계는 정적인 클래스, 실행 시점에 결정되는 동적 객체를 분리하여 생각 정적인 클래스 : import 코드만 보고 쉽게 판단 가능, 하지만 실제 어떤 객체가 주입 될지는 모름 의존관계 주입 : 실행시점에서 외부(AppConfig)에서 구현.. 더보기