Goal 간단한 팩토리에 대해 알아본다 샘플 코드를 통한 객체의 캡슐화를 간단한 팩토리로 변경해본다 다양한 팩토리 만들어보기 new 연산자에 대한 고찰 간단한 팩토리 (Simple Factory) 디자인 패턴이라기 보다는 프로그래밍에서 자주쓰이는 관용구에 가깝다. 왜 or 언제 간단한 팩토리 사용하는가? 객체 생성을 처리하는 부분을 Factory라고 부르며, 해당 부분을 캡슐화하여 분리할 수 있기 때문에 코드 가독성이나 관리 측면에서 용이하다 다이어그램 최첨단 피자 코드 만들기 as - is 피자 주문 코드 public Pizza orderPizza(String type) { Pizza pizza = new Pizza(); // 바뀌는 코드 if(type.equals("cheese")){ pizza = ..
스프링
Goal Singleton이 무엇인지 이해한다 Singleton을 생성하는 방법에 대해 알아보고 이해한다 Singleton Pattern 싱글턴 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴이다. 프로그램 시작부터 종료 시까지 어떤 클래스의 인스턴스가 메모리 상에 단 하나만 존재할 수 있게 하고 이 인스턴스에 대해 어디에서나 접근할 수 있도록 하는 패턴이다. 왜 싱글턴 패턴을 사용할까? 예로, 로깅을 찍는 객체, 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 인스턴스를 여러개 만들게 되면 불필요한 자원을 사용하게 되며 또 프로그램이 예상치 못한 결과를 낳을 수 있다. 결과에 일관성이 없어질 가능성이 있다 한정된 리소스에서 메모리를 사용할 때 사용한다 => 메모리를 많이 사용하면 안될 때 ..
abstract 키워드 - 추상 메서드와 추상 클래스 추상 메서드란 선언부는 있지만 구현부가 없는 메서드를 말한다. 추상 메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스여야 한다. public class Driver2 { public static void main(String[] args){ Animal[] animals = new Animal[5]; animals[0] = new Dog(); animals[1] = new Cat(); animals[2] = new Cow(); animals[3] = new Bird(); animals[4] = new Dolphin(); for(int i=0; i new 사용 불가 추상 클래스는 하위 클래스에게 메서드의 구현을 강제한다. 오버라이딩 강제 추상 메..
객체지향의 4대 특성 - 캡!상추다 캡슐화 (Encapsultation): 정보 은닉(information hiding) 상속 (Inheriance) 재사용 추상화 (Abstaction) : 모델링 다형성 (Polymorphism) : 사용 편의 클래스 vs. 객체 = 붕어빵틀 vs.붕어빵? 금형기계 붕어빵틀 = new 금형기계(); 붕어빵틀은 붕어빵을 만드는 팩터리 클래스와 객체를 구분하는 간단한 방법 - 나이 물어보기 사람의 나이는 몇살인가 -> 클래스 김연아의 나이는 몇살인가 -> 객체 뽀로로의 나이는 몇살인가 -> 객체 펭귄의 나이는 몇살인가 -> 클래스 클래스는 분류에 대한 개념이지 실체가 아니다! 클래스 : 객체 = 펭귄 : 뽀로로 = 사람: 김연아 추상화 : 모델링 여러가지 사물이나 개념에서..
스프링을 이해하기 위한 이전의 기술 SOA (Service Oriented Architecture) - 서비스 지향구조 CBD (Component Based Development) - 컴포넌트 기반 개발 OOP (Object Oriented Programming) 절자적 / 구조적 프로그래밍 기계어 / 어셈블리어 기계어 -> 객체지향 프로그래밍 언어로 0과 1의 행진 (에드삭, 유니박) 애드삭 전욕, 유니박 전용 기계어가 필요하며 호환이 불가능 어셈블리어 인간지향적 니모닉 (add, plus)과 기계어의 일대일 코드 매칭표 cpu별 어셈블리어 필요 C언어 - 강력한 이식성 one source multi object use anywhere 컴파일러로 cpu별 소스 번역 그러나 컴파일전 기종에 맞게 소스 변..
Goal : 뷰 리졸버가 어떻게 사용되는지 알아본다. OldController hello/servlet/web/springmvc/old/OldController.java @Component("/springmvc/old-controller") public class OldController implements Controller { // @Component("/springmvc/old-controller")를 해주면 스프링빈의 이름이 /springmvc/old-controller가 된다 @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { Sys..
Goal : 핸들러 매핑과 핸들러 어댑터가 어떻게 사용되는지 알아본다. 핸들러 매핑과 핸들러 어댑터 OldController hello/servlet/web/springmvc/old/OldController.java @Component("/springmvc/old-controller") public class OldController implements Controller { // @Component("/springmvc/old-controller")를 해주면 스프링빈의 이름이 /springmvc/old-controller가 된다 @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse respon..
스프링 MVC 전체 구조 직접 만든 프레임워크 아키텍처 스프링 MVC 아키텍처 직접 만든 프레임워크와 스프링 MVC 비교 직접 만든 프레임워크 스프링 MVC FrontController DispatcherServlet handlerMappingMap HandlerMapping MyHandlerAdapter HandlerAdapter ModelView ModelAndView viewResolver ViewResolver MyView View DispatcherServlet 구조 살펴보기 org.springframework.web.servlet; 클래스 검색 : command+o 스프링 mvc도 프론트 컨트롤러 패턴으로 구현되어 있다. 스프링 mvc의 프론트 컨트롤러가 바로 디스패처 서블릿 Dispatche..
Goal : 지금까지 v1~v5로 점진적으로 발전시킨 프레임워크를 정리해보자 ** 정리 v1 : 프론트 컨트롤러 도입 기존 구조를 최대한 유지하면서 프론트 컨트롤러를 도입 v2 : view 분류 단순 반복 되는 뷰 로직 분리 v3 : Model 추가 서블릿 종속성 제거 뷰 이름 중복 제거 v4 : 단순하고 실용적인 컨트롤러 v3와 거의 비슷 구현 입장에서 ModelView를 직접 생성해서 반환하지 않도록 편리한 인터페이스 제공 v5 : 유연한 컨트롤러 어댑터 도입 어댑터를 추가해서 프레임워크를 유연하고 확장성 있게 설계 스프링MVC 지금까지 작성한 코드는 스프링MVC 프레임워크의 핵심 코드의 축약 버전이며 구조도 거의 같다. @RequestMapping("/hello") RequestMappingHand..
Goal : 어댑터 패턴을 사용해서 프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할 수 있도록 변경해본다. 유연한 컨트롤러 2 FrontControllerServletV5 hello/servlet/web/frontcontroller/v5/frontControllerServletV5.java package hello.servlet.web.frontcontroller.v5; @WebServlet(name="frontControllerServletV5", urlPatterns = "/front-controller/v5/*") public class FrontControllerServletV5 extends HttpServlet { private void initHandlerMappingMap() { hand..