개발자 능력치 물약/C++

디자인패턴: 싱글톤, 팩토리, 전략패턴

하시무 2025. 3. 27. 01:22

Gof 디자인 패턴

프로그래머 선배님들의 노하우가 깃든 방식이다.

객체지향 개념에 따른 설계중에서 재사용할 경우에 유용한 것을 디자인 패턴으로 정립한 것이다. solid원칙과 공통되는 점들이 많다.

 

싱글톤

 시스템에서 어떤 자원이 공유될때 사용한다. 

예를 들어 게임의 키입력부분, 핸드폰의 카메라는 여러 클래스에서 공유한다.

단 하나의 클래스로 관리를 하게 만드는 것이 싱글톤이다.

 

한 클래스에서 오직 하나의 객체만을 생성한다. 생성자가 private으로 선언되어있음.

생성자 호출로 객체를 생성할 수 없고 public 메소드인 getInstance()로 객체를 반환해서 사용한다.

관리가 편하다.

팩토리 메소드

추상클래스에서 인터페이스를 제공하고 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 한다.

즉 객체생성을 캡슐화 하여 특정 객체를 생성하는 일을 팩토리 클래스에게 맡긴다.

new 키워드 대신 팩토리 클래스의 메소드를 사용한다.

 

인스턴트 식품을 생산하는 회사 ' 농심 ' 을 생각해보면

라면을 만드는 공장, 음료수를 만드는 공장, 과자를 만드는 공장처럼 다양한 공장에서 식품을 생산한다. 

농심이라는 클래스는 추상클래스로 인스턴트 식품을 생산한다는 정보만 갖고

자식클래스에서 서로 다른 식품을 생산하면 관리하기 수월할 것이다.

 

확장성이 좋고 관리하기 편하다.

자식클래스가 늘어날수록 소멸시 복잡해지므로 관리가 용이한 스마트 포인터를 사용하자.

전략 패턴

클래스 설계를 할때 메서드가 계속 바뀌어 나가는 구조를 갖는다면 전략 패턴을 생각해봐야한다. 

 

객체는 속성과 행위가 있다.

행위 패턴은 반복적으로 사용되는 객체의 상호작용을 패턴화한것으로 클래스나 객체가 상호작용하는 방법과 책임을 분산하는 방법을 정의한 것이다.

행위 패턴의 한 종류로 전략패턴이 있다.

 

자주 바뀌는 것이 기능이라면 그 기능(메소드) 를 클래스로 바꾸고 인터페이스 타입의 상속 구조를 만들어라 

포켓몬을 예로 들면 포켓몬에는 파이리, 꼬부기, 피카츄가 있다. 

이름, 공격, 패시브스킬등의 공통된 부분을 포켓몬 클래스에서 인터페이스로 만들어 자식 클래스에서 구현할 것이다.

하지만 포켓몬의 공격스킬, 패시브스킬은 자주 바뀔 수가 있다.

그래서 전략 패턴에서는 공격, 패시브 스킬을 전략으로 보고 각각의 클래스를 만들어 추가 및 삭제할수 있는 상속 구조로 설계한다. 이렇게 설계하면 포켓몬 클래스에는 영향을 미치지 않고 얼마든지 패시브나 공격을 추가및 삭제 할 수있다.

즉 OCP원칙에 위배되지 않는 설계를 한다. 

 

(자주 바뀌는 것이 상태라면 상태를 클래스로 바꾸는 상태 패턴을 구현하면 된다.)