본문 바로가기

Study114

[C#/Unity][디자인패턴] 브릿지 패턴(Bridge Pattern) 1. 브릿지 패턴이란? - 클래스의 구현 계층과 추상 계층을 분리하여 각자의 독립적인 변형을 용이하게 한다. - 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 한다. - 객체의 확장성을 향상시키기 위한 패턴. 2. 브릿지 패턴을 사용하는 경우 - 클래스의 내용과 클래스에서 처리하는 일이 자주 변화하는 경우 - 기존 시스템에 부수적인 새로운 기능들을 지속적으로 추가 해야하는 경우 - 부모 추상 클래스가 기본 규칙 세트를 정의하고 구체적인 클래스가 추가 규칙을 추가하고 싶은 경우 - 객체에 대한 참조가 있는 추상 클래스가 있고 각 구체적인 클래스에서 정의될 추상 메서드가 있는 경우 3. 브릿지 패턴의 장점 - 새로운 인터페이스를 정의하여 기존 프로그램의 변경없이 기능을 확장할.. 2023. 12. 5.
[C#/Unity][디자인패턴] 프록시 패턴(Proxy Pattern) 1. 프록시 패턴이란? - 어떤 객체를 사용하고자 할 때, 객체를 직접적으로 참조 하는것이 아니라, 해당 객체를 대행(대리, proxy)하는 객체를 통해 대상 객체에 접근하는 방식을 사용하는 패턴. - 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고, 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수 있다. - 원래 객체에 대한 접근을 제어할 수 있어, 요청이 들어와 원래 객체에 전달되기 전이나 후에 무언가를 수행할 수 있다. - 대리자로써 작업 수행을 요청하면 처리 후 그 결과를 알려주는 패턴. - 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴. - 상속받은 인터페이스의 클래스 내부에서 같은 인터페이스를 상속받은 인스턴스를 생성하는 패턴.. 2023. 12. 4.
[C#/Unity][디자인패턴] 경량 패턴(Flyweight Pattern) 1. 경량 패턴이란? - 재사용 가능한 객체 인스턴스를 공유시켜 메모리 사용량을 최소화하는 구조 패턴. - 한 개의 고유 상태를 다른 객체들에서 공유하게 만들어 메모리 사용량을 줄이는 패턴 - 내용이 같은 객체가 이미 있으면 새로 객체를 만들지 않고, 내용이 같은 기존 객체를 공유한다. - 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하며 사용하도록 메모리 사용량을 최소화하는 패턴. - 반복된 데이터에 대해 하드웨어의 부담을 줄여주는 패턴 2. 경량 패턴을 사용하는 경우 - 메모리를 최소한으로 사용해야하는 경우 - 공통적인 인스턴스를 많이 생성하는 로직이 포함된 경우 - 생성된 객체가 오래도록 메모리에 상주하며 사용되는 횟수가 많은 경우 - 어플리케이션에 의해 생성되는 객체의 수가 많아.. 2023. 12. 1.
[C#/Unity][디자인패턴] 퍼사드 패턴(Facade Pattern) 1. 퍼사드 패턴이란? - 복잡한 객체 구조에 대한 간략화된 인터페이스를 클라이언트에게 제공하는 패턴 - 사용자가 굳이 알아야 할 필요가 없는 내부 구조 등을 숨기는 패턴 - 클래스 라이브러리와 같은 대규모의 코드를 사용하기 위한 간략한 인터페이스를 제공하는 패턴 - 어떤 서브시스템의 인터페이스에 대한 통합된 인터페이스를 제공하는 패턴 - '건물의 정면' 이라는 ' Facade'의 뜻처럼, '복잡한 시스템의 앞면' 이라는 의미로 사용된다. 2. 퍼사드 패턴을 사용하는 경우 - 수십 가지의 기능이 있는 정교한 라이브러리와 통합해야 하지만 그 기능의 극히 일부만을 필요로 하는 경우 - 하위시스템의 각 계층에 대한 진입점을 정의하기 위해 사용 - 복잡한 시스템을 간편하게 다루고 싶을 때 사용 3. 퍼사드 패턴.. 2023. 11. 30.
[C#/Unity][디자인패턴] 데코레이터 패턴(Decorator Pattern) 1. 데코레이터 패턴이란? - Decorate의 의미 '꾸민다'의 뜻 그대로 어떤 객체를 꾸며주기 위해 필요한 여러 요소들을 추가해주는 패턴. - 객체에 추가 요소를 동적으로 더할 수 있는 디자인 패턴. - 개발 확장에 있어 base 클래스 밑에 서브 클래스를 만들어 확장시킬 때, 데코레이터 패턴을 사용하면 서브 클래스를 만들어 확장할 때보다 더 확장성 있게 구현할 수 있음. - 기본 기능에 추가할 수 있는 많은 종류의 부가 기능에서 파생되는 다양한 조합을 동적으로 구현할 수 있는 패턴. - 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있도록 해주는 패턴. - 각각이 개별적인 객체면서 parent에선 멤버인 child 객체를 사용할 수 있고, 관련 기능들을 위임하여 실행하는 패턴. - OCP .. 2023. 11. 29.
[C#/Unity][디자인패턴] 컴포지트 패턴(Composite Pattern) 1. 컴포지트 패턴이란? - 사용자가 단일 객체와 복합 객체 모두 동일하게 처리할 수 있음. - 객체들의 관계를 트리구조로 구성하여 부분-전체 계층을 표현하고 각 구조들을 개별 객체들처럼 다룰 수 있는 구조패턴. - 여러 객체의 합성(composite)을 제어할 수 있도록 하는 객체를 정의 - 동일한 타입의 자식 객체들을 관리하는 동일한 타입의 컴포지트 객체를 생성하여 관리하는 객체를 통해 자식 객체들에게 접근하는 패턴 - 복합 객체(Composite)와 단일 객체(Leaf)를 동일한 컴포넌트로 취급하여, 클라이언트에게 이 둘을 구분하지 않고 동일한 인터페이스를 사용하도록 하는 패턴. 2. 컴포지트 패턴을 사용하는 경우 - 전체-부분의 관계를 갖는 객체들 사이의 관계를 정의할 경우 - 여러 개체를 동일한.. 2023. 11. 28.
[C#/Unity][디자인패턴] 어댑터 패턴(Adapter Pattern) 1. 어댑터 패턴이란? - 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴. - 두 객체 사이의 래퍼 역할을 함. - 호환되지 않는 객체들이 협업할 수 있게 함. - 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴. - 하나의 객체에 대한 호출을 캐치하고 두 번째 객체가 인식할 수 있는 형식과 인터페이스로 변환시켜줌. 2. 어댑터 패턴을 사용하는 경우 - 버그가 없이 이미 존재하는 클래스를 재사용하는 경우 - 이미 만들어진 클래스를 새로운 인터페이스에 맞게 개조시키는 경우 - 오픈소스를 사용하거나 프로젝트 중간에 합류해서 작업해야 하는 경우 3. 어댑터 패턴의 장점 1) 호환성 : 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있음.. 2023. 11. 23.
[C#/Unity][디자인패턴] 프로토타입 패턴(Prototype Pattern) 1. 프로토타입 패턴이란? - 어떤 객체에 대한 프로토타입을 만들어 놓고 그것을 복사해서 사용하는 패턴 - Clone을 이용하여 객체를 생성하는 방법 - 본래의 오브젝트의 복사본을 만들어 각 객체에 따라 데이터를 수정해주는 방식으로 오브젝트를 생성 - 기존에 생성된 객체를 이용하여 해당 타입의 객체를 생성 - 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정, 인스턴스는 새 객체를 만들기 위해 자기 자신을 복제 - 유니티에서는 Instantiate()가 같은 역할을 하도록 구현되어 있음. - 객체들을 그의 특정 클래스들에 결합하지 않고 복제할 수 있도록 하는 생성 디자인 패턴 2. 프로토타입 패턴을 사용하는 경우 - 비슷한 오브젝트를 지속적으로 생성해야 할 경우 - 클래스로부터 인스턴스 생성이 어려.. 2023. 11. 17.
[C#] 문자열 String, StringBuilder 차이점(feat 얕은 복사, 깊은 복사) ✍️먼저 아래의 간단한 C# 코드의 출력을 예상해보자. string s1 = "AA"; string s2 = s1; string s3 = string.Copy(s1); Console.WriteLine(s1); Console.WriteLine(s2); Console.WriteLine(s3); Console.WriteLine("-----------------------------------------------"); s1 = "ZZ"; Console.WriteLine(s1); Console.WriteLine(s2); Console.WriteLine(s3); Console.WriteLine("-----------------------------------------------"); string은 참조타입이므로.. 2023. 11. 17.
[C#/Unity][디자인패턴] 빌더 패턴(Builder Pattern) 1. 빌더 패턴이란? - 객체를 생성할 때, 그 객체를 구성하는 부분 부분을 단계별로 먼저 생성하고, 이를 조합함으로써 객체 전체를 생성한다. - 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴 - 생성자 오버로딩 - 복잡한 단계로 생성되는 생성자를 더 쉽고 가독성이 높게 생성할 수 있도록 고안된 패턴 - 편리함과 가독성에 중점을 두고 있어 성능상의 큰 차이는 없지만 작업능률에 큰 차이가 있을 수 있음. 2. 빌더 패턴을 사용하는 경우 - 오브젝트의 생성과정이 복잡할 때 이를 간단하게 만들기 위함 - 플레이어 캐릭터의 옷, 무기 등을 조합하고 장착하는 로직을 구현할 때 사용 3. 빌더 패턴의 장점 1) 편리함 : 객체를 생성하는 클래스에.. 2023. 11. 15.
[C#/Unity][디자인패턴] 추상 팩토리 패턴(Abstract Factory Pattern) 1. 추상 팩토리 패턴이란? - 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우 사용됨. - 관련 객체들의 구상 클래스들을 지정하지 않고도 관력 객체들의 모음을 생성할 수 있도록 하는 생성패턴 - 연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴. 2. 팩토리 메서드 패턴과의 공통점과 차이점 - 먼저, 추상 팩토리 패턴이 팩토리 메서드 패턴의 상위 호환이 아니라는 것에 주의! - 팩토리 메서드 패턴은 어떤 객체를 생성할 지에 집중하고, 추상 팩토리 패턴은 연관된 객체들을 모아둔다는 것에 집중함. - 조건에 따라 객체 생성을 팩토리 클래스로 위임하여 팩토리 클래스에서 객체를 생성하.. 2023. 11. 13.
[C#/Unity][디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern) 1. 팩토리 메서드 패턴이란? - 생성하는 공장은 단 한 개만 존재, 하지만 자식 클래스에 의해 여러 방식들로 구현 가능! - 객체를 생성하는 방법을 해당 클래스를 상속 받은 클래스에서 명시하도록 하는 패턴 - 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생설될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴 - 클래스에서 객체를 생성하기 위해 일반적으로 생성자를 만들지만 팩토리 메서드 패턴을 사용하면 이런 행위를 위임받아서 실행함. 2. 팩토리 메서드 패턴을 사용하는 경우 1) 코드가 높은 수준의 유연성을 제공해야 할 경우 2) 프로그램의 뼈대를 만들 경우 3) 추후 확장이 필요할 수 있는 경우 3. 팩토리 메서드 패턴의 장점 1) 유지보수 용이 : 객체의 생성을.. 2023. 11. 9.