프로그래밍/디자인 패턴

    빌더 패턴 (Builder Pattern)

    빌더 패턴 (Builder Pattern)

    빌더 패턴 정의 => 객체를 생성할 때 그 객체를 구성하는 부분 부분을 먼저 생성하고, 이를 조합함으로써 객체 전체를 생성하는 방법 => 생성할 객체의 종류가 손쉽게 추가, 확장이 가능한 설계 => 복잡한 유형의 오브젝트를 작성하는데 사용된다. 추상 팩토리 패턴과의 차이점 Builder Pattern Abstract Factory Pattern 특징 복잡한 객체의 단계별 생성에 중점 제품의 유사군들의 존재하는 경우 유연한 설계에 중점 반환 시기 마지막 단계에서 생성한 제품 반환 만드는 즉시 제품을 반환 이제 예제를 통해 한 번 알아보자. 예제로 빌더 패턴을 이용해 비행기와 헬리콥터를 만들어 보려한다. 어떻게 쓰는지 한 번 보자. 먼저 프로젝트 정보다. 비행기와 헬리콥터 모두 Engine과 Wing은 가지..

    추상 팩토리 패턴 (Abstract Factory Pattern)

    추상 팩토리 패턴 (Abstract Factory Pattern)

    추상 팩토리 패턴 정의 => 관련성 있는 여러 종류의 객체를 특정 그룹으로 묶어 한번에 일괄된 방식으로 생성하고 교체할 수 있는 패턴 => 팩토리 메서드 패턴과 유사하나 객체 생성 메서드 구현 후 하나의 객체를 반환하지만 추상 팩토리 패턴은 연관된 객체들의 패밀리를 반환한다. 장점 => 1. 관리 용이성 - 클래스 이름 대신 팩토리 메소드를 사용해 객체를 생성하므로 추후 실제 생성되는 객체가 바뀌거나 추가되어 문제가 없다. => 2. 보안성 - 클래스의 대부분의 내용은 숨기고 싶을 때, 인터페이스나 abstract를 통해서만 객체에 접근하게 할 수 있다. => 3. 리소스 재활용성 - 팩토리 메소드가 반드시 객체를 새로 생성할 필요는 없고, 상황에 따라 새로 생성될수도, 기존의 것을 반환할수도 있다. =..

    팩토리 메서드 패턴 (Factory Method Pattern)

    팩토리 메서드 패턴 (Factory Method Pattern)

    팩토리 메소드 패턴 정의 => 객체를 생성하기 위한 인터페이스를 정의하는데, 서브클래스에서 어떤 클래스를 만들지를 결정하게 함으로써 객체 생성을 캡슐화 한다. => 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기게 된다. 서브클래스가 만든다는 뜻 => 생산자 클래스가 실제 생산될 제품에 대한 사전지식을 알고 싶어하지 않고, 사용하고만 싶어한다. => 그래서 객체의 생성을 서브클래스에게 위임하고, 서브클래스에서는 어떤 클래스의 인스턴스를 만들지 결정한다. 사용목적 및 용도, 장점 => 객체 생성 코드를 전부 한 객체 또는 메소드에 넣으면 코드에서 중복되는 내용을 제거할 수 있고, 객체의 생성을 한 군데에서만 관리하면 된다. => 동일한 인터페이스 구현으로 새로운 객체가 추..

    심플 팩토리 패턴 (Simple Factory Pattern)

    심플 팩토리 패턴 (Simple Factory Pattern)

    팩토리란? (Factory) => 객체 생성을 처리하는 클래스 심플 팩토리란? (Simple Factory) => 객체를 생성하는 일을 전담하는 클래스 심플 팩토리 패턴 정의 => 일반적인 팩토리 패턴은 무언가 객체를 생성하고자 할 때 사용하는 패턴 => 심플 팩토리는 사실 패턴이라기보다는 객체지향 프로그램을 할 때 사용되는 관용구 같은 것 => 하지만 팩토리 메서드 패턴이나, 추상 팩토리 패턴의 기본이므로 알아두면 좋음 => 주어진 입력을 기반으로 다른 유형의 객체를 반환하는 메소드가 있는 팩토리 클래스 이제 유니티에서 코드를 통해 패턴을 확인해보려고 한다. 유닛을 영역에 맞게 생성하고 로그로 움직임을 찍어보려고 한다. 프로젝트 구성은 아래와 같다. 먼저 Unit.cs이다. // Unit.cs usin..

    스트레티지 패턴 (Strategy Pattern)

    스트레티지 패턴 (Strategy Pattern)

    1. 스트레티지 패턴 정의 => 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어 접근점에서 알고리즘이 서로 교환 가능하도록 하는 패턴 => 동일 목적 알고리즘의 선택 적용 문제 => 인터페이스 => 기능에 대한 선언(구현과의 분리) => 여러가지 기능을 사용하기 위한 단일 통로 => 사용 예 : => 워드 문서에서 프린터, 폰트 사용 => 프린터기의 종류에 상관없이 프린트 동작, 폰트의 종류에 상관없이 입력하는건 같음 => 정수 배열에 대해 사용하는 정렬 알고리즘 => 게임 캐릭터의 무기(교체) 사용 인터페이스를 받고 해당 기능은 꼭 구현해야 한다. 와 같다. 게임에서 무기의 종류는 다양해도 (칼, 창, 단검, 도끼, 방패 등) 공격! 자체의 기능은 똑같은 것과 같다. (실제로 칼은 2번 휘..

    싱글턴 패턴 (Singleton Pattern)

    1. 싱글턴 패턴 정의 => 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공한다. => GoF의 정의 2. 유니티에서의 싱글턴 패턴 => 같은 씬안에서의 데이터 공유 => 서로 다른 씬들간의 데이터 공유 => 씬에 빈객체를 생성한 후에 오직 하나의 객체만 생성되도록 만들고, DontDestoryOnLoad 메소드를 통해 씬 변경시에도 파괴되지 않는 형태로 구현한다. 3. 싱글턴 패턴의 장단점 => 싱글턴 패턴의 객체는 일종의 전역 변수이다. => 장점 1. 모든 곳에서 접근이 가능하다. => 단점 1. 모든 곳에서 접근 가능하니, 객체의 변경 시점과 변경 주체를 알기가 쉽지 않다. => 단점 2. 단점 1의 주체를 알려면 호출하는 모든 코드들을 다 찾아야 알 수 있다..