본문 바로가기

디자인 패턴11

[C#/Unity][디자인패턴] 상태 패턴(State Pattern) 1. 상태 패턴이란? - 객체가 상태에 따라 행위를 다르게 할 때, 직접 상태를 체크하여 상태에 따른 행위를 호출하는 것이 아니라 상태를 객체화하여 필요에 따라 다르게 행동하도록 위임하는 디자인 패턴. - 상태를 조건문으로 검사해서 행위를 달리하는 것이 아닌, 상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴. - 객체의 특정 상태를 클래스로 선언하고, 클래스에서는 해당 상태에서 할 수 있는 행위들을 메서드로 정의한다. - 상태란, 객체가 가질 수 있는 어떤 조건이나 상황을 의미한다. 2. 상태 패턴을 사용하는 경우 - 상태 전이를 위한 로직이 지나치게 복잡한 경우 - 현재 상태에 따라 다르게 행동하는 객체가 있는 경우 - 상태들의 수가 많고, 상태별로 코드가 자주 변경되는 경우 3. 상태 패.. 2023. 12. 27.
[C#/Unity][디자인패턴] 옵저버 패턴(Observer Pattern) 1. 옵저버 패턴이란? - 하나의 관찰 대상(객체)를 여러 개의 관찰자(옵저버)들이 관찰하고(일대다 구조), 객체의 상태 변화시 객체가 직접 옵저버들에게 상태 변화를 통지하고, 옵저버들은 해당 통지를 받는 구독 메커니즘을 가짐. - 옵저버(관찰자)들이 관찰하고 있는 대상자의 상태 변화가 있을 때마다, 대상자는 목록의 각 관찰자들에게 직접 알리고 관찰자들은 알림을 받아 조치를 취하는 행동 패턴. - 객체의 상태 변화를 관찰하는 관찰자(옵저버)들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴. - public/subscribe (발행/구독) 모델로도 알려져 있음. - 관찰자들은 수동적으로 객체에게 정보를 전달 받기만을 기다린.. 2023. 12. 27.
[C#/Unity][디자인패턴] 중재자 패턴(Mediator Pattern) 1. 중재자 패턴이란? - 객체 간의 직접 통신을 제한하고 중재자 객체를 통해서만 협력하도록 하는 패턴. - 소프트웨어 공학에서 어떻게 객체들의 집합이 상호작용하는지를 함축해놓은 객체를 정의 - 객체간의 상호작용을 캡슐화하는 디자인 패턴 - 중재자라는 객체 안에서 서로 다른 객체들을 캡슐화하여 객체들이 더 이상 직접적으로 상호작용하지 않고 중재자를 통해서만 커뮤니케이션하도록 함. - 객체 간의 혼란스러운 의존 관계들을 줄일 수 있는 패턴 2. 중재자 패턴을 사용하는 경우 - 객체 간의 많은 의존관계를 가지거나 상호작용이 복잡해질 때 사용. - 일부 클래스들이 다른 클래스들과 단단하게 결합하여 변경하기 어려울 대 사용. - 타 컴포넌트들에 너무 의존하여 다른 프로그램에서 컴포넌트를 재사용할 수 없는 경우 .. 2023. 12. 20.
[C#/Unity][디자인패턴] 반복자 패턴(Iterator Pattern) 1. 반복자 패턴이란? - 일련의 데이터 집합에 대해 순차적인 접근(순회)을 지원하는 패턴. - 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있는 방법을 제공하는 패턴. - 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴. - 컬렉션의 요소들을 순회하는 패턴. 2. 반복자 패턴을 사용하는 경우 - 해시나 트리구조와 같이 저장순서가 정해지지 않고 적재된 데이터들을 순회하는 방법을 정하는 경우 - 컬렉션에 상관없이 객체 접근 순회 방식을 통일하고자 할 경우 - 컬렉션을 순회하는 다양한 방법을 지원하고 싶은 경우 - 컬렉션의 복잡한 내부 구조를 클라이언트로부터 숨기고 싶은 경우(편의 + 보안) - 데이터 저장 컬렉션 종류가 변경 가능.. 2023. 12. 16.
[C#/Unity][디자인패턴] 커맨드 패턴(Command Pattern) 1. 커맨드 패턴이란? - 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴. - 객체의 행위(메서드)를 클래스로 만들어 캡슐화하는 패턴. - 요청을 요청에 대한 모든 정보가 포함된 독립실행형 객체로 변환하는 행동 패턴. - 요청의 실행을 지연하거나 대기열에 넣을 수 있도록 하고, 또 실행 취소할 수 있는 작업도 지원한다. - 요청을 객체의 형태로 캡슐화하여 나중에 이용할 수 있도록 메서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 해주는 패턴. 2. 커맨드 패턴을 사용하는 경우 - 요청이 서로 다른 사용자, 시간 또는 프로젝트에 따라 달라질 수 있을 경우 - 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고 싶은 .. 2023. 12. 7.
[C#/Unity][디자인패턴] 브릿지 패턴(Bridge Pattern) 1. 브릿지 패턴이란? - 클래스의 구현 계층과 추상 계층을 분리하여 각자의 독립적인 변형을 용이하게 한다. - 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 한다. - 객체의 확장성을 향상시키기 위한 패턴. 2. 브릿지 패턴을 사용하는 경우 - 클래스의 내용과 클래스에서 처리하는 일이 자주 변화하는 경우 - 기존 시스템에 부수적인 새로운 기능들을 지속적으로 추가 해야하는 경우 - 부모 추상 클래스가 기본 규칙 세트를 정의하고 구체적인 클래스가 추가 규칙을 추가하고 싶은 경우 - 객체에 대한 참조가 있는 추상 클래스가 있고 각 구체적인 클래스에서 정의될 추상 메서드가 있는 경우 3. 브릿지 패턴의 장점 - 새로운 인터페이스를 정의하여 기존 프로그램의 변경없이 기능을 확장할.. 2023. 12. 5.
[C#/Unity][디자인패턴] 퍼사드 패턴(Facade Pattern) 1. 퍼사드 패턴이란? - 복잡한 객체 구조에 대한 간략화된 인터페이스를 클라이언트에게 제공하는 패턴 - 사용자가 굳이 알아야 할 필요가 없는 내부 구조 등을 숨기는 패턴 - 클래스 라이브러리와 같은 대규모의 코드를 사용하기 위한 간략한 인터페이스를 제공하는 패턴 - 어떤 서브시스템의 인터페이스에 대한 통합된 인터페이스를 제공하는 패턴 - '건물의 정면' 이라는 ' Facade'의 뜻처럼, '복잡한 시스템의 앞면' 이라는 의미로 사용된다. 2. 퍼사드 패턴을 사용하는 경우 - 수십 가지의 기능이 있는 정교한 라이브러리와 통합해야 하지만 그 기능의 극히 일부만을 필요로 하는 경우 - 하위시스템의 각 계층에 대한 진입점을 정의하기 위해 사용 - 복잡한 시스템을 간편하게 다루고 싶을 때 사용 3. 퍼사드 패턴.. 2023. 11. 30.
[C#/Unity][디자인패턴] 빌더 패턴(Builder Pattern) 1. 빌더 패턴이란? - 객체를 생성할 때, 그 객체를 구성하는 부분 부분을 단계별로 먼저 생성하고, 이를 조합함으로써 객체 전체를 생성한다. - 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴 - 생성자 오버로딩 - 복잡한 단계로 생성되는 생성자를 더 쉽고 가독성이 높게 생성할 수 있도록 고안된 패턴 - 편리함과 가독성에 중점을 두고 있어 성능상의 큰 차이는 없지만 작업능률에 큰 차이가 있을 수 있음. 2. 빌더 패턴을 사용하는 경우 - 오브젝트의 생성과정이 복잡할 때 이를 간단하게 만들기 위함 - 플레이어 캐릭터의 옷, 무기 등을 조합하고 장착하는 로직을 구현할 때 사용 3. 빌더 패턴의 장점 1) 편리함 : 객체를 생성하는 클래스에.. 2023. 11. 15.
[C#/Unity][디자인패턴] 추상 팩토리 패턴(Abstract Factory Pattern) 1. 추상 팩토리 패턴이란? - 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우 사용됨. - 관련 객체들의 구상 클래스들을 지정하지 않고도 관력 객체들의 모음을 생성할 수 있도록 하는 생성패턴 - 연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴. 2. 팩토리 메서드 패턴과의 공통점과 차이점 - 먼저, 추상 팩토리 패턴이 팩토리 메서드 패턴의 상위 호환이 아니라는 것에 주의! - 팩토리 메서드 패턴은 어떤 객체를 생성할 지에 집중하고, 추상 팩토리 패턴은 연관된 객체들을 모아둔다는 것에 집중함. - 조건에 따라 객체 생성을 팩토리 클래스로 위임하여 팩토리 클래스에서 객체를 생성하.. 2023. 11. 13.
[C#/Unity][디자인패턴] 디자인 패턴(Design Pattern) 알아보기 1. 디자인 패턴이란? - 설계자로 하여금 재사용이 가능한 설계를 선택하고, 재사용을 방해하는 설계를 배제하도록 도와줌 - 시스템의 유지보수나 문서화를 개선할 수 있고, 클래스의 명세도 정확하게 알 수 있으며, 객체 간의 상호작용 또는 설계의도까지 명확하게 정의할 수 있음. - 즉, "올바른" 설계를 "빨리" 만들 수 있도록 도와줌. - 같은 실수를 반복하지 않기 위해 특정 상황에서 발생하는 문제 패턴을 발견하고 해결방안을 기록한 것 - 효율적인 코드를 만들기 위한 방법론 2. 디자인 패턴의 종류 1) 생성 패턴 - 객체의 생성과 초기화를 다룸 - 객체를 만드는 방법에 대한 패턴 2) 구조 패턴 - 객체와 클래스를 조합해 더 큰 구조를 만드는 방법을 다룸 - 객체들의 구성이나 클래스들의 구성을 다루는 패.. 2023. 11. 7.
[면접준비] 싱글톤과 static의 차이점 1. 싱글톤 - 단 하나의 객체(인스턴스)만을 생성하여 해당 객체를 공유하는 디자인 패턴 - 객체를 생성하려고 할 때마다 이미 생성된 것을 반환하거나 없다면 해당 시간에 처음 생성함 - 정적 클래스와 달리 싱글톤 클래스는 확장, 재정의, 인터페이스 구현이 가능 - 생성 시점을 조정 가능 - 객체이므로 힙에 싱글톤 객체가 저장됨 -> 쓰레드간 공유 가능 - 직렬화가 가능 2. static - 객체를 만들지 않고, 생성자도 갖지 않음 - 인터페이스 구현 불가능 - override 불가능 - 퍼포먼스는 빠름 - 절차지향적 성향이 강함 -> 무분별한 사용은 객체 지향을 해침 - 어플리케이션이 메모리에 로드될 때 스택에 바로 초기화 - 정적 스택에 저장되기 때문에 쓰레드 관리가 어려움 Q. 왜 static을 쓰지.. 2023. 8. 16.