본문 바로가기
필수 개발지식/디자인패턴

[디자인패턴] 개발자 취업준비생이라면 꼭 알아야할 디자인패턴

by 코딩하는짱구 2023. 8. 6.
반응형

디자인 패턴은 소프트웨어 개발에서 반복적으로 발생하는 문제에 대해 일반적이고 재사용 가능한 해결책을 제공하는 설계 원칙들의 모음입니다. 이 디자인 패턴은 보다 구조적이고 유지보수 가능한 코드를 작성하는 데 도움이 됩니다. 디자인 패턴은 크게 생성(Creational), 구조(Structural), 행위(Behavioral) 패턴으로 분류됩니다.

 

👉생성, 구조, 행위 디자인패턴 예시로 이해하기

 

0. 디자인패턴의 종류

생성패턴(Creational Patterns), 구조패턴(Structural Patterns), 행위패턴(Behavioral Patterns) 

  • 생성패턴 - 팩토리 메서드 패턴, 추상 팩토리 패턴, 빌더 패턴, 싱글톤 패턴, 프로토타입 패턴
  • 구조 패턴 - 어댑터 패턴, 데코레이터 패턴, 컴퍼지트 패턴, 퍼사드 패턴, 프록시 패턴, 브리지 패턴, 플라이웨이트 패턴
  • 행위 패턴 - 옵저버 패턴, 전략 패턴, 템플릿 메서드 패턴, 인터프리터 패턴, 커맨드 패턴, 스테이트 패턴, 체인오브리스폰서 패턴, 미디에이터 패턴, 메멘토 패턴, 비지터 패턴

 

1.  디자인패턴 - 생성

생성 패턴 (Creational Patterns): 생성 패턴은 객체의 인스턴스화를 다루는 패턴으로, 객체의 생성 방식과 관련된 문제를 해결하는 데 사용됩니다. 대표적인 생성 패턴은 '싱글톤 패턴'입니다.

  • 싱글톤패턴 (Singleton Pattern) : 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴입니다.
  • 실제 적용 예시 : 데이터베이스 연결, 애플리케이션 상태관리(환경설정)
  • 장, 단점 : 전역공유해야하는 서비스에 유용하지만 객체의 의존성에 영향을 줍니다.
class Singleton {
  constructor() {
    if (Singleton.instance) {
      return console.warn('Warning: Singleton class already instantiated');
    }
    Singleton.instance = this;
    this.version = Date.now();
    this.config = 'test';
  }
  static getInstance() {
    if (!this.instance) {
      this.instance = new Singleton();
    }
    return this.instance;
  }
}

// const a = new Singleton();
// console.log(a);
// const b = new Singleton();
// console.log(b);

// console.log(a === b); // true
// console.log(a, b);

const a1 = Singleton.getInstance();
const b1 = Singleton.getInstance();
console.log(a1, b1);
console.log(a1 === b1);

 

 

2.  디자인패턴 - 구조

구조 패턴(Structural Patterns)은 클래스와 객체들을 조합하여 더 큰 구조를 형성하는 문제를 해결하기 위해 사용됩니다. 대표적인 구조 패턴은 '퍼사드 패턴' 입니다.

  • 퍼사드 패턴(Facade Pattern) : 복잡한 서브시스템을 단순한 인터페이스로 감싸서 사용하기 쉽도록 만드는 패턴입니다.
  • 실제 적용 예시 : 복잡한 시스템의 인터페이스 간소화
  • 장, 단점 : 단순한 인터페이스를 제공할 수 있으나 추가비용이 발생하고 복잡성이 증가할 수 있다.

 

이해하기 쉽게 파일을 파일을 가공하는 과정을 퍼사드로 만들어본다면 아래와 같다.

클라이언트가 단순히 파일을 다운로드 받고싶은 상황이라고 가정할때, 우리는 파일을 가공하는 과정인 다운로드, 파일 처리 2가지의 서브시스템을 하나의 퍼사드 operation으로 만들어 줄 수 있다.

