Deff_Dev
[Unity/C#] 클래스 본문
해당 포스팅은 고박사님의 유니티 C# 강의를 보고 공부한 내용과 추가적으로 공부한 내용을 정리한 포스팅입니다.
클래스
- 객체를 표현하는 속성(변수)과 기능(메소드)을 하나의 집합으로 묶는 단위
객체 : 게임내의 실제 메모리을 가지고 태어난 하나의 오브젝트
클래스 : 객체를 만들기 위한 틀
ex) 타코야끼를 만들 때
- 타코야끼 틀 = 클래스
- 만들어진 타코야끼 = 객체
// Player : 클래스 이름, MonoBehaviour : 부모 클래스
public class Player : MonoBehaviour
{
// 멤버 변수 (필드)
private int currentHP = 100;
// 멤버 함수 (메소드)
public void TakeDamage(int damage){
currentHP -= damage;
}
}
접근 지정자
- 해당 멤버의 접근성을 설정하는 키워드
- 멤버 변수, 멤버 함수의 앞에 작성 (지역 변수 X)
public : 외부에서 접근 , 하위 클래스에서 접근 O
protected : 외부에서 접근 X, 하위 클래스에서 접근 O
private : 외부에서 접근, 하위 클래스에서 접근 X
internal : C# 스크립트 public, 다른 언어 스크립트 private
protected internal : C# 스크립트 Protected, 다른 언어 스크립트 private
private protected : C# 스크립트에서 상속받은 클래스 내부에서만 접근 O
접근 지정자를 생략한다면 private로 자동 설정
접근 지정자 사용 이유
- 클래스에서 최소한의 기능만을 외부로 노출하고, 나머지는 감추는 것을 지향한다. (은닉성)
ex) 사용자가 TV를 시청할 때 TV가 어떻게 작동되는지에 대해 알 필요가 없다.
클래스 객체 생성
- 클래스는 변수와는 다르게 선언만으로는 사용할 수 없다.
- new 키워드를 사용해 메모리를 할당해야 사용 가능하다.
public class GameManager : MonoBehaviour
{
public Player player;
public void Awake(){
player = new Player();
player.TakeDamage(100);
}
}
할당되지 않은 클래스 변수를 사용할려고 하면 NullReferenceException 발생
생성자
- 객체가 생성될 때 자동으로 호출되는 메소드 (new로 메모리를 할당할 때)
- 생성자는 클래스 이름과 동일하게 정의
생성자 메소드 오버로딩
- 생성자는 필요에 따라 매개 변수를 사용할 수 있다.
가비지 컬렉터는 객체의 메모리를 회수할 때 해당 객체의 종료자를 호출한다.
종료자가 호출되는 시점은 가비지 컬렉터가 동작할 때이며, 정확한 호출 시점을 예측하기 어렵다.
그래서 종료자는 가급적 사용하지 않는게 좋다
얕은 복사
- 클래스 변수는 힙 영역에 객체를 할당하고, 스택 영역에 있는 참조 변수가 힙 영역에 할당된 메모리 주소를 가르킨다.
- 아래의 코드처럼 작성할 경우, test01과 test02는 같은 메모리 공간을 가리키기 때문에 test01과 test02의 ID는 동일한 값이다.
깊은 복사
- 새로운 힙 메모리 영역을 만들어 클래스 변수가 사용하도록 한다.
- 아래의 코드처럼 작성할 경우, test01과 test02는 서로 다른 메모리 공간을 가르키기 때문에 test01과 test02의 ID는 다른 값이다.
this
- 클래스 내부에서 자기 자신의 변수나 메소드에 접근할 때 사용
this를 이용하여 생성자를 호출할 수 있다.
'Unity(유니티) > 유니티 공부' 카테고리의 다른 글
[Unity/C#] 다형성 (업 캐스팅, 메소드 오버라이딩, is/as 연산자) (0) | 2024.03.11 |
---|---|
[Unity/C#] 정보 은닉, 캡슐화, 상속 (base 연산자) (0) | 2024.03.11 |
[Unity/C#] 객체 지향 프로그래밍 (0) | 2024.03.09 |
[Unity/C#] 메소드 (0) | 2024.03.08 |
[Unity/C#] 상수, 열거형, Nullable, var (0) | 2024.03.04 |