Notice
Recent Posts
Recent Comments
Link
반응형
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 디지털트윈
- 행동트리
- Simulation
- 최소신장트리 mst
- unity korea
- articulation body
- 최단거리 알고리즘
- 유니티 sparkmain(clone)
- navisworks api
- dfs
- dropdown
- C#
- list clear
- 크루스칼
- Unity
- 유니티
- sparkmain(clone) 무한생성
- 습관형성 #직장인자기계발 #오공완
- 드롭다운
- removeAll
- unity sparkmain(clone)
- 너비탐색
- 깊이탐색
- readonly
- raycast
- 오블완
- 티스토리챌린지
- sparkmain(clone)
- GetComponent
- 트리구조
Archives
- Today
- Total
낑깡의 게임 프로그래밍 도전기
C# Unity 접근 제한자 및 프로토타입(Prototype) 개념 정리 본문
반응형
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() → 얕은 복사, 깊은 복사는 수동 구현 필요
반응형
'Unity C#' 카테고리의 다른 글
| 2023년 8월 23일 기타+ Unity 클래스와 랜덤함수 (0) | 2023.08.23 |
|---|---|
| 2023년 8월 22일 기타+ player카메라 고정, 유니티 오브젝트가 벽을 뚫을 때 (0) | 2023.08.22 |
| 2023년 8월 19일 토요일 Unity - 축+, GetComponent, Find 시리즈와 충돌, Teg (0) | 2023.08.19 |
| 2023년 8월 18일 금요일 Unity - 기초 오브젝트 움직이기와 축, Transform 컴포넌트(Translate, Rotate함수) (1) | 2023.08.18 |
| 2023년 8월 16일 수요일 Unity - 시작 전 C# 기본 구조와 형식, C++의 차이점 (0) | 2023.08.16 |