// 서브시스템
function FileDownloader() {
  this.downloadFile = function (url) {
    console.log('Downloading file from:', url);
    // 파일 다운로드 로직
  };
}

function FileProcessor() {
  this.processFile = function (file) {
    console.log('Processing file:', file);
    // 파일 처리 로직
  };
}

// 퍼사드
function FileDownloaderFacade() {
  this.downloader = new FileDownloader();
  this.processor = new FileProcessor();

  this.downloadAndProcessFile = function (url) {
    this.downloader.downloadFile(url);
    this.processor.processFile(url);
  };
}

// 클라이언트
var fileDownloaderFacade = new FileDownloaderFacade();
fileDownloaderFacade.downloadAndProcessFile('https://example.com/file.txt');

//Downloading file from: https://example.com/file.txt
//Processing file: https://example.com/file.txt

 

 

3.  디자인패턴 - 행위

행위 패턴 (Behavioral Patterns): 행위 패턴은 객체 간의 책임 분배와 알고리즘의 분리에 관련된 패턴으로, 객체들 간의 상호작용을 정의하는 데 사용됩니다. 대표적인 행위 패턴은 '옵저버 패턴'입니다.

  • 옵저버 패턴 (Observer Pattern): 주체가 어떤 객체의 상태변화를 관찰하다가 상태 변화가 있을때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 패턴
  • 실제 적용 예시 : 트위터
  • 장, 단점 : 단순한 인터페이스를 제공할 수 있으나 추가비용이 발생하고 복잡성이 증가할 수 있다.

 

 

4. 기술면접대비

Q: 디자인 패턴이란 무엇이며 몇가지 예시를 들어줄 수 있나요?

A: 디자인 패턴이란 어떤 문제에 대한 해결 방법을 탬플릿으로 만들어 놓은것을 의미합니다. 디자인 패턴은 생성, 구조, 동작 패턴으로 분류됩니다. 대표적인 디자인 패턴에는 싱글톤, 전략, 옵저버 패턴 등이 있습니다.

-> 싱글톤 패턴이란 오직 하나의 인스턴스만을 생성하여 그 인스턴스에 대한 전역적인 접근을 제공하는 디자인 패턴 입니다. 전략 패턴이란 런타임에 알고리즘을 선택할 수 있도록 도와주는 패턴입니다. 마지막으로 옵저버 패턴은 한 객체의 상태변화가 다른 객체에게 통보되도록 종속성을 정의하는 패턴 입니다. 한 주체의 상태가 변경되면 그 객체에 의존하는 다른 객체들에게 자동으로 알림을 보내는 메커니즘을 제공합니다. 

이와 같이 디자인 패턴은 소프트웨어 설계에서 자주 사용되며, 각각의 경우에 따라 적합한 패턴을 선택하여 보다 효율적이고 유지보수 가능한 코드를 구현할 수 있습니다.

 

추천글

2023.05.10 - [필수 개발지식/디자인패턴] - [Design Pattern] 빌더패턴 (Builder)

 

[Design Pattern] 빌더패턴 (Builder)

✅디자인패턴이 뭘까? " 디자인 패턴(Design Pattern)은 소프트웨어 디자인에서 주어진 컨텍스트 내에서 일반적으로 발생하는 문제에 대한 재사용 가능한 일반적인 솔루션" 디자인패턴은 왜 쓰이나

veritas-crystal.tistory.com

 

2023.05.23 - [필수 개발지식/디자인패턴] - [Design Pattern] 전략 패턴 (Strategy)

 

[Design Pattern] 전략 패턴 (Strategy)

✅행동패턴의 전략 패턴(Strategy Pattern)이란? 전략 패턴은 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴 이다. 즉, 어떤 일을

veritas-crystal.tistory.com

 

반응형