목록전체 글 (37)
프로그래밍 끄적끄적
🌳 빈 생명주기 스프링 빈을 생성할 때 객체 생성 -> 의존관계 주입 단계를 거친다. 이때, 객체만 생성되고 의존관계 주입이 완료되기 전까진 빈이 초기화 되었다고 말할 수 없다. (중요 정보는 누락된 상태이므로) 따라서 모든 의존관계 주입이 완료된 이후에 데이터를 사용해야 한다. 그런데, 의존관계 주입이 모두 완료되었다는 것을 어떻게 알까? 스프링은 의존관계 주입이 완료됐을 때와 스프링 컨테이너가 종료되기 직전에 콜백을 준다. 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료 🌳 생명주기 콜백 지원 방법 1. InitializingBean, DisposableBean 인터페이스 ▪ 해당 빈 객체에 InitializingBean..
🌳 종류 1. @ToString ▪ exclude="[필드명]" 을 사용하면 결과에서 제외시킬 수 있다. (양방향 관계시 무한 참조를 막음) 2. @Getter ▪ 클래스 앞에 사용하면 전체 필드들에 대해 getter를 만들어줌 ▪ 필드 앞에 사용하면 해당 필드에 대한 getter를 만들어줌 3. @Setter ▪ 변경 가능성이 열려있기 때문에 객체의 안정성이 보장받기 힘드므로 가급적 사용하지 말자! 4. @EqualsAndHashCode ▪ 클래스에 대한 equals 함수와 hashCode 함수를 자동으로 생성해준다. 5. @RequiredArgsConstructor ▪ final 키워드가 붙은 필드들로 구성된 생성자를 만들어 준다. * 요즘에는 생성자를 하나만 둬서 @Autowired를 사용하지 않고..
🌳 자동주입 누락 옵션 1. @Autowired(required=false): 자동 주입할 대상이 없으면 메서드가 호출되지 않는다. 2. org.springframework.lang.@Nullable: 자동 주입할 대상이 없으면 null이 입력된다. 3. Optional: 자동 주입할 대상이 없으면 Optional.empty 가 입력된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 public class AutowiredTest { @Test void AutowiredOption() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.cla..
🌳 의존관계 주입 방법 ▪ 생성자 주입 ▪ 수정자 주입 (Setter 주입) ▪ 필드 주입 ▪ 일반 메서드 주입 🌳 생성자 주입 생성자를 통해 의존관계를 주입한다. (해당 객체가 빈에 등록될 때 생성자를 호출하며, 이 때 필요한 객체들이 주입된다.) 🍃 특징 ▪ 생성자 호출시점에 딱 한 번만 호출되는 것이 보장된다. (반대로, setter 주입을 사용하면 실수로 데이터를 변경할 수 있기 때문에 위험하다. 가급적 데이터는 열린 환경을 제공하지 않아야 한다.) ▪ 불변, 필수 의존관계에 사용한다. ▪ 생성자가 하나만 있다면 @Autowired 어노테이션을 사용하지 않아도 자동으로 주입한다. 🍃 생성자 주입을 선택해야 하는 이유 1) 불변하다. 대부분의 의존관계 주입은 종료시점까지 의존관계를 변경할 일이 없다..
🌳 Filter 종류 ▪ includeFilters: 조건을 만족하는 클래스만 스캔한다. ▪ excludeFilters: 조건을 만족하는 클래스는 제외하고 스캔한다. - 예문 1 2 3 4 @ComponentScan( includeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION, classes=MyIncludeComponent.class), excludeFilters = @ComponentScan.Filter(type=FilterType.ANNOTATION, classes=MyExcludeComponent.class) ) Colored by Color Scripter cs 🌳 FilterType 옵션 ▪ ANNOTATION: 디폴트값이며, 어노테..
🌳 컴포넌트 스캔 (@ComponentScan) 컴포넌트 스캔은 @Component 와 @Service, @Repository, @Controller 어노테이션이 설정된 클래스들을 자동으로 스캔하여 스프링 빈으로 등록해준다. 이때 이를 설정하는 파일인 @Configuration도 등록 대상이 되는데, 이때 테스트를 위해 만들었던, 그리고 실습을 위해 작성했던 다른 @Configuration 클래스들도 모두 등록될 수 있기 때문에 excludeFilters 설정을 이용하여 제외해준다. (Config 파일들은 AnnotationConfigApplicationContext 객체를 통해 개발자가 직접 코드에 삽입하기 때문에 자동 등록하지 않아도 문제가 생기지 않는다.) --> 일반적으로는 이렇게 해 줄 필요 없..
싱글톤 패턴을 적용하면 필요할 때마다 객체를 생성하는 것 대신, 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있다. 🌳 싱글톤 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다.(DIP 위반) 클라이언트가 구체 클래스에 의존해서 OCP를 위반할 가능성이 높다. 테스트하기 어렵다. 내부 속성을 변경하거나 초기화하기 어렵다. private 생성자로 자식 클래스를 만들기 어렵다. 결론적으로 유연성이 떨어진다. 안티패턴으로 불리기도 한다. 🌳 싱글톤 컨테이너 싱글톤 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤으로 관리한다. 🌳 싱글톤 주의점 무상태로 설계해야 한다. 상태를 유지하게(공유 변수(=싱글톤의 필드)를 변경) 설계하..