Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 캡슐화(Encapsulation) 개념과 접근 지정자 활용법

C# 캡슐화란?

캡슐화(Encapsulation)는 객체 지향 프로그래밍의 핵심 원칙 중 하나로, 클래스 내부의 구현 세부 사항을 외부로부터 숨기고 필요한 부분만 공개하는 기법입니다. C#에서는 접근 지정자(Access Specifier)를 사용하여 캡슐화를 구현하며, 이를 통해 데이터 무결성을 보호하고 코드의 유지보수성을 크게 향상시킬 수 있습니다.

C#에서 지원하는 접근 지정자

C#은 다음과 같은 다섯 가지 접근 지정자를 제공합니다.

  • 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

코드 설명

위 코드에서 length와 width는 private으로 선언되었기 때문에 ExecuteRectangle 클래스의 Main 메서드에서 직접 접근할 수 없습니다. 대신 public 메서드인 Acceptdetails(), GetArea(), Display()를 통해서만 간접적으로 값을 설정하거나 조회할 수 있습니다.

이처럼 내부 데이터를 숨기고 공개된 인터페이스(메서드)를 통해서만 상호작용하도록 설계하는 것이 바로 캡슐화의 핵심입니다. 이러한 구조는 잘못된 값의 할당을 방지하고, 내부 구현이 변경되더라도 외부 코드에 미치는 영향을 최소화하는 장점이 있습니다.