본문 바로가기

Spring

(77)
Spring- IoC, DI 컨테이너 IoC 의존관계 역전 클라이언트 클래스에서 직접 객체를 필요시 마다 생성해서 직접 관리하는 것이 아닌 외부에서 DI를 통해서 의존관계를 연결해주는 것을 연결 대상이 역전 되었다하여 의존관계 역전이라고 한다. DI 컨테이너 직전 포스팅에서 보았던 AppConfig와 같이 외부에서 의존관계 주입을 통해서 외부에서 객체를 생성하고 의존관계를 연결해주는 것을 DI 컨테이너 라고 한다. IoC 컨테이너, 어셈블러, 팩토리라고도 한다.
Spring- Dependency Injection(의존 관계 주입) DI(의존관계 주입) 코드를 짜면서 내부 로직을 변경해야 하는 경우에 OCP 원칙이 잘 지켜지지 않을 수 있다. OCP 원칙과 DIP 원칙을 준수하기 위해서 DI를 진행한다. 참고) OCP: 기존 코드를 변경하지 않는 것 DIP: 클래스가 아닌 인터페이스에 의존하는 것 package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; public class OrderServiceImpl implements OrderService{ //인터페이스에만 의존 (DIP 원칙 준수) private final MemberRe..
Spring- 객체 지향의 SOLID 원칙 5개 원칙 - SRP : 단일 책임 원칙 한 클래스는 하나의 책임만 가져야한다. 변경시 파급효과가 적으면 단일 책임 원칙을 잘 따른 것 - OCP : 개방 폐쇄 원칙 기존 코드를 변경하지 않는 것. 다형성을 활용해 확장에는 열려있으나 변경에는 닫혀있도록한다. 다형성만 가지고는 OCP 원칙을 지킬수 없다. 객체를 생성하고 연관관계를 맺어주는 별도의 조립, 설정자가 필요 - LSP : 리스코프 치환 원칙 인터페이스의 규약이 존재한다면 하위 클래스는 무조건 그 규약을 지켜야함. 예를 들어 엑셀을 밟으면 앞으로 간다라고 했으면, 하위 클래스에선 무조건 이를 따라야한다. 엑셀 밟으면 뒤로가는 식으로 구현하면 안된다는 말. 컴파일 되고 안되고의 문제가 아닌 구현을 하는데 있어서 기존의 원칙을 위반해서는 안된다는 것..
Spring- 자바 코드로 직접 스프링 빈 등록 package hello.hellospring; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.MemoryMemberRepository; import hello.hellospring.service.MemberService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringConfig { @Bean //자바코드로 스프링 빈 설정 public MemberService memberSer..
Spring- 컴포넌트 스캔과 자동 의존관계 설정 스프링 빈 스프링 빈은 스프링 컨테이너에 의해서 관리되는 자바 객체를 의미. 스프링 빈 등록 방식 component scan 자바 클래스 위에 @Component 어노테이션을 붙이면 해당 클래스는 스프링이 자동으로 스프링 빈으로 등록해준다. @Component를 상속받는 어노테이션의 종류 -@Controller 스프링 MVC 컨트롤러로 인식된다. (스프링에 다양한 정보를 던줌) -@Repository 스프링 데이터 접근 계층으로 인식된다. (다양한 기능적인 로직 구현) -@Service 스프링 비즈니스 계층으로 인식된다. (서비스 계층에서 레포지토리에서 만들어진 기능을 활용해 비즈니스적으로 구현) -@Configuration 스프링 설정 정보로 인식된다. Defendency injection (의존 관계..