분류 전체보기
Abstract Factory Pattern
추상 팩토리 패턴 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이들 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴 간단하게 생각하면 팩토리를 추상화 해서 교체하기 쉽게 만드는 패턴이라고 보면된다. 1. Shape 인터페이스 public interface Shape { void draw(); } 2. Shape를 상속받은 모형 구현 public class Rectangle implements Shape { @Override public void draw() { System.out.println("직사각형을 그렸습니다."); } } public class Square implements Shape { @Override public void draw() { ..
Factory Pattern
팩토리 메소드 패턴 : 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를만들지는 서브클래스에서 결정하게 만든다. 즉 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것. 이점 클래스의 변경사항이 생겼을 때 얼마나 다른 클래스에게도 영향을 줄 것인가가 결합도이다. 팩토리 메소드 패턴은 직접 사용하는 객체를 생성하지 않고 팩토리 메소드 클래스를 통해 객체를 대신 생성하고 그 객체를 반환 받아 사용하기 때문에 효율적인 코드 제어를 할 수 있을 뿐더러 결합도를 낮춰 유지보수가 용이하다. 위 설계를 보면 1. Shape라는 인터페이스 public interface Shape { void draw(); } 2. 인터페이스를 상속받은 원, 정사각형, 직사각형 ..
Design Pattern
객체지향 설계는 다음 5가지 원칙을 지키면서 개발해야한다. S: Single responsibility principle(SRP) 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다 O: Open/closed principle(OCP) 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. L: Liskov substitution principle(LSP) 리스코프 치환 원칙 프로그램의 객체는 프로그램의 정확성은 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. I: Interface segregation principle(ISP) 인터페이스 분리 원칙 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나 보다 낫다 D: Dependency in..
Spring Filter
HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이며, 서블릿 2.3 규약에 새롭게 추가되었다. 필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청(request)과 최종자원(서블릿/JSP/기타 문서) 사이에 위치하며 클라이언트의 요청 정보를 알맞게 변경할 수 있으며, 또한 필터는 최종 자원과 클라이언트로 가는 응답(response) 사이에 위치하여 최종 자원의 요청 결과를 알맞게 변경할 수 있다. 이러한 필터는 인코딩, CORS, XSS, LOG, 인증, 권한 등 을 구현하는데 사용합니다. 스프링 시큐리티, 네이버의 lucy-xss-servelt-fiter 등이 대표적이 예입니다. 필터는 여러개 를 등록하고 요청이 해당 필터를 순서대로 통과하도록 할수 있습니다. 이런 필터들을 필터 체인이..
Spring AOP
AOP란? Aspect-Oriented Programming의 약자이다. 흩어진 Aspect들을 모아서 모듈화 하는 기법이다. 서로 다른 클래스라고 하더라도 비슷한 기능을 하는 부분이 있다. DB를 연결하거나 끊거나 하는 작업이 대표적인 예시이다. 이로한 부분을 횡단 관심사라고 불린다. 이런 횡단 관심사와 비즈니스 로직을 분리하고 해당 관심사가 필요한 경우 aspect를 통해서 설정한 부분에서 실행되게 한다. AOP 주요 개념 Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함. Target : Aspect를 적용하는 곳 (클래스, 메서드 .. ) Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JointPoint : Adv..
Spring Filter, Interceptor, AOP 비교
이글에서는 3개를 간단하게 비교하고 다른 포스팅에서 각각을 자세히 설명하고 코드로 실습해보겠습니다. 이글에서는 가볍게 봐주세요. 순서는 Filter -> Interceptor -> AOP -> Interceptor -> Filter 순으로 이루어진다. Filter와 Interceptor은 Servlet 단위에서 이루어진다. Spring Filter Dispatcher Servlet 영역에 들어가기 전 Front Controller 앞 범위에서 수행된다. 또한, Controller 이후 자원 처리가 끝난 후 응답 처리에 대해서도 변경, 조작을 수행할 수 있다. 일반적으로 인코딩 변환 처리, XSS 방어를 개발할 때 사용한다. Filter 실행메소드 init() - 필터 인스턴스 초기화 doFilter() ..
Spring 요청의 흐름(Spring MVC 패턴)
스프링 MVC에 요청이 들어오면 어떤 순서를 통해서 응답이 이루어지는지에 대한 포스팅입니다. - implemented by developers : 개발자가 구현 - provided by SpringSource : Spring Framework 제공 - provided by SpringSource sometimes implemented by developers : Spring Framwork 제공 또는 개발자가 구현 1. DispatcherServlet은 web.xml에 정의된 URL 패턴에 맞는 요청을 받고 URL 컨트롤러의 맵핑 작업을 HandlerMapping에 요청 2. HandlerMapping은 URL을 기준으로 어떤 컨트롤러를 사용할지 결정, 결과는 HandlerExecution Chain객체..
4.[Clean Code] 주석
저는 학생연구원으로 일을 할때 레거시 프로젝트 기능 추가를 한적이 있는데 그때 레거시 코드에 잘못된 주석이 많아서 고생한적이 있었습니다. 그런데 프로젝트가 크고 잘못된 주석이 많다보니까 다 고칠 용기가 안나서 제가 추가해야하는 기능에 관련된 부분들의 주석만 고치고 기능을 추가하고 끝냈던 적이 있네요. ㅠㅠ 이책의 저자는 코드만이 정확한 정보를 주며 주석은 때때로 거짓말을 해서 최소화 하는게 좋다고 표현합니다. 또한 주석은 나쁜 코드를 보완하지 못하니 나쁜 코드를 수정하라고 하죠. // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if((employee.flags & HOURLY_FLAG) && (employee.age >65)) if(employee.isEligibleForFullBenefits(..