View가 포함된 DispatcherServlet 동작원리 //Controller @Controller public class HelloController { @GetMapping("/sample") public String sample() { return "/WEB-INF/sample.jsp"; } } 먼저 Localhost:8080/app/sample로 접속 HandlerMapping RequestMappingHandlerMapping BeanNameUrlHandlerMapping HandlerAdapter RequestMappingHandlerAdapter SimpleControllerHandlerAdapter ReturnValueHandlers ModelAndView가 Null일 경우(메소드에 @..
DispatcherServlet 초기화 HandlerMapping : 핸들러를 찾아주는 인터페이스 HandlerAdapter : 핸들러를 실행하는 인터페이스 ReturnValueHandlers : return 값을 http 본문에 넣어주는 핸들러 HandlerMapping url에 해당하는 handler를 찾는 인터페이스 찾는 핸들러 : RequestMappingHandlerMapping //DispatcherServlet.class @Nullable protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception { if (this.handlerMappings != null) { Iterator var2 = t..
DispatcherServlet 사용 @RestController public class HelloController { @Autowired HelloService helloService; @GetMapping("/hello") public String hello() { return "hello, " + helloService.getName(); } } DispatcherServlet은 언제 사용하나? Spring MVC로 웹 애플리케이션을 구동하고 싶다. @GetMapping과 @RestController 같은 어노테이션을 이해하고 있고, Controller에서 URL를 받을 수 있는 핸들러를 사용하고 싶다. return 값이 이름이 되는 ui 페이지 전환이 되고 싶다. return을 http 응답으로..
스프링의 핵심을 담당하는 건, 바로 빈 팩토리 또는 애플리케이션 컨텍스트라고 불리는 것이다. 이 두 가지는 우리가 만든 DaoFactory가 하는 일을 좀 더 일반화한 것이라고 생각하면 된다. 오브젝트 팩토리를 이용한 스프링 IoC 애플리케이션 컨텍스트와 설정정보 여기서는 우리가 만든 DaoFacotry를 스프링에서 사용 가능하도록 만들어 볼 것이다. 스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈이라고 부른다. 스프링 빈은 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주는 제어의 역전이 적용된 오브젝트를 가리키는 말이다. 스프링에서 빈의 생성과 관게설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리 혹은 애플리케이션 컨텍스트라고 부른다. 빈 팩토리와 애플리케이..
팩토리 팩토리 : 팩토리는 객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 일을 한다. 팩토리는 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는 쪽의 역할과 책임을 분리하려는 목적으로 사용하는 것이다. public class DaoFactory { public UserDao userDao() { //팩토리 메소드는 UserDao 타입의 오브젝트를 어떻게 만들고, 어떻게 준비시킬지를 결정한다. ConnectionMaker connectionMaker = new DConnectionMaker(); UserDao userDao = new UserDao(connectionMaker); return userDao; } } 기존 UserDaoTest의 main에서는 UserDao가 어떻게 만들어..
스프링에 들어가기 앞서, 스프링에 관련된 소스를 작성하여 스프링의 내부 구조를 살펴보자. 상속을 통한 확장 만약, 우리의 UserDao를 고객사에게 제공할 건데, UserDao의 클래스 파일만 제공하고 고객이 필요한 부분만(getConnection())을 수정해서 사용하게끔 할 수 있는가? Connection 부분을 추상메소드로 만들어 고객에게 직접 구현할 수 있게끔 한다. 즉, 상속을 통해 확장하는 것이다. 상속을 통한 확장에는 두 가지 패턴을 사용하게 된다. 템플릿 메소드 패턴 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법이다. 서브 클래스에서 필요에 맞게 추상 메소드를 구현해서 사용하는 방법을 디자인한 것이다. 팩토리 메소드 패턴 서브클래스에서 구체적인 오브젝트 생성 방법을..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bMVkMC/btqCvxtuOyD/QrTHHDDelAhAxJkuqNUEXK/img.jpg)
객체 지도 길을 찾을 때 지도를 참고하는 것이 아닌 사람에게 길을 묻고 찾을 경우, 현재의 요구만을 만족시킬 수 있다. 하지만 지도를 참고하여 길을 찾을 때는 현재의 목적 뿐만 아니라 다양한 목적을 위해 재사용될 수 있다. 객체적인 관점에서 살펴볼 때 사람에게 묻고 길을 찾는 경우는 기능 에 관련된 부분이고, 지도를 참고하여 길을 찾는 경우는 구조에 관련된 부분이다. 지도 은유의 핵심은 기능이 아니라 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적이라는 것이다. 객체지향 개발 방법은 안정적인 구조(지도)에서 변경이 빈번하게 발생하는 기능(사람이 원하는 위치)을 종속시키는 지도의 방법과 유사하다. 일반적으로 사람은 지도를 보고 자신이 가고 싶어하는 위치를 찾되, 가고 ..
책임과 메시지 그리고 캡슐화 객체지향 세계는 명확하게 정의된 역할과 책임을 지닌 객체들이 상호 협력하는 세계이다. 역할과 책임이 흐릿할수록 객체를 도와줄 어떤 협력자도 찾지 못할 것이다. Ex. 많은 사람들에게 질문을 던졌을 때는 답변이 없는 경우가 많다. 하지만 한 사람을 콕 집어서 질문을 던졌을 때는 오답이든 정답이든 답변은 하게 되어있다. 즉, 여러 사람에게 질문 했을 때는 그 사람들의 역할과 책임이 분산되어 협력하고자 하는 사람을 못찾게 되지만 한 사람을 선택하게 되면 역할과 책임이 명확해져 협력자를 쉽게 찾을 수 있는 것이다. 자율적인 책임 적절한 책임을 적절한 객체(자율적인 객체)에게 할당한다. 자율적인 객체는 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체를 의미한다. 즉, 적절..
- Total
- Today
- Yesterday
- Spring
- 팩토리 메소드 패턴
- 빈 순환 참조
- 스프링부트
- 점층적 생성 패턴
- package-private
- Effective Java
- java8
- springboot
- 김영한
- mustache
- 생성자
- try with resources
- 복사 팩토리
- junit
- 자바8
- 인프런
- 이펙티브자바
- effectivejava
- 연관관계
- ifPresent
- java
- jdk버전
- 빌더 패턴
- try catch finally
- @Lazy
- JPA
- 이펙티브 자바
- 정적팩터리메서드
- flatMap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |