본문 바로가기

분류 전체보기

(79)
3. IoC 컨테이너: @Component와 ComponentScan Component, Component Scan 빈으로 등록할 수 있는 Component와 그 종류들에 대해 살펴보고 사용한 Component들을 스캔하여 빈으로 등록할지 결정하는 Component Scan에 대해 알아본다. Component @Component Annotation을 붙이면 그 객체는 빈으로 등록이 된다. 계층이나 상황에 맞게 명시적으로 붙일 수 있도록 추가로 4가지의 종류가 존재한다. 이는 @Component를 Meta Annotation으로 가지고 있어 똑같은 기능을 한다. @Repository Persistence Layer에서 빈으로 등록할 때 주로 사용하는 Annotation @Service Business Layer에서 빈으로 등록할 때 주로 사용하는 Annotation @Con..
팩토리 메서드 패턴(Factory Method Pattern) 팩토리 메서드 패턴 객체를 생성하기 위해 인터페이스를 정의하고, 어떤 클래스의 인스턴스를 만드는 것은 서브 클래스에서 결정하게 만드는 패턴 클래스의 인스턴스를 만드는 일을 서브 클래스에게 맡긴다. Creator 팩토리 메서드에서 생성한 인스턴스를 이용해야 하므로 추상 클래스로 구현한다. Product 하위 클래스들이 공통으로 가지는 행동이 있다면 추상 클래스로 생성하고 그렇지 않으면 interface로 생성한다. 다이어 그램에서 interface란 java의 Interface 구현 타입이 아닌 추상화된 메서드를 구현한다는 뜻이다. 예제 Creator public abstract class PizzaStore { public void orderPizza(PizzaType type) { Pizza pizza..
데코레이터 패턴(Decorator Pattern) 데코레이터 패턴 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴 객체에 추가적인 요건을 동적으로 첨가하며, 기능 확장이 필요할 때 서브 클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다. Component 실질적인 인스턴스를 컨트롤하는 역할 ConcreteComponent Component의 실질적인 인스턴스의 부분이며 책임의 주체의 역할 Decorator Component와 ConcreteDecorator를 동일시하도록 해주는 역할 ConcreteDecorator 실질적인 장식 인스턴스 및 정의이며 추가된 책임의 주체 부분 예제 커피 주문을 예시로 들어서 진행해 보자. Component public interface Beverage { public double cost(); public..
2. IoC 컨테이너: @Autowire @AutoWired 등록된 빈을 주입하여 사용하고 싶을 때 사용하는 Annotation이다. 필요 한 의존 객체의 "타입"에 해당하는 빈을 찾아 주입한다. required의 기본값은 true이므로 빈을 찾지 못하면 App 구동 실패 생성자, 세터, 필드에서 사용할 수 있다. (생성자는 스프링 4.3부터 생략 가능) 1. 해당 타입의 빈이 한 개인 경우 @Service와 @Repository를 통해 빈으로 등록하였으므로 정상적으로 빈을 찾아 주입한다. @Repository를 제거했을 때 Repository에 Annotation을 주지 않고 생성자를 통해 빈을 주입하려고 하면 에러가 발생한다. 생성자는 생성 시 userRepository의 Bean을 찾지 못해 에러가 뜨는 건 확실하나 Setter는 생성 시..
옵저버 패턴(Observer Pattern) 옵저버 패턴 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다. 어떠한 객체에 의존하는 다른 객체들을 Observer , 한 객체를 Subject라고 한다. 클래스 다이어그램 Subject와 Observer는 인터페이스로 구현한다. 이렇게 Subject와 Observer를 인터페이스로 구현하여 사용하면 Subject는 Observer 인터페이스만 구현하고 Obsever의 구상 클래스가 무엇인지 알 필요가 없다. 특징 옵저버는 언제든지 새로 추가할 수 있다.(Observer 인터페이스를 구현) 새로운 형식의 옵저버를 추가해도 Subject를 전혀 변경할 필요가 없다. Subject와 옵저버는 서로 독립적으로 재사용 가능하다...
스트래티지 패턴(Strategy Pattern) 인터페이스 Interface를 이용하면 기능에 대한 선언과 구현이 분리 가능하다. Interface를 통해 기능의 사용 통로가 될 수 있다. 델리게이트 특정 객체에 기능을 사용하기 위해 다른 객체의 기능을 호출하는 것이다. 스트레티지 패턴(전략 패턴) 특정한 알고리즘을 정의하고 각 알고리즘을 캡슐화하여 실행중에 알고리즘을 선택할 수 있는 디자인 패턴이다. 이 패턴을 활용하면 클라이언트와는 독립적으로 다양한 알고리즘을 정의, 추가 할 수 있다. 위의 다이어그램에 맞게 구현을 해볼 것이다. Clinet는 GameCharacter 이 된다. Strategy Interface는 Weapon이 된다. Stratecy Clasee 들은 Knife, Sword, Ax들이 될 것이다. Weapon이라는 인터페이스를 구..
1. IoC 컨테이너: 스프링 IoC컨테이너와 빈 설정 방법들 Spring IoC Container 스프링 IoC 컨테이너와 번 설정 방법들에 대해서 알아본다. 컨테이너 적절한 설정만 되어있다면 누구의 도움 없이도 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤해준다. IoC(Inversion of Conrol) 제어의 역전 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 게 아닌, 주입받아 사용하는 방법 스프링 프레임워크에서는 인스턴스의 생성부터 소멸까지 인스턴스의 생명주기를 개발자가 아닌 IoC 컨테이너가 대신해준다. 스프링 IoC 컨테이너 BeanFactory Interface(가장 최상위에 있는 인터페이스) 애플리케이션 컴포넌트의 중앙 저장소. 빈 설정 소스로부터 빈 정의를 읽고, 빈을 구성하고 제공한다. 빈(Bean)..