본문 바로가기

스프링41

스프링 컨테이너와 스프링 빈 ApplicationContext 를 스프링 컨테이너라 한다. ApplicationContext 는 인터페이스이다. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 직전에 AppConfig 를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 자바 설정 클래스를 기반으로 스프링 컨테이너( ApplicationContext )를 만들어보자. new AnnotationConfigApplicationContext(AppConfig.class); 이 클래스는 ApplicationContext 인터페이스의 구현체이다. 스프링 컨테이너의 생성 과정 1. 스프링 컨테이너 생성 new AnnotationConfigApplica.. 2022. 3. 18.
관심사의 분리와 AppConfig OrderServiceImpl에서 할인정책이 변경될때 DIP와 OCP를 위반하는 경우가 발생했다. 어떻게 문제를 해결할 수 있을까 ? 클라이언트 코드인 OrderServiceImpl 은 DiscountPolicy 의 인터페이스 뿐만 아니라 구체 클래스도 함께 의존한다. 그래서 구체 클래스를 변경할 때 클라이언트 코드도 함께 변경해야 한다. DIP 위반 추상에만 의존하도록 변경(인터페이스에만 의존) DIP를 위반하지 않도록 인터페이스에만 의존하도록 의존관계를 변경하면 된다. 인터페이스에만 의존하도록 설계를 변경하자. 그런데 구현체가 없는데 어떻게 코드를 실행할 수 있을까? 실제 실행을 해보면 NPE(null pointer exception)가 발생한다.이 문제를 해결하려면 누군가가 클라이언트인 OrderS.. 2022. 3. 16.
주문과 할인 도메인 오늘의 목표 - 주문과 할인 도메인 설계, 개발, 테스트 할인 정책부터 만든다. discount 패키지안에 DiscountPolicy 인터페이스를 작성한다, 일단 정액 할인 정책의 구현체를 만든다 FixDiscountPolicy (정률 할인 정책은 다음에) 다음 Order 서비스를 만들기 위해 order 패키지를 생성하고 Order 클래스를 작성한다. 그 다음 OrderService 인터페이스를 작성한다. 그 다음 OrderServiceImpl 구현체를 작성한다. main 함수로 OrderApp 클래스를 작성하여 테스트 해본다. 결과를 눈으로 확인해야 하는 불편함이 있다. 다음은 Junit으로 넘어와 order 패키지를 생성하고 OrderServiceTest 클래스를 생성하여 테스트한다. 초록불이 뜨며 .. 2022. 3. 15.
회원관리예제 웹MVC 개발 오늘은 회원관리 웹MVC와 스프링 DB접근기술에 대해 공부했다. 회원 웹 기능 - 홈 화면 추가 controller 패키지안에 HomeController 클래스를 만든다. @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } home으로 return 하기 때문에 home.html 파일을 templates 패키지안에 만들어준다. Hello Spring 회원 기능 회원 가입 회원 목록 실행후 localhost:8080에 들어가면 이런 창이 나오게된다. MemberController에 이 코드를 추가한다. @GetMapping("/members/new") public String cr.. 2022. 1. 23.
스프링 빈과 의존관계 컴포넌트 스캔과 자동 의존관계 설정 controller 패키지 안에 MemberController를 만든다. @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { this.memberService = memberService; } } 생성자에 @Autowired를 붙이면 스프링이 컨테이너에 있는 Memberservice와 연결해준다. 하지만 이렇게 하면 오류가 발생하는데, 스프링 컨테이너에 memberService가 빈으로 등록되어있지 않기 때문이다. 해결하기 위해서는 MemberServ.. 2022. 1. 20.