[Design Pattern] 디자인 패턴이란? 생성 패턴

rara_kim·2022년 8월 31일
0

Java

목록 보기
24/39

디자인 패턴이란?

특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다.
소스나 기계코드로 바로 전활될 수 있는 완성된 디자인은 아니며, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 서술이나 템플릿이다.
디자인 패턴은 프로그래머가 어플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 관행이다.

디자인 패턴의 종류

생성(Creational) 패턴

객체 생성 혹은 조합에 관한 패턴.

  • 싱글톤 (Singleton)
  • 빌더 (Builder)
  • 팩토리 메서드 (Factory Method)
  • 추상 팩토리 (Abstract Factory)
  • 프로토타입 (Prototype)

구조(Structural) 패턴

객체를 조합해 더 큰 구조를 만드는 패턴.

  • 어댑터 (Adaptor)
  • 브릿지 (Bridge)
  • 컴포지트 (Composit)
  • 데코레이터 (Decorator)
  • 퍼사드 (Facade)
  • 플라이웨이트 (Flyweight)
  • 프록시 (Proxy)

행동(Behavioral) 패턴

객체 사이의 책임분배(결합도⬇️)나 커뮤니케이션에 관한 패턴

  • 책임 연쇄 (Chain of Responsibility)
  • 커맨드 (Command)
  • 인터프리터 (Interpreter)
  • 이터레이터 (Iterator)
  • 미디에이터 (Mediator)
  • 메멘토 (Memeento)
  • 옵저버 (Observer)
  • 스테이트 (State)
  • 전략 (Strategy)
  • 템플릿 메서드 (Template Method)
  • 비지터 (Visitor)

생성 패턴 - 싱글톤(Sigleton)

  • 클래스의 인스턴스가 단 1개임을 보장해야한다.
  • 인스턴스 생성을 제어할 수 있어야한다.
  • 1개 뿐인 인스턴스에 쉽게 접근할 수 있어야 한다.
  • 클래스 다이어그램을 살펴보면, private 변수 + private 생성자 + public 메소드를 가지는 것을 알 수 있다.
public class Singleton {
    private Singleton() {}            //기본 생성자를 외부에서 접근할 수 없게 한다.
    
    private static class SingletonHolder {
    	private static final Singleton instance = new Singleton();
    }
    
    public static Singleton getInstance() {     //전역에서 접근가능하도록 static키워드 사용
    	return SingletonHolder.instance;
    }
}


public class Main{
	public static void main(String[] args) {
    	Singleton singleton = Singleton.getInstance();    //싱클톤 객체 가져오기
    }
}
  • SingletonHolder를 사용하면 Thread safe/ synchronized 등의 고려를 할 필요가 없다.

생성 패턴 - 빌더 (Builder)

  • 보통 직접 구현하기 보다 Lombok을 사용된다.
  • 복잡한 객체의 생성방법과 표현방법을 분리하기 위해 사용한다.
  • 생성방법과 구성방법 모두 캡슐화 할때 사용한다.
  • 객체생성에 필요한 파라미터가 너무 많아, 생성자 오버로딩이 과할때 사용되기도 한다.

GitHub: 빌더패턴 구현 코드

생성 패턴 - 팩토리(Factory Method)

  • 복잡한 객체 생성을 캡슐화 하기 위해 사용한다.
  • 생성은 다른 클래스(Factory)에게 위임한다.
  • 어떤 인스턴스를 만들어야 할지 알 수 없을 때 사용한다.

GitHub: 팩토리패턴 구현 코드


📚 참고
위키백과: 소프트웨어 디자인 패턴

profile
느리더라도 꾸준하게

0개의 댓글