목표
변수 영역 (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;
}
}