2024년 6월 20일 목요일 개발일지 / 전략 패턴에 대해서

2024. 6. 20. 21:26나의 개발자 기록/본 캠프 개발 일지

2024년 6월 20일 목요일


What I did today

 

 

오늘 오전에는 팀원분들이랑 다음 작업에 대한 이야기를 했습니다. 어제 생각보다 많이 구현을 해놨기 때문에 쉬어가는 겸 적이랑 유닛으로 쓸 에셋에 대한 이야기를 나누었습니다. 어떤 유닛들을 사용하는 게 좋을까 하다가 일단 언데드악마, 드래곤, 몬스터 & 거인 등을 사용하자는 이야기가 나와서 Github에 적용을 했습니다. 근데 막상 에셋을 다운하고 보니 부분 유료화라 모든 캐릭터를 사용할 수 있는 게 아니었습니다. 그래서 다른 에셋들도 다운해서 쓰는 것으로 결정하게 됐습니다.

 

 

에셋을 적용한 후에 저는 몬스터들을 프리팹으로 만들어둘까 했는데, 팀원분 중 스테이지를 작업하셨던 한 분이 하나의 프리팹으로 필요한 데이터를 받아와서 하는게 좋을 것 같다고 하셔서 팀원분이 제 일거리를 가져가셨습니다... 만 하나의 프리팹으로 데이터를 다 받아오는 걸 어떻게 하는지 몰랐기 때문에 몬스터 관련 작업도 팀원분에게 맡기게 됐습니다. 나중에 코드가 완성된다면 저도 한번 확인을 해봐야겠네요.

 

 

하여튼 간에 갑자기 할 게 없어진 저는 일단 사운드 시스템 기반이라도 만들어야 겠다고 생각해서 심화 강의때 사용했던 사운드 시스템을 적용했습니다. 그리고나서 추가로 할게 없나 하다가 팀플 때마다 사용했던 오디오 믹서 시스템SoundManager에 추가를 해서 적용했고, 오후에 오류를 고치면서 테스트해본 결과 정상적으로 잘 작동했고, 팀원분들에게 이야기를 한 후, Pull Request 하고 Merge 했습니다.

 

그 이후에는 디자인 패턴 중에서 옵저버 패턴략 패턴에 대한 스탠다드 반 강의를 듣게 되었고, 튜터님께서 예제로 설명을 잘해주셨기 때문에 어떤 의미인지 금방 알게 되었습니다. 그래서 이번 TIL에는 먼저 전략 패턴에 대해서 남겨볼 생각입니다.

튜터님 강의가 끝난 후, 저녁을 먹고 나서 팀원분들과 다시 한번 이야기를 나누었습니다. 근데 다들 덥고 힘들어서 그런지 피그마에서 노가리를 까면서 수다를 떨었고, 8시 이후에는 다들 TIL을 쓰면서 오늘 하루를 마무리했습니다. 


전략 패턴에 대해서

 

전략 패턴 (Strategy Pattern) 이란?

 

전략 패턴(Strategy Pattern)은 소프트웨어 디자인 패턴 중 하나로, 행동 패턴에 속한다. 이 패턴은 객체의 행동을 캡슐화하여 객체가 다양한 행동을 할 수 있도록 하는 것을 목적으로 한다. 즉, 동일한 문제를 해결하기 위한 여러 알고리즘을 각각의 클래스에 캡슐화하고, 이들을 상호 교체할 수 있도록 설계하는 방식이다.


전략 패턴의 주요 구성 요소

 

1. 전략 인터페이스(Strategy Interface) : 다양한 알고리즘을 공통적으로 따르는 인터페이스를 정의한다.

2. 구체적인 전략 클래스(Concrete Strategy) : 인터페이스를 구현한 여러 알고리즘 클래스들입니다. 각 클래스는 특정 알고리즘을 구현한다.

3. 컨텍스트(Context) : 전략 객체를 사용하는 클래스이다. 컨텍스트 클래스는 특정 전략을 사용하기 위해 인터페이스를 통해 전략 객체를 호출한다.


전략 패턴의 장점

 

유연성 : 객체의 행동을 동적으로 변경할 수 있다.

확장성 : 새로운 전략을 추가할 때 기존 코드를 수정할 필요 없이 새로운 전략 클래스를 추가하면 된다.

캡슐화 : 알고리즘을 각각의 클래스로 캡슐화하여 코드의 가독성과 유지 보수성을 높인다.


전략 패턴의 단점

 

복잡성 증가 : 전략 패턴을 사용하면 클래스의 수가 늘어나고 구조가 복잡해질 수 있다.

객체 협력 증가 : 컨텍스트와 전략 객체 간의 협력이 필요하므로, 설계 시 고려할 요소가 많아진다.

 

결론 : 전략 패턴은 게임 개발에서 캐릭터의 행동, AI의 의사 결정, 공격 방식 등 다양한 상황에서 유용하게 사용될 수 있다.