using System;
using UnityEngine;
public class Character
{
// static, 접근 제한자
public static int Num { get; private set; }
public string Name { get; private set; }
public Character(string name) // 생성자
{
this.Name = name;
Num++;
}
}
public class Test : MonoBehaviour
{
private void Start()
{
// 객체 생성
Character deff = new Character("Deff");
Character dev = new Character("Dev");
Debug.Log(deff.Name);
Debug.Log(dev.Name);
Debug.Log(Character.Num); // static 접근
}
}
- 객체란 무엇인가요? 클래스와 어떤 연관이 있나요?
- 객체란 클래스를 이용하여 생성된 Instance를 의미한다.
- 클래스가 정의되어 있어야 객체를 생성할 수 있으며, 객체는 클래스 안에 구현된 속성과 메소드를 실제로 사용하는 매개체이다.
- 위 예시를 보면 deff는 Character가 될 수 있지만 deff는 dev가 될 수 없다.
- 생성자에 대해 간단하게 설명해주세요.
- 생성자는 객체가 생성될 때, 실행되는 함수로 주로 클래스의 초기화를 담당한다.
- 접근제한자란 무엇이며, 각각 어떤 차이가 있는지 비교해서 설명해주세요.
- 접근제한자는 클래스 내 멤버의 접근성을 설정하는 키워드로, 멤버 변수와 함수 앞에 작성한다. (지역 변수에는 작성할 수 없다. Only 필드, 메소드)
- public: 외부에서 접근 가능, 하위 클래스에서 접근 가능
- protected: 외부에서 접근 불가능, 하위 클래스에서 접근 가능
- private: 외부 및 하위 클래스에서 접근 불가능
- internal: 동일 어셈블리 내에서 접근 가능, 다른 어셈블리에서는 접근 불가능 (C# 스크립트에서는 public과 같지만, 다른 언어에서는 private과 유사함)
- protected internal: 동일 어셈블리 내에서는 접근 가능, 다른 어셈블리에서는 상속받은 클래스 내에서만 접근 가능 (C# 스크립트에서는 protected와 같지만, 다른 언어에서는 private과 유사함)
- private protected: 동일 어셈블리 내의 상속받은 클래스에서만 접근 가능 (C# 스크립트에서는 protected와 같지만, 다른 언어에서는 private과 유사함)
- static 한정자에 대해 설명해주세요.
- static은 정적 키워드로, 변수나 함수 앞에 static을 붙이면 해당 변수나 함수는 프로그램 시작 시, 메모리에 할당된다. 따라서 객체를 생성하지 않고도 해당 변수나 함수에 접근할 수 있게 해준다.
- 새로운 객체를 생성하더라도 정적으로 선언되어있는 필드나 메소드는 동일한 메모리를 사용하여 공통적인 데이터로 관리할 수 있다.
- 하지만 정적 필드나 메소드는 프로그램이 종료할 때까지 메모리에 할당되어 있으므로, 많이 선언할 경우, 성능에 영향을 줄 수 있다. 따라서 꼭 필요한 부분에만 사용하는 것이 좋다.