반응형
접근 한정자(Access Modifier)
접근 한정자는 클래스, 구조체, 필드, 메소드 델리게이트 등에 대해서 노출 수준을 설정하는 것입니다.
일반적으로 외부로부터 노출할 필요가 없는 경우에는 private
접근 한정자를, 외부로부터 노출할 필요가 있는 경우에는 public
접근 한정자를 사용합니다. 클래스 내부에서 접근 한정자를 설정하지 않은 필드, 메소드 등은 private
접근 한정자로 설정됩니다.
객체 지향 프로그래밍의 특성 중 캡슐화(Encapsulation)라는 특성 때문에 접근 한정자를 설정하는 것은 매우 중요합니다. 필요한 부분만 공개하고 불필요한 부분은 숨김으로써 소프트웨어 간의 결합도를 낮추고 응집도를 높일 수 있습니다. 결합도를 낮추고 응집도를 높이는 소프트웨어 설계를 하려면 변경되기 쉬운 것은 감추고 변하기 어려운 것은 드러내면 됩니다.
다음은 접근 한정자를 표로 정리한 것입니다.
접근 한정자 | 설명 |
---|---|
public | 외부 또는 내부에서 접근 가능 |
protected | 파생 클래스에서만 접근 가능 |
private | 동일한 클래스/구조체에서만 접근 가능 |
internal | 동일한 어셈블리에 있는 코드에 대해서만 접근 가능 |
다음은 접근 한정자의 예제 코드입니다.
class Clock
{
private int hour; // 시간
private int minute; // 분
public void SetHour (int hour)
{
if (hour < 0 || hour > 23) // 0 ~ 59 범위에 대해서만 값을 받아들임
{
throw new Exception ("Hour must be between 0 and 23");
}
this.hour = hour; // 시간은 외부에서 직접 접근 불가능
}
public void SetMinute (int minute)
{
if (minute < 0 || minute > 59) // 0 ~ 59 범위에 대해서만 값을 받아들임
{
throw new Exception ("Minute must be between 0 and 59");
}
this.minute = minute; // 분은 외부에서 직접 접근 불가능
}
// 동일한 어셈블리에 있는 코드에 대해서만 호출 가능
internal void PrintTime ()
{
Console.WriteLine ("Time : " + hour.ToString ("00") + ":" + minute.ToString ("00"));
}
}
public static void Main (string[] args)
{
try
{
Clock clock = new Clock ();
clock.SetHour (1);
clock.SetMinute (20);
clock.PrintTime ();
clock.SetHour (15);
clock.SetMinute (45);
clock.PrintTime ();
clock.SetHour (25); // 예외 발생
clock.SetMinute (30);
clock.PrintTime ();
}
catch (Exception e)
{
Console.WriteLine (e.Message);
}
}
반응형
댓글