접근 한정자 |
설명 |
public |
클래스의 내부/외부 모든 곳에서 접근할 수 있다. |
protected |
클래스의 외부에서는 접근할 수 없지만, 파생 클래스에서는 접근이 가능함. |
private |
클래스의 내부에서만 접근할 수 있다. 파생 클래스에서도 접근이 불가능함. |
internal |
같은 어셈블리에 있는 코드에서만 public 으로 접근할 수 있다. 다른 어셈블리에 있는 코드에서는 private와 같은 수준의 접근성을 가짐. |
protected internal |
같은 어셈블리에 있는 코드에서만 protected로 접근할 수 있다. 다른 어셈블리에 있는 코드에서는 private와 같은 수준의 접근성을 가짐. |
private protected |
같은 어셈블리에 있는 클래스에서 상속받은 클래스 내부에서만 접근이 가능. |
sealed |
상속을 막는 한정자 해당 한정자를 수식하는 클래스를 상속받으려고 시도하면 컴파일 에러 출력 |
접근 한정자로 수식하지 않으면 private와 같은 공개 수준을 가짐 |
/*
실행
Turn on water : 20
Turn on water : -2
Out of temperature range
*/
namespace AccessModifier
{
class WaterHeater
{
protected int temperature;
public void SetTemperature(int temperature)
{
if (temperature < -5 || temperature > 42)
{
throw new Exception("Out of temperature range");
}
this.temperature = temperature;
}
internal void TurnOnWater()
{
Console.WriteLine($"Turn on water : {temperature}");
}
}
internal class Program
{
static void Main(string[] args)
{
try
{
WaterHeater heater = new WaterHeater();
heater.SetTemperature(20);
heater.TurnOnWater();
heater.SetTemperature(-2);
heater.TurnOnWater();
// 예외가 발생하여, catch 블록으로 실행 위치가 이동됨
heater.SetTemperature(50);
heater.TurnOnWater();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}