Spring/Computer Science(7)
-
07. Spring MVC
Spring 프레임워크에서 제공하는 웹 모듈이다. MVC 는 Model-View-Controller 의 약자로, 기본 시스템 모듈을 MVC 로 나누어 구현되어있다. Model 은 '데이터' 디자인을 담당한다. ex. 상품 목록, 주문 내역 등 View 는 '실제로 렌더링되어 보이는 페이지' 를 담당한다. ex. .JSP, .html 파일들이 여기에 해당된다. Controller 는 사용자의 요청을 받고, 응답을 주는 로직을 담당한다. ex. GET 등의 uri 매핑이 여기에 해당된다. Spring MVC 모듈을 사용하여, 백엔드 프로그래밍의 기본 프레임워크를 잡는다. Web 서버에 특화되어 만들어진 모듈이라, 개발자가 해야할 영역을 더 적게 만들어준다. 즉 기존에 Spring 보다 더 깔끔하고 간편하게 ..
2021.10.03 -
06. 의존관계 자동 주입
다양한 의존관계 주입 방법 생성자 주입 setter 주입 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존관계를 주입 받는 방법이다. 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { thi..
2021.09.27 -
05. 컴포넌트 스캔
지금까지 포스팅에서 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. 지금까지는 우리는 수동으로 AppConfig.java파일을 통해 수동으로 빈을 등록하였다. 자동으로 빈을 등록해주는새로운 AutoAppConfig.java를 구현해보자 AutoAppConfig.java @Configuration @ComponentScan public class AutoAppConfig { } 컴포넌트 스캔을 사용하기 위해 @ComponentScan 애노테이션을 붙여주면 된다. 기존의..
2021.09.27 -
04. Bean
Bean Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다. 우리가 new 연산자로 어떤 객체를 생성했을 때 그 객체는 빈이 아니다. ApplicationContext.getBean()으로 얻어질 수 있는 객체는 빈이다. 즉 Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다. 앞선 포스팅된 순수 자바 코드로 작성된 DI를 스프링에 적용해보자 AppConfig 스프링 기반으로 변경 @Configuration public class AppConfig { @Bean public Computer computer() { return new ComputerImpl(keyBo..
2021.09.26 -
03. 객체지향 3가지 원칙의 적용과 IOC
AppConfig의 등장으로 애플리케이션이 크게 사용 영역과 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다. 좋은 객체 지향 설계의 5가지 원칙의 적용 1. SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 클라이언트 객체는 실행하는 책임만 담당 구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당 2. DIP 의존관계 역전 원칙 추상화에 의존해야하며, 구체화에 의존하면 안된다. ComputerImpl는 인터페이스 KeyBoard에 의존한다. 새로운 keyBoard, AppleKeyBoard로 변경 시 단순히 AppConfig에서 의존관계를 주입하면된다. 3. OCP 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성 사용하고 클라이..
2021.09.26 -
02. 의존성 주입, DI(Dependency Injection
DI 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 다이나믹하게 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다. 말로해서는 이해가 잘 되지 않으므로 문제되는 코드를 제시하고 DI가 완료되도록 바꾸어보자 위 다이어그램을 객체지향원칙 중 1개인 OCP와 DIP에 맞추어 코드를 구현해보자 public class ComputerImpl implement Computer{ private final KeyBoard keyboard = new SamsungKeyboard(); } 역활과 구현을 충실하게 분리는 하였고, 다형성을 활용하고, 인터페이스와 구현 객체를 분리하였지만 OCP, DIP 같은 객체..
2021.09.26