Deff_Dev

[Unity/C#] 클래스 본문

Unity(유니티)/유니티 공부

[Unity/C#] 클래스

Deff_a 2024. 3. 9. 00:38

해당 포스팅은 고박사님의 유니티 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로 메모리를 할당할 때)
  • 생성자는 클래스 이름과 동일하게 정의

생성자 메소드 오버로딩

  • 생성자는 필요에 따라 매개 변수를 사용할 수 있다.

 

 

가비지 컬렉터는 객체의 메모리를 회수할 때 해당 객체의 종료자를 호출한다.

종료자가 호출되는 시점은 가비지 컬렉터가 동작할 때이며, 정확한 호출 시점을 예측하기 어렵다.

 

그래서 종료자는 가급적 사용하지 않는게 좋다


얕은 복사

  • 클래스 변수는 힙 영역에 객체를 할당하고, 스택 영역에 있는 참조 변수가 힙 영역에 할당된 메모리 주소를 가르킨다.
  • 아래의 코드처럼 작성할 경우, test01test02는 같은 메모리 공간을 가리키기 때문에 test01test02의 ID는 동일한 값이다.


깊은 복사

  • 새로운 힙 메모리 영역을 만들어 클래스 변수가 사용하도록 한다.
  • 아래의 코드처럼 작성할 경우, test01test02는 서로 다른 메모리 공간을 가르키기 때문에 test01test02의 ID는 다른 값이다.


this

  • 클래스 내부에서 자기 자신의 변수나 메소드에 접근할 때 사용

 

 

this를 이용하여 생성자를 호출할 수 있다.