FireDrago

[Spring] 스프링 기본 원리 본문

프로그래밍/Spring

[Spring] 스프링 기본 원리

화이용 2024. 1. 4. 13:25

 

객체지향의 5원칙 중 DIP 와 OCP가 있다. 

 - 의존성 역전 원칙 (Dependency Inversion Priciple) : 구체화가 아닌 추상화에 의존해야 한다.

 - 개방 폐쇄 원칙 (Open Close Principle) : 소프트웨어를 확장해도 기존 코드에 변경이 있으면 안된다

 

이 두 원칙을 바탕으로 다음 코드를 살펴보자

 

나름 확장을 대비하기 위해 인스턴스 변수로 인터페이스 타입을 가지고 있다.

하지만 구현체를 직접 new 해서 할당해주고 있다. 이렇게 되면 위의 두 원칙을 모두 위반 할 수 밖에 없다.

할인정책을 변경하려면 FixedDiscount() 를 다른 구현객체로 직접 바꿔줘야 한다. (OCP 위반) 

구현체를 직접 생성하고 있으므로 의존성 역전 원칙도 위반한다. (DIP 위반)

이 두 원칙을 지킬 수 있는 방법이 바로 "관심사 분리" 이다. 

 

관심사 분리

 

위 객체에서 객체지향의 원리가 지켜지지 않는 이유가 무엇일까?

구현객체의 할당과 로직 실행의 두가지 일을 하고 있기 때문이다. 관심사의 분리를 통해 객체 할당과 로직 실행을 분리한다
AppConfig 와 같이 구현체를 설정하는 역할을하는 클래스이다.

AppConfig 클래스는 각 객체에 필요한 구현체를 할당하는 일을 한다.

 

AppConfig 객체의 도입으로 인해 기존 객체는 생성자를 통해 구현객체를 주입받는다. "의존성 주입" 이라고 한다

MemberServiceimpl 객체는 완전히 추상화에만 의존하고, 구현체가 달라지더라도 코드의 변경이 필요없다.

AppConfig 는 구현객체를 생성하고 연결하고, MemberServiceImpl 은 자신의 역할에만 집중하여 책임이 명확해진다.

 

이제 프로그램에 대한 제어흐름은 AppConfig가 관리한다. 프로그램의 외부 설정 클래스가 제어흐름을 제어하는 것이다.

이를 "제어의 역전 IoC (Inversion of Control)" 이라고 한다.

 

스프링

 

이제 AppConfig 객체에 스프링을 적용해보자

 - @Configuration : 스프링에게 설정파일임을 알리는 애너테이션

 - @Bean : 스프링 컨테이너에 등록하기 위한 빈을 설정하는 애너테이션

 

스프링은 AppConfig 같은 설정파일을 통해 스프링 컨테이너에 Bean 객체를 미리 생성한다. 

프로그래머는 필요한 객체를 스프링 컨테이너를 통해 주입받으면 된다. 스프링 컨테이너와 빈 사용법을 보자

 - ApplicationContext : 스프링 컨테이너를 의미한다. AnnotationConfigApplicationContext(설정클래스.class) 로 

   @Configuration 애너테이션이 붙은 설정파일을 지정한다.

- getBean("메서드이름", 반환클래스) 로 Bean 객체를 가져온다.

 

스프링 기본 원리

1. 관심사 분리를 통해 필요한 객체를 설정파일로 미리 설정한다.

2. 필요한 객체를 '빈'이라는 이름으로 '스프링 컨테이너'에 생성하여 필요할때 주입한다.

이 글은 김영한님의 스프링 핵심 원리 - 기본편을 바탕으로 작성되었습니다.

'프로그래밍 > Spring' 카테고리의 다른 글

[Spring] 스프링 컨테이너와 싱글턴  (0) 2024.01.06
[Spring] 스프링 컨테이너와 스프링 빈  (0) 2024.01.05
[Spring] AOP  (0) 2024.01.02
[Spring] 스프링 의존관계 설정  (0) 2023.12.30
[Spring] 회원관리 예제  (0) 2023.12.29