낑깡의 게임 프로그래밍 도전기

C# Unity 접근 제한자 및 프로토타입(Prototype) 개념 정리 본문

Unity C#

C# Unity 접근 제한자 및 프로토타입(Prototype) 개념 정리

낑깡겜플밍 2023. 7. 27. 22:46
반응형

1. 접근 제한자(Access Modifiers)

C#에서 클래스, 필드, 메서드 등의 접근성을 제어하는 키워드입니다.

접근 제한자 접근 가능 범위
public 어디서든 접근 가능
private(기본값) 선언된 클래스 내부에서만 접근 가능
protected 자식 클래스(상속된 클래스)에서만 접근 가능
internal 같은 어셈블리(프로젝트) 내에서만 접근가능
protected internal 같은 어셈블리 + 자식 클래스에서 접근 가능
private protected 같은 어셈블리 내에서 자식 클래스에서만 접근 가능

1.1 private (기본값)

클래스 내부에서만 접근 가능하며, 외부에서는 보이지 않습니다.

class MyClass
{
    private int secretNumber = 42; // 클래스 내부에서만 접근 가능
}

1.2 protected

상속받은 클래스에서만 접근할 수 있음.

class Parent
{
    protected int value = 10; // 자식 클래스에서만 접근 가능
}

class Child : Parent
{
    public void ShowValue()
    {
        Console.WriteLine(value); // 가능
    }
}

class Program
{
    static void Main()
    {
        Child child = new Child();
        // Console.WriteLine(child.value); // 오류 (protected는 외부 접근 불가)
    }
}

1. 3 protected vs private

접근 제한자 같은 클래스 자식 클래스 외부 클래스
private O X X
protected O O X

2. 프로토타입(Prototype) 패턴

프로토타입 패턴(Prototype Pattern) 은 객체를 복제(Cloning)하는 방식으로, new를 사용하지 않고 기존 객체를 기반으로 새로운 객체를 생성합니다.

2.1 ICloneable 인터페이스 사용

class Monster : ICloneable
{
    public string Name { get; set; }
    public int Power { get; set; }

    public object Clone() // 복제 메서드
    {
        return this.MemberwiseClone(); // 얕은 복사
    }
}

class Program
{
    static void Main()
    {
        Monster original = new Monster { Name = "Dragon", Power = 100 };
        Monster clone = (Monster)original.Clone(); // 복제

        Console.WriteLine(clone.Name); // "Dragon"
    }
}

MemberwiseClone() : 필드 값을 그대로 복사하는 얕은 복사(Shallow Copy) 방식.

 

2.2 깊은 복사 (Deep Copy)

객체 내부에 참조 타입이 있다면 깊은 복사가 필요.

class Weapon
{
    public string Type { get; set; }
}

class Monster : ICloneable
{
    public string Name { get; set; }
    public Weapon weapon = new Weapon();

    public object Clone()
    {
        Monster clone = (Monster)this.MemberwiseClone();
        clone.weapon = new Weapon { Type = this.weapon.Type }; // 참조 타입도 새로 생성
        return clone;
    }
}

깊은 복사를 하면 내부 객체(참조형 필드)도 별도로 복제 가능.

 

3. 요약

▶ 클래스 기본 접근 제한자 → private
  protected → 자식 클래스에서만 접근 가능
  Prototype 패턴 → 객체 복제(Clone())로 성능 최적화 가능
  MemberwiseClone() → 얕은 복사, 깊은 복사는 수동 구현 필요

반응형