Skip to content

haileyKimDev/designpattern

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

designpattern

어댑터 패턴

  • 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴
  • 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴
  • 장점 :
    • 기존코드를 변경하지 않고 인터페이스 구현체를 만들어 재사용할 수 있다.
    • 기존코드가 하던일과 특정 인터페이스 구현체로 변환하는 작업을 각기 다른 클래스로 분리하여 관리할 수 있다.
  • 단점 : 새 클래스가 생겨 복잡도가 증가할 수있다. 경우에 따라서는 기존코드가 해당 인터페이스를 구현하도록 수정하는 것이 좋은 선택이될수도있다.
  • Target은 오리에 해당하며, Adapter는 칠면조 예시
  • 사용
    • java.util.Arrays#asList
    • java.util.Collections#list
    • java.io.InputStreamReader(InputStream)
    • java.io.OutStreamWriter(OutputStream)
    • 스프링 : HandlerAdapter : 우리가 작성한 다양한 형태의 핸들러 코드를 스프링 MVC가 실행할 수 있는 형태로 변환해주는 어댑터용 인터페이스

프록시 패턴

  • 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴
  • 초기화 지연, 접근제어, 로깅, 캐싱(리턴타입) 등 클라이언트가 프록시를 거쳐서 디폴트서비스를 이용하게할 수 있다.
  • 장점
    • 기존코드를 변경하지 않고 새로운 기능을 추가할 수있다(프록시만 추가) - 개방폐쇄원칙
    • 기존코드가 해야하는 일만 유지할 수있다.
    • 기능 추가 및초기화 지연등으로 다양하게 활용가능
  • 단점
    • 코드의 복잡도 증가
  • 자바 : 다이나믹 프록시(런타임에 동적변경), java.lang.reflect.Proxy
  • 스프링 : AOP 여러코드에 흩어질 코드를 한곳에모아서 코딩할 수 있다.

데코레이터 패턴

  • 기존코드를 변경하지 않고 부가 기능을 추가하는 패턴, 런타임에 기존 코드를 확장한다.
  • 한 객체를 그 객체와 같은 베이스 클래스로부터 파생된 , 원래 객체와 같은 메서드를 제공하는 다른 객체로 감싸서 객체의 행동을 바꿔는 패턴이다. 래퍼 패턴이라고도 한다
  • 장점 :
    • 새로운 클래스를 만들지 않고 기존 기능을 조합할 수있다. (단일 책임 원칙)
    • 컴파일타임이 아닌 런타임에 동적으로 기능을 변경할 수 있다.
  • 단점 :
    • 데코레이터를 조합하는 코드가 복잡할 수 있다.

팩토리 메소드 패턴

  • 객체를 생성할 떄 필요한 인터페이스를 만든다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정한다. 팩토리 메소드 패턴을 사용하면 클래스 인스턴스 만드는 일을 서브 클래스에게 맡긴다.
  • 제품을 생산하는 부분과 사용하는 부분을 분리한다. 다른 제품을 추가하거나 제품 구성을 변경할때 creator 클래스가 concreteProduct와 느슨하게 결합되어서 creator는 건드릴 필요가 없다.
  • 장점 :
    • 객체 생성 코드를 전부 한 객체 또는 메소드에 넣으면 코드에서 중복되는 내용을 제거할 수 있다. 나중에 관리할때도 한군데에만 신경을 쓰면 된다.
    • 객체 인스턴스를 만들때 인터페이스만 있으면 된다. 유연성과 확장성이 뛰어난 코드를 만들 수 있다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages