State Pattern
·
🧊Unity Basic/디자인패턴
상태 패턴 ( State Pattern )상태 패턴은 게임 구현에서 자주 사용되는 디자인 패턴이다.객체가 가진 상태를 관리하고 , 각 상태에 따른 행동을 미리 지정할 수 있다.다른 디자인 패턴과 마찬가지로 상황과 목적에 따라 다른 형태로 구현될 수 있다.상태를 분기문 ( if / switch )로 처리하지 말고각 상태를 '클래스( 객체 )'로 분리해 유연하게 전환할 수 있게 디자인하는 패턴 현업에서는 코드의 재사용성과 유지보수성을 높이기 위해 객체지향적인 설계를 지향하고 있다.같은 프로그램이라도 설계자에 따라 , 혹은 객체지향을 바라보는 관점에 따라 다른 설계 방법이 나오지만 궁극적으로는 프로그램을 더 견고하게 만들고자 하는 목적이 있다. 상태 패턴은 어떠한 객체의 상태를 직관적으로 선언하고 제어하기 위..
불변 ( Immutable )
·
⭐C Sharp/11. 객체 지향
불변 ( Immutable )프로그래밍을 하다 보면 한 번 만들어진 데이터가 절대 바뀌지 않는 경우들을 보게 된다.문자열을 조작하려고 했는데 원본이 그대로인 경우가 발생하는데 이런 현상이 바로 불변 특성 때문이다 정의불변은 "한 번 생성된 객체의 상태가 절대 변경되지 않는다" 는 특성이다.객체가 만들어진 후에는 내부 데이터를 수정할 수 없고 , 수정하려고 하면 새로운 객체가 생성된다.대표적인 불편 타입으로는 string , delegate 그리고 대부분의 값 타입들이 있다. 예시 코드string original = "HoChan";string modified = original + " Blog";Console.WriteLine(original); // "HoChan" (원본 그대로)Console.W..
sealed class
·
⭐C Sharp/11. 객체 지향
sealed classsealed class 는 상속을 막는 클래스이다sealed 로 선언된 클래스는 다른 클래스가 상속받을 수 없다. 문법sealed class 클래스이름{ // 멤버들...}sealed 키워드는 클래스를 봉인 ( seal ) 한다는 뜻이다주로 더 이상 확장하거나 재정의되면 안 되는 클래스를 만들 때 사용한다. ▼예시 코드sealed class Animal{ public void Speak() { Console.WriteLine("Animal sound"); }}// 오류 발생: sealed 클래스는 상속 불가class Dog : Animal{ public void Bark() { Console.WriteLine("Bow-..
virtual 과 override
·
⭐C Sharp/11. 객체 지향
virtual 과 overridevirtual 과 override 는 C# 상속에서 다형성을 구현할 때 사용하는 키워드이다.그 차이를 아래에 정리한다. virtual부모 크랠스에서 선언한 메서드 / 속성을 자식 클래스가 재정의할 수 있도록 허용한다는 의미사용 위치 : 부모 클래스의 메서드나 속성 앞문법 예시 :class Animal{ public virtual void Speak() { Console.WriteLine("동물이 소리를 냅니다."); }} override부모 클래스에서 virtual 또는 abstract 로 선언된 메서드를 자식 클래스에서 재정의할 때 사용한다.사용 위치 : 자식 클래스의 메서드 앞문법 예시 :class Dog : Animal{ pub..
IList<T>
·
⭐C Sharp/00. 문법
List 안에 있는 내용을 피셔 에이츠를 이용해 셔플하고 싶었다.그래서 Util 이란 Class 를 하나 생성해서 따로 관리하려고 한다.private static void shuffle(??? list)그런데 매개변수로 List 을 적게되면,예시로 List 을 적게되면 딱 List 타입만 받을수 있고string[ ] (배열) 같은건 받을수 없게 되는데, 다른 것도 받고 싶으면 어떻게 입력해야 되지? IListIList 는 C# 의 제네릭 컬렉션 인터페이스 중 하나인덱스로 접근 가능한 리스트형 자료구조의 표준 규약 ( 약속 )을 정의한 인터페이스즉, List , T[ ], OvservableColloction 같은 리스트 계열 클래스들이이 인터페이스를 구현 ( implement )해서 동일한 방식으로 ..
readonly
·
⭐C Sharp/11. 객체 지향
ReadOnly C# 에서 readonly 는 주로 필드 ( field ) 앞에 붙여서 사용하는 키워드이다.readonly 의 역할은 , 한 번 값을 정하면 이후에는 바꿀 수 없도록 제한하는 역할이다. ▼문법class ClassName{ public readonly 데이터형 필드이름; public readonly 데이터형 필드이름 = 초기값; public ClassName(매개변수) { 필드이름 = 값; // 생성자 안에서 초기화 가능 }} readonly 는 필드 ( 클래스나 구조체의 멤버 변수 ) 에만 사용할 수 있다.값을 할당할 수 있는 시점은 딱 두 군데이다.선언과 동시에 초기화할 때생성자 ( Constructor ) 안에서 초기화할 때그 외에는 값을 변경..
Builder
·
⭐C Sharp/13. 디자인 패턴
Builder빌더 패턴은 복잡한 객체의 생성 과정을 단계별로 캡슐화한다같은 생성 과정으로 서로 다른 표현의 객체를 만들 수 있게 해주는 생성 ( Creational ) 패턴이다.조립 과정을 분리해서 유연하게 객체를 생성하는 것이 핵심이다. ▼예시 코드using UnityEngine;public class Ship : MonoBehaviour { public string ShipName; public string Hull; public string Engine; public string Weapon; public void ShowInfo() { Debug.Log($"배 이름: {ShipName}, 선체: {Hull}, 엔진: {Engine}, 무기: {We..
Factory Method
·
⭐C Sharp/13. 디자인 패턴
팩토리 ( Factory Method )팩토리 패턴은 객체 생성 로직을 별도의 메서드 / 클래스로 분리한다.클라이언트 코드가 구체적인 클래스 이름을 알 필요 없이 객체를 생성할 수 있도록 하는 생성 ( Creational ) 패턴이다. 객체 생성을 캡슐화 한다 ▼예시 코드using UnityEngine;public abstract class Ship : MonoBehaviour { public abstract void Sail();}public class BattleCruiser : Ship { public override void Sail() { Debug.Log("Battlecruiser operational."); }}public class Medivac : ..
의존성 주입 ( Dependency Injection )
·
⭐C Sharp/13. 디자인 패턴
의존성 주입 ( Dependency Injection , DI )의존성 주입은 객체가 직접 다른 객체를 생성하거나 의존하지 않고, 외부에서 필요한 객체 ( 의존성 )를 넣어주는 설계 방식이다. 기본 개념보통 클래스 A 가 클래스 B를 사용해야 한다면, A 안에서 new B() 를 해서 만든다.→ 이렇게 되면 A 와 B 가 강하게 결합 ( 의존 )하게 된다. 의존성 주입은 B 를 외부에서 만들어서 A 에게 전달하는 방식이다→ 이렇게 하면 A 는 B 의 구체적인 생성 방식에 신경 쓰지 않고, 단지 B가 필요하다는 사실만 알면 된다. 필요한 이유1. 결합도 낮춤 ( Loosely Coupled )→ 클래스끼리 덜 얽혀 있어서 코드 수정이나 확장이 쉽다 2. 테스트 용이→ 예시 : 진짜 DB 대신 MockD..