2025.12.23

박민재 (Daype)·2025년 12월 23일

디자인 패턴 요약정리


싱글톤

  • 싱글톤패턴은 생성디자인패턴 중에 하나로 일반적으로 생성자와 소멸자를 접근제한 private에 구현하고 해당 클래스의 참조나 포인터를 반환하는 공개 클래스를 제공한다. 이는 static 함수를 제외하고는 해당 클래스의 인스턴스를 다루는 것을 미연에 방지하기 위함이다.
    프로그램 내에 하나의 객체만 존재해야하는 경우

static 키워드

  • static 키워드로 생성한 클래스 멤버 함수는 객체호출없이 접근이 가능하다.
  • static 함수 내에서 비정적 멤버에 접근하는것은 불가능하다.
  • static 키워드를 이용해 클래스 내부에서 멤버 변수 생성시 해당 변수는 해당 클래스의 모든 객체가 공유한다, 이때 중요한점은 해당 변수는 클래스 외부에서 초기화 해주어야하는데 그 이유는 static 멤버 변수는 하나만 존재해야하는데 여러번 초기화가 일어날 수 있기 때문이다. 그러므로 외부에서 명시적 초기화를 해주는 것이다.
  • static 키워드로 작성된 멤버 함수는 클래스 자체에 연관되어 있어 특정 객체의 상태나 데이터와 독립적이기 때문에 범위지정연산자를 사용하여 언제든지 호출이 가능하다.

스태틱 멤버 변수로 생성한 instance의 중복 초기화 방지를 위해 main 함수 위 클래스 외부에 초기화 해당 초기화는 static 멤버 특성상 한번만 호출됨 nullptr로 초기화를 한 이유는 프로그램 실행시 객체가 단 하나만 존재해야하기 때문에 getinstace 가 여러번 호출이되어도 nullptr 일 경우에만 새로 생성하게됨. 때문에 한번 이후 또 호출할경우 변수 이름이 다르더라도 동일한 객체를 가르키고 있다는 것을 알 수 있음.

Decorator 패턴

pizza 인터페이스를 상속받는 basicPizza클래스와 추상클래스가 존재 해당 추상클래스에서 파생되어 BasicPizza 클래스에 지속적으로 기능을 추가하고싶을때 추상클래스를 기능의 중심으로 추상클래스가 인터페이스에 기능을 전달하는 구조 추상클래스를 상속받는 기능클래스들을 만들면 기능클래스에서 서로다른 기능을 추가할시 basicPizza 클래스에 적용되는 구조이다.

장점:

  • 기존 코드를 수정하지 않고 새로운 기능을 추가할 수 있어, 시스템의 유연성을 증가시킵니다.
  • 다양한 조합의 기능을 쉽게 구성할 수 있습니다.
  • 단일 책임 원칙과 개방-폐쇄 원칙을 잘 지킬 수 있습니다. SRP OCP 원칙 지키기 가능

단점:

  • 데코레이터를 많이 사용하면 시스템이 복잡해질 수 있으며, 코드를 추적하기 어려워질 수 있습니다.
  • 구성 요소 간의 의존성이 증가하여 버그가 발생할 가능성이 높아질 수 있습니다.

옵저버 패턴

옵저버 패턴은 옵저버 인터페이스를 이용하여 상태변화를 전달받거나 전달하는 패턴이다.

관리를 할 어떤 문서가 있다고 생각해보자 해당 문서에는 값은같지만 형태가다른 기능이 담겨있다고 가정했을때 이를 옵저버 패턴을 이용하면 옵저버라는 인터페이스에 정보를 입력받고 전달하는 기능이 구현되어있다고 가정하자 문서에는 해당 정보들의 데이터들이 들어있다. 이때 인터페이스 옵저버는
정보 변화를 알려주는 장치가있고 이 옵저버를 상속받는 어떠한 기능이 구현된 클래스들이있다.
이때 해당 클래스들을 문서에 장착하여 문서에서 특정 값을입력할시 옵저버를 통해 모든 기능들이 작동하는 구조이다. ex) 엑셀차트에는 바를 출력해주는 바차트 선을출력해주는 라인차트 %를 달아주는 파이차트가 있다고 가정했을때 해당 기능을 가진 옵저버 인터페이스를 상속받는 클래스들을 각각 만들어 메인엑셀에 붙이고 메인엑셀에서 값을 출력시 옵저버를통해 모든 기능을 동일하게 작동시킬 수 있음

0개의 댓글