본문 바로가기
ETC/Job

게임 클라이언트 프로그래머 직군 면접 준비 (4)

by Dev_카페인 2024. 2. 27.
반응형

게임 클라이언트 프로그래머 직군 면접 준비 (4)

 

디자인 패턴(Design Pattern)

소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 할 수있는 훌륭한 해결책

[GoF(Gang of Fout) 디자인 패턴]

23가지의 디자인 패턴을 정리하고 각각의 디자인 패턴을 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류했다.

[생성 패턴]

[추상 팩토리(Abstract Factory)]

- 구체적인 클래스를 지정하지 않고 관련성이 있거나 독립적인 객체들을 생성하기 위한 인터페이스를 제공하는 디자인 패턴

[팩토리 메서드(Factory Method)]

- 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 디자인 패턴

[싱글턴(Singleton)]

- 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴

[빌더 (Builder)]

- 복잡한 인스턴스를 조립하여 만드는 구조로 복합 객체를 생성할 때 객체를 생성하는 방법(과정)과 객체를 구현(표현)하는 방법을 분리함으로써 동일한 생성 절차에서 다양한 표현 결과를 만들 수 있는 디자인 패턴

[프로토타입 (Prototype)]

- 생성할 객체의 종류를 명시하는 데 원형이 되는 예시물을 사용하고 새로운 객체를 이 원형들을 복사함으로써 필요한 부분만 수정하여 사용하는 디자인 패턴

 

[구조 패턴]

[어댑터 (Adapter)]

- 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해주는 디자인 패턴

[브릿지 (Bridge)]

- 기능의 클래스 계층과 구현의 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴

[컴포지트 (Composite)]

- 단일 객체와 여러 개의 단일 객체로 이루어진 복합 객체를 클라이언트에서 구분 없이 사용하게 해주는 패턴

[데코레이터 (Decorator)]

- 기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴으로 기능 확장이 필요할 때 객체 간의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주어 상속의 대안으로 사용되는 디자인 패턴

[퍼사드 (Facade)]

- 복잡한 시스템에 대하여 단순한 통합된 인터페이스를 제공함으로써 사용자의 시스템 간 또는 여타 시스템과의 결합도를 낮추어 시스템 구조에 대한 파악을 쉽게 하는 디자인 패턴

[플라이웨이트 (Flyweight)]

- 크기가 작은객체가 여러개 있을 때, 공유를 통해 이들을 효율적으로 지원하는 패턴

[프록시 (Proxy)]

- 어떤 다른 객체로 접근하는 것을 통제하기 위해 그 객체의 매니저 또는 자리 채움자를 제공하는 디자인 패턴

 

[행위 패턴]

[책임 연쇄 (Chain of Responsibility)]

- 요청을 처리하는 기회를 하나 이상의 객체에 부여하여 요청을 보내는 쪽과 받는 쪽의 결합을 피하는 패턴입니다. 요청을 받는 객체를 연쇄적으로 묶고 객체를 처리할 수 있을 때까지 요청을 전달합니다.

[커맨드 (Command)]

- 요청을 객체로 캡슐화하여 서로 다른 사용자의 매개변수화, 요청 저장 또는 로깅, 연산의 취소를 지원하게 만드는 패턴입니다.

[인터프리터 (Interpreter)]

- 주어진 언어에 대해서 문법을 위한 표현수단을 정의하고, 해당 언어로 된 문장을 해석하는 해석기를 사용하는 패턴입니다.

[이터레이터 (Iterator)]

- 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공하는 디자인 패턴

[중재자 (Mediator)]

- 한 집합에 속해있는 객체들의 상호 작용을 캡슐화하는 객체를 정의하는 패턴입니다. 중재자는 객체들이 직접 서로 참조하지 않도록 함으로써 객체들간의 느슨한 연결을 촉진시키며 객체들의 상호작용을 독립적으로 다양화 시킬 수 있도록 합니다.

[메멘토 (Memento)]

- 객체의 상태 정보를 저장하고 사용자의 필요에 의하여 원하는 시점의 데이터를 복원 할 수 있는 패턴

[옵저버 (Observer)]

- 객체들 사이에 1 : N 의존관계를 정의하여 어떤 객체의 상태가 변할 때, 의존관계에 있는 모든 객체들에 연락이 가고 내용이 자동적으로 갱신될 수 있게 만드는 디자인 패턴

[상태 (State)]

- 객체의 내부 상태가 변경될 때 행위 내용이 변경되는 패턴으로, 객체는 자신의 클래스가 변경되는 것처럼 보이게 된다.

[전략 (Strategy)]

- 동일 계열의 알고리즘을 정의하고, 각각 캡슐화하여 이들을 상호작용 가능하도록 만드는 것이다. 알고리즘을 사용하는 사용자로부터 독립적으로 알고리즘이 변경될 수 있도록 하는 디자인 패턴

[템플릿 메소드 (Template Method)]

- 상위 클래스에는 추상메서드를 통해 기능의 골격을 제공하고, 하위 클래스의 메서드에서 세부 처리를 구체화하는 방식으로 코드 양을 줄이고 유지보수를 용이하게 만드는 디자인 패턴

[방문자 (Visitor)]

- 각 클래스 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스를 만들어 놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴으로, 객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 사용하는 디자인 패턴

 

아키텍처 패턴(Architecture Patterns)

[레이어 패턴(Layers Pattern)]

- 시스템을 계층(Layer)으로 구분하여 구성하는 고전적 방법

 

[클라이언트-서버 패턴(Client-Server Pattern)]

- 하나의 서버 컴포넌트와 다수 클라이언트 컴포넌트로 구성되는 패턴

- 클라이언트나 서버는 요청과 응답을 받기 위해 동기화 되는 경우를 제외하고는 서로 독립적

 

[파이프-필터 패턴(Pipe-Filter Pattern)]

- 데이터 스트림 절차의 각 단계를 필터 컴포넌트로 캡슐화해 파이프를 통해 데이터를 전송하는 패턴

- 필터 컴포넌트는 재사용성이 좋고, 추가가 쉬워 확장 용이, 재배치하여 다양한 파이프라인 구축 가능

 

[모델--컨트롤러 패턴(Model-View-Controller Pattern)]

- 모델(Model): 서브시스템의 핵심 기능과 데이터를보관

- (View): 사용자에게 정보를 표시

- 컨트롤러(Controller): 사용자로부터 받은 입력처리/ 뷰 제어 / UI 담당

- 각 부분은 별도의 컴포넌트로 분리되어 있으므로 서로 영향을 받지 않고 개발 작업 수행

 

[마스터-슬레이브 패턴(Master-Slave Pattern)]

- 마스터 컴포넌트에서 슬레이브 컴포넌트로 분할한 후, 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업을 수행하는 패턴

 

[브로커 패턴(Broker Pattern)]

- 컴포넌트와 사용자를 연결해주는패턴

 

[피어--피어 패턴(Peer-To-Peer Pattern)]

- 피어를 하나의 컴포넌트로 간주하며, 각 피어는 서비스를 호출하는 클라이언트가될수도, 서비스를 제공하는 서버가될수도있는패턴

 

[이벤트-버스 패턴(Event-Bus Pattern)]

- 소스가 특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리하는 방식

- 이벤트를 생성하는 (Source), 이벤트를 수행하는 스너(Listener), 이벤트의 통로인 (Channel), 채널들을 관리하는 (Bus)

 

[블랙보드 패턴(Blackboard Pattern)]

- 해결책이 명확하지 않은 문제를 처리하는데 유용한 패턴

 

[인터프리터 패턴(Interpreter Pattern)]

- 특정 언어로 작성된 프로그램 코드를 해석하는컴포넌트를설계할때사용됨

 

 

 

반응형