20240215_디자인 패턴

2024. 2. 15. 23:22IT/TIL

오늘의 TIL은 기술 면접 질문에 대하여 공부하면서 배웠던 디자인 패턴에 대한 내용이다.

 

디자인 패턴

디자인 패턴이란 프로그래밍을 하면서 자주 나타나는 과제를 해결하기 위한 방법 중 하나이다.


과거의 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 

 

이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.

따라서 디자인 패턴을 사용하면 이전에 많이 겪었던 과제들을 겪지 않고 해결할 수 있기 때문에 보다 빠르게 개발 작업을 진행할 수 있다.

 

또, 잘 알려진 패턴을 사용하면 협업을 하는 과정에서도 부가 설명 없이 이해하여 사용할 수 있는 장점이 있다.

 

 

디자인 패턴의 종류

디자인 패턴은 크게 세 종류로 나눌 수 있는데,

 

생성 패턴, 구조 패턴, 행동 패턴의 세 분류이다.

 

 

생성 패턴은 객체를 생성하는데 관련된 패턴들로, 참조 과정을 캡슐화하여 객체가 생성되거나 변경되어도

 

프로그램의 구조에 영향을 받지 않도록하여 프로그램에 유연성을 더해주는 기능을 한다.

 

생성 패턴에는 팩토리 메서드, 추상 팩토리, 빌더, 프로토타입, 싱글톤 패턴이 있다.

 

 

구조 패턴은 클래스나 객체를 조합하여 더 큰 구조를 만드는 패턴이다.

 

개체 간의 관계를 간단한 방법으로 연결하는 방법으로 설계를 용이하게 해주는 기능을 한다.

 

구조 패턴에는 어댑터, 브리지, 복합체, 데코레이터, 퍼사드, 플라이웨이트, 프록시 패턴이 있다.

 

 

행동 패턴은 클래스나 객체 사이의 알고리즘이나 책임 분배에 관련된 패턴이다.

 

한 객체가 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하며 객체 사이의 결합도를 최소화하는 기능을 한다.

 

행동 패턴에는 책임 연쇄, 커맨드, 반복자, 중재자, 메멘토, 옵저버, 상태, 전략, 템플릿 메서드, 비지터 패턴이 있다.

 

 

싱글톤 패턴(Singleton Pattern)

위의 많은 디자인 패턴 중에서 유니티를 이용한 게임을 제작하는 과정에서

 

가장 많이 사용하는 패턴은 싱글톤 패턴으로

 

특히 게임의 데이터를 관리하는데 매우 유용한 디자인 패턴이다.

 

 

예를 들어서 플레이어의 체력을 관리하는 측면에서 생각하면

 

아이템을 사용하거나 몬스터에게 피격 당하거나 여관에서 휴식을 하는 등으로 여러 요소들에 의해 변화가 일어난다.

 

이 경우에 모든 요소에서 플레이어의 체력을 받아간 후에, 이를 수정하고, 돌려주는 과정을 거친다면

 

중복되는 코드도 많아지고 오류가 발생했을 때 수정하기도 어려워진다.

 

 

이를 해결해주는 것이 싱글톤 패턴인데,

 

싱글톤 패턴으로 선언한 데이터들을 전역에서 관리하며,

 

필요한 경우에 함수 등을 호출함으로써 데이터를 수정할 수 있게 해준다.

 

따라서 모든 요소들이 플레이어의 체력을 가져와서 수정하고 돌려줄 필요 없이

 

플레이어의 체력을 수정하는 함수를 구현한 뒤에,

 

다른 요소들에서 이 함수를 사용하여 데이터를 수정하도록 할 수 있게 만들어준다.

 

 

이 외에도 플레이어나 몬스터 등의 상태를 조절하는 FSM(유한 상태 머신) 패턴,


특정 이벤트가 발생하면 이를 구독하고 있는 곳에 알려주는 옵저버 패턴,

 

오브젝트 풀을 관리할 때 보다 유용하게 관리할 수 있는

 

기본적인 몸체만 오브젝트 풀에 넣어두고 필요한 완성체로 조립해주는 팩토리 패턴 등이 있다.

 

 

오늘은 프로그래밍을 하면서 알고 있으면서 필요한 경우에 사용하면 좋은 디자인 패턴에 대해 간략하게 알아보았는데,

 

싱글톤 패턴 외에도 많은 디자인 패턴들이 존재함을 알 수 있었고, 공부할 수 있는 기회가 되었다.

 

지금은 아직 싱글톤 패턴 외에는 정확하게 이해하지 못해서 정리하지 못했지만,

 

추후에 기회를 갖고 좀 더 이해하여 정리할 예정이다.

'IT > TIL' 카테고리의 다른 글

20240219_유니티 Monobehaviour  (0) 2024.02.21
20240216_MVC 패턴  (0) 2024.02.19
20240214_오브젝트 풀링  (0) 2024.02.14
20240213_오버로딩, 오버라이딩  (0) 2024.02.14
20240210_2개 이하로 다른 비트(프로그래머스)  (2) 2024.02.10