킹영한님의 강의를 수강하고 있습니다.
게시글
블로그
전체 32022. 02. 22.
0
스프링 핵심 원리
객체지향의 5대 원칙 할인정책 인터페이스에 구현체를 할당하는 코드에서.. private final DiscountPolicy discountPolicy = new FixDiscountPoilcy();private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); discountPolicy라는 인터페이스를 사용해 구현체만 바꿔주면서 사용하고 있다. 다형성 활용, 인터페이스와 구현 객체를 분리했지만 결국 클라이언트 코드에서 구현 클래스에 의존하고 (DIP위반) 기능을 변경하면 클라이언트 코드를 건드려야 함(OCP위반). *결국 외부에서 구현체를 주입하지 않으면 DIP와OCP 원칙을 지킬 수 없음. 문제 해결 private final MemberRepository memberRepository;private final DiscountPolicy discountPolicy;public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy;} 생성자에 의해 구현체를 주입 당하고 있음. 구현체가 무엇이 들어올지 알 수 조차 없기 때문에 인터페이스에만 의존하고 있다고 할 수 있음. (DIP)--> 이 방식을 생성자 의존성 주입이라고 한다. 당연하게도 구현체 변경 시 코드의 수정이 필요 없게된다. (OCP) 클래스의 권한이 줄어듬 -> 책임이 명확해짐 (SRP)- > 관심사의 분리 IoC : 위 처럼 외부에서 제어 흐름을 관리하는 것을 말한다. IoC 컨테이너 : 의존성을 대신 주입해주는 외부 객체 DI: 위 처럼 실행 시점(런타임)에 외부에서 실제구현객체를 생성 후 클라이언트에 전달해 서버의 의존관계가 연결 되는 것, 의존관계 주입이다. 스프링 컨테이너 - ApplicationContext객체를 말한다. - @Configuration 클래스를 구성 정보로 사용하고 @Bean 메소드를 컨테이너에 등록. 스프링 빈이라 칭 함. 빈 조회 bean 조회 시 부모타입을 조회하면 자식 타입들이 전부 조회 됨. 고로 Object타입 조회 시 모든 빈이 조회된다. BeanFactory - 스프링 컨테이너 최상위 인터페이스, 빈 조회 및 관리 담당 - ApplicationContext가 상속 받아서 추가 부가기능과 함께 제공하기 때문에 직접 사용하진 않음 - 고로 BeanFactory나 ApplicationContext를 스프링 컨테이너라고 칭한다. BeanDefinition - 스프링은 메타정보를 BeanDefinition인터페이스를 사용해서 추상화한다. - 그래서 구현체를 바꿀 수 있기 때문에 java파일 xml이나 다른 파일로도 구현이 가능 함. - 빈 만드는 방법은 직접 등록, factory method 사용해서 등록 (어노테이션사용)으로 나뉜다.
2022. 01. 26.
0
스프링 DI
DI = Dependancy injection 의존성 주입 스프링 컨테이너에서 @Component 가 있으면 직접 객체를 생성하여 관리해준다. @controller, @service, @repository는 @component를 포함하는 애너테이션이다. @autowired는 component가 있는 객체들의 의존성을 주입시켜 줌 주로 쓰는 정형화된 방식 자바코드로 빈 등록@configuration 애너테이션 달고 @Bean 메서드로 return 해주는 방식구현체를 변경해야 되는 경우 재사용성을 늘리기 위해 사용. - config 파일 bean만 수정해주면 됨 DI 방식1. 필드 주입 - 중간에 변경 불가 ( 실행중 x)2. setter주입 - 수정, 접근 위험3. 생성자 주입 - 가장 권장되는 방식
2022. 01. 24.
0
스프링 웹 개발 기초
웹 개발 방식1.정적 컨텐츠2. MVC와 템플릿 엔진3. API 정적컨텐츠url경로 접속 요청-> 관련 컨트롤러를 찾음 -> 없을 시 -> resources: static/ 에서 정적 파일 index.html을 찾고 반환해줌. MVC와 템플릿 엔진-thymeleaf th:text="'hello' + ${name}">hello! empty서버를 거치면 th:text에 있는 텍스트, 아니면 태그 사이 값 출력 함. API@ResponseBody //http 통신 응답에 데이터를 직접 넣어주겠다.return에 객체가 오면 json으로 응답.xml -> 기본 json 방식 추세