개발 저장소/개발 지식 저장소
[C#] 접근 한정자(private, protected)가 필요한 이유
이거비버
2023. 2. 4. 12:14
반응형
객체 지향 프로그래밍의 3대 특성(은닉성, 상속성, 다형성) 중 은닉성은 '최소한의 기능만을 노출하고 내부를 감추는 것'을 얘기한다.
왜 기능들을 감춰야 할까?
여러 클래스에서 널리 쓰이게 하면 편하지 않을까?
예시를 들어보자면,
어떠한 난방장치를 만드는데 기준 온도가 10도~30도 사이라고 해보자.
난방장치를 사용하는 사용자는 이 장치의 온도를 지정된 범위 내에서만 조절할 수 있어야 한다.
그랬을때 이 장치는 아래와 같이 설계 되어야 한다.
실제 온도를 조절하는 회로 또는 배선 : 변수
사용자가 온도를 조절할 수 있게 해주는 버튼 : 메소드
만약 사용자가 회로, 배선을 잘 못 건드려서 온도가 100도까지 올라가면 안되기 때문에, 설계자는 이 회로나 배선을 건들지 못하도록 감춰야 한다.
즉 변수를 감춰야 한다.
그리고 버튼이라는 메소드에 온도 조절에 대한 제한을 두고 사용자에게 이 버튼을 제공함으로써 사용자에게 기획에 맞는 온도 조절 기능을 제공함과 동시에 사고를 방지할 수 있는 것이다.
아래에 예시 코드를 작성해봤다.
using System;
namespace Hello
{
class Heater // 온도 조절 클래스
{
protected int temperature; // 변수 은닉, protected로 파생 클래스에서 활용 가능
public void SetTemperature(int temperature) // temperature에 접근할 수 있는 메소드 제공
{
if (temperature < 0 || temperature >30)
{
throw new Exception("조절할 수 있는 온도 범위를 초과하였습니다.");
}
this.temperature= temperature;
}
internal void Update()
{
Console.WriteLine($"온도 변경 : {temperature}");
}
}
class MainApp
{
static void Main(string[] args)
{
int k;
while (true)
{
try
{
Heater heater = new Heater();
Console.Write("온도 입력 : ");
k = Convert.ToInt32(Console.ReadLine());
heater.SetTemperature(k);
heater.Update();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}
결과 화면은 다음과 같다.

반응형