강께르의 개발일지

[디자인 패턴] 싱글톤, 상태, 이벤트 버스, 커맨드, 오브젝트 풀 짧은 정리 본문

프로그래밍/디자인 패턴

[디자인 패턴] 싱글톤, 상태, 이벤트 버스, 커맨드, 오브젝트 풀 짧은 정리

강께르 2021. 11. 23. 14:37

싱글톤 패턴

 

전역의 장점을 이용하지만 전역 변수를 사용하지 않고 클래스의 인스턴스를 딱 하나만 생성하여, 그 인스턴스를 어디에서든지 참조할 수 있도록 하는 패턴

 

특징

최초 단 한 번의 생성을 통해 고정된 메모리 영역만 사용하고 그 이후 인스턴스에 대한 요청은 생성한 인스턴스를 돌려주는 방식으로 동작하기에 메모리 낭비를 방지할 수 있다.

 

전역처럼 어디에서든지 참조할수 있다는 점에서 데이터 공유가 쉽다는 장점이 있다. 다만 여러 클래스의 인스턴스가 싱글톤 인스턴스를 동시에 접근한다면 문제가 있기에 설계 시 유의.

 

너무 많은 일이 주어지거나 공유하게 되면 높은 결합도를 갖게 돼서 좋지 못한 구조를 지니게 된다.

 

사용하는 방법

클래스의 생성자는 private으로 막아둘 것.

인스턴스가 수정되는 것을 막아둘 것. => 수정이 가능하다면 null로 초기화할 수 있기 때문.

 

 

상태 패턴

인스턴스가 특정 상태에 따라 행위를 달리하는 상황에서

인스턴스가 직접 상태를 체크해서 그에 따른 행위를 하는 게 아니라,

상태를 인스턴스화해서 그에 따른 행동을 할 수 있도록 만드는 패턴이다.

 

상태 부모 클래스를 추상화 혹은 인터페이스화하고

이를 상속받는 클래스는 특정 행동을 할 수 있게 한다.

 

구현하는 사람들마다 공통된 메소드는 다르겠지만,

초기화 메소드, 프레임마다 동작할 메소드, 상태 전환 시 메소드

가 있으면 좋을 것 같고,

 

상태들을 컨트롤할 클래스인 Context도 구현해주면 좋을 것 같다.

 

이벤트 버스 패턴

프로그램 진행 중에 있는 사건을 이벤트화하여 그 이벤트와 관련하여 각 인스턴스마다 필요한 메소드를 호출하게 하는 패턴.

이벤트를 관리하는 이벤트 버스 클래스가 있고 그 이벤트 버스 클래스 인스턴스에 이벤트가 전달되면 그 이벤트에 따라 동작하게될, 등록된 메소드들이 일괄적으로 호출된다.

그렇기에 따로 서브 시스템을 들고 있지 않아도 되고, 메소드가 등록되지 않아도 다른 메소드에 영향을 주지 않기 때문에 결합도가 낮아서 좋다.

 

커맨드 패턴

실행시킬 기능을 하나의 인스턴스화를 하여 인스턴스 단위로 관리할 수 있게 하는 패턴

주로 구현할 수 있는 기능 Undo, Redo, Replay가 있어서 프로그램 중 실행했던 기능이 하나의 인스턴스이기에 가능한 일이다.

 

커맨드를 동작하게할 Invoker 클래스가 따로 있고, 그 클래스에 Command 클래스를 상속받은 클래스의 인스턴스를 넘겨줘서 동작하게 하는 방식

 

오브젝트 풀 패턴

메모리에 부하를 줄이고 객체의 양을 관리할수 있다.

만약 필요한 것만큼 객체를 생성하는 것 그 이상을 미리 만들어놓는다고 할 시, 메모리를 그만큼 차지하고 있어야 한다.

오브젝트 풀링은 유니티의 ObjectPool<>2021버전 이후로 제공하기 때문에 그것을 써보는 것도 추천

'프로그래밍 > 디자인 패턴' 카테고리의 다른 글

[디자인 패턴] 옵저버 패턴  (0) 2021.11.25
[디자인 패턴] Singleton Pattern  (0) 2021.06.27