캡슐화(Encapsulation)는 객체 지향 프로그래밍(OOP)의 핵심 원칙 중 하나로, 클래스 내부의 구현 세부 사항을 외부로부터 숨기고 데이터를 보호하는 기법입니다. C#에서는 접근 제한자(Access Specifier)를 사용하여 캡슐화를 구현할 수 있습니다.
C#에서 지원하는 접근 제한자
C#은 다음과 같은 5가지 접근 제한자를 제공합니다.
- public – 모든 클래스와 객체에서 접근 가능
- private – 동일한 클래스 내부에서만 접근 가능
- protected – 해당 클래스 및 파생 클래스에서만 접근 가능
- internal – 동일한 어셈블리(프로젝트) 내에서만 접근 가능
- protected internal – 동일한 어셈블리 또는 파생 클래스에서 접근 가능
캡슐화의 대표적인 예로 private 접근 제한자를 들 수 있습니다. private으로 선언된 멤버 변수와 멤버 함수는 외부의 다른 함수나 객체에서 직접 접근할 수 없으며, 오직 해당 클래스 내부에서만 사용할 수 있습니다.
아래 예제에서는 length와 width 변수를 private으로 선언하여 외부로부터 숨기고, public 메서드를 통해서만 값을 설정하거나 조회하도록 구현했습니다.
예제 코드
using System;
namespace RectangleApplication {
class Rectangle {
private double length;
private double width;
public void Acceptdetails() {
length = 10;
width = 15;
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
실행 결과
Length: 10 Width: 15 Area: 150
위 예제에서 Rectangle 클래스의 length와 width는 private이므로, Main 메서드에서 직접 접근할 수 없습니다. 대신 Acceptdetails(), GetArea(), Display() 같은 public 메서드를 통해서만 간접적으로 다룰 수 있습니다.
이처럼 캡슐화를 활용하면 데이터의 무결성을 보장하고, 잘못된 값의 할당을 방지하며, 내부 구현 변경 시에도 외부 코드에 영향을 최소화할 수 있습니다. 이는 유지보수성과 코드 안정성을 높이는 데 큰 도움이 됩니다.