목표

  • 변수의 영역과 접근제어자에 대해 알아보자

변수 영역 (Scope)

  • 변수의 영역은 크게 전역과 지역으로 나눌 수 있다.
  • 전역의 경우 Class 전체에서 접근 가능한 변수이고, 지역의 경우 선언된 Code Block안에서만 유효한 변수이다.
  • 아래 예시를 보면, globalVal의 경우 클래스 전역에서 접근 가능하다.
  • Start 함수의 localVal를 보면, 지정해둔 Code Block안에서만 접근이 유효하다.
  • alphaVal의 경우 ShowGlobalAlpha 함수 내에서는 전역 변수 값으로 설정한 1이 출력된다.
  • ShowLocalAlpha에서 alphaVal의는 전역 변수와 파라미터로 사용된 지역변수의 이름이 동일하다. 이경우 지역 변수의 값 2가 출력된다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VariableScope : MonoBehaviour  
{ 
    private int globalVal = 0;  
    private int alphaVal = 1;

    // Start is called before the first frame update
    void Start()
    {
        {
            int localVal = 1;
            Debug.Log("this is local variable : " +  localVal);
        }
        ShowLocalAlpha(2);
    }

    void ShowGlobalVal()
    {
        Debug.Log("this is global variable : " +  globalVal);
    }

  void ShowGlobalAlpha()
  {
      Debug.Log("this is global variable : " +  globalVal);
      Debug.Log("this is local variable : " + alphaVal);
  }

  void ShowLocalAlpha(int alphaVal)
  {
      Debug.Log("this is global variable : " +  globalVal);
      Debug.Log("this is local variable : " + alphaVal);
  }

  // Update is called once per frame
  void Update()
  {

  }

}

접근제어자 (Access Modifiers)

  • 클래스를 생성하여 사용하다보면, public, private, protected 등 3가지 접근제어자를 주로 사용하게 된다.
  • public의 경우, 외부에서 접근 가능한 할 수 있다.
  • private의 경우, 외부에서 접근하지 할 수 없다.
  • protectoed의 경우, 해당 클래스를 상속받은 클래스에 대해서만 접근할 수 있다.
public class People  
{ 
    private int age = 0;  
    public String Name = "Susan";  
    protected int gender = 1;

    public int GetAge()
    {
        return age;
    }

    public string GetName()
    {
        return Name;
    }
}
  • "사람"에 대해 클래스로 정의한 경우를 살펴보자.
  • 위 클래스에서는 멤버 변수를 살펴보면 나이(private)와 성별(protected)에 대해서는 외부에서 접근할 수 없다.
  • 하지만 이름(public)에 대해서는 접근할 수 있다.
    • 다만 이렇게 public으로 접근 가능한 변수를 사용할 경우, getter와 setter를 사용한다.
  • 함수에 대해서 살펴보면, GetAge와 GetName에 접근할 수 있다.
  • People을 상속받은 Friend의 경우, protected인 age에 접근 가능하다.
public class Friend : People  
{
    public int GetAge()  
    {  
        return age;  
    }  
} 

+ Recent posts