Deff_Dev

[C#] 객체와 한정자 본문

면접 질문 정리/C#

[C#] 객체와 한정자

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