본문 바로가기
개발

토비의 스프링을 읽고 막 적어보자 (1)

by 상5c 2019. 10. 18.

191018

 

어떻게 적용할 것인가를 항상 생각하며 읽을 것.

남에게 설명할 수 있기 전까지는 안다고 할 수 없다.

스프링 부트를 맛보니 스프링 실력이 모자라다고 느꼈다.


1. 개방 폐쇄 원칙. OCP Open Close Principle
클래스나 모듈은 확장에는 열려있어야 하고 수정에는 닫혀있어야 한다.

2. 단일 책임 원칙. SRP Single Responsibility Principle
하나의 클래스는 하나의 책임만 가진다.

3. 리스코프 치환 원칙 LSP Liskov Subsitution Priciple

4. ISP Interface Segregation Principle

5. DIP Dependency Inversion Principle

전략 패턴.

스프링은 객체지향적 설계 원칙과 디자인 패턴에 나타난 장점을 자연스럽게 개발자들이 활용할 수 있게 해주는 프레임워크.
프레임워크에는 제어의 역전 개념이 사용되어야 한다. 

팩토리.
객체의 생성을 담당. 생성 방법을 결정하고 만들어진 객체를 돌려준다.


빈 bean.
스프링에서 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트.

그리고 이 빈의 생성과 관계 설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리라고 부른다.
보통은 이 빈 팩토리를 좀 더 확장한 애플리케이션컨텍스트를 주로 사용한다.
애플리케이션컨텍스트
IoC방식을 따라 만들어진 일종의 빈 팩토리.

설정을 담당하는 클래스에 @Configuration, XX타입의 오브젝트를 생성하고 초기화해서 돌려주는 메서드에는 @Bean.

 

//
@Autowired는 쉽게 말해
User user = new User() == @Autowired User user
이 new User() 부분을 '상황에 맞게' 해준다.

//

 

@Configuration을 설정정보로 사용하려면 AnnotationConfigApplicationContext를 사용하면 된다.

ApplicationContext context = new AnnotationConfigApplicationContext(xxx.class)

UserDao dao = context.getBean("userDao", UserDao.class)

두 번째 인자(리턴 타입)를 비워도 되나 캐스팅을 해야함.

 

//

@Autowired는 쉽게 말해 
User user = new User()

== @Autowired User user

== User user = context.getBean(user, User.class)
context.getBean을 '상황에 맞게' 해준다.

//

 

getBean을 하게되면 @Configuration으로 등록한 Factory에서 해당 Bean을 생성 요청하고 이를 돌려준다.

ApplicationContext에서는 @Bean이 붙은 메서드이름을 가져와 Bean들의 목록을 만들어두고 이를 찾아서 생성해준다.

 

애플리케이션 컨텍스트

장점 1.

클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다. (원하는 빈만 알면 됨)

팩토리를 일일이 만들지 않아도 되며 일관된 방식으로 원하는 오브젝트를 가져올 수 있다.

 

장점 2.

애플리케이션 컨텍스트는 종합 IoC 서비스를 제공해준다.

단지 생성, 관계설정 뿐만 아니라 만들어지는 방식, 생성 시점, 생성 전략 관리.

부가적으로 자동생성, 오브젝트 후처리, 정보의 조합, 설정 방식 다변화, 인터셉팅 등의 다양한 기능을 제공한다.

 

장점 3.

빈을 검색하는 다양한 방법을 제공한다.

타입으로 검색, 특정 애노테이션 설정된 빈 검색.