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

C#에서 캡슐화(Encapsulation)를 구현하는 방법

C# 캡슐화란 무엇인가?

캡슐화(Encapsulation)는 접근 지정자(Access Specifier)를 사용하여 구현합니다. 접근 지정자는 클래스 멤버의 범위(scope)와 가시성(visibility)을 정의하며, 외부 코드가 클래스 내부 데이터에 직접 접근하는 것을 통제할 수 있게 해줍니다.

C#에서 지원하는 주요 접근 지정자는 다음과 같습니다.

  • public — 모든 외부 코드에서 접근 가능
  • private — 동일한 클래스 내부에서만 접근 가능
  • protected — 동일한 클래스 및 파생 클래스에서 접근 가능
  • internal — 동일한 어셈블리 내에서 접근 가능
  • protected internal — 동일한 어셈블리 또는 파생 클래스에서 접근 가능

private 접근 지정자로 이해하는 캡슐화

캡슐화는 private 접근 지정자의 예를 통해 가장 쉽게 이해할 수 있습니다. private으로 선언된 멤버 변수와 멤버 함수는 다른 함수나 객체로부터 완전히 숨겨지며, 오직 해당 클래스 내부의 메서드를 통해서만 접근할 수 있습니다. 이렇게 하면 데이터가 외부에서 임의로 변경되는 것을 방지하고, 클래스가 자신의 상태를 스스로 관리하도록 보장할 수 있습니다.

다음 예제에서는 사각형(Rectangle) 클래스의 lengthwidth 변수를 private 접근 지정자로 선언했습니다 −

예제

using System;

namespace RectangleApplication {
    class Rectangle {
        private double length;
        private double width;

        public void Acceptdetails() {
            length = 20;
            width = 30;
        }

        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();
        }
    }
}

코드 설명

위 예제에서 lengthwidthprivate으로 선언되었기 때문에 Main 메서드 같은 외부 코드에서 r.length = 50;처럼 직접 값을 변경할 수 없습니다. 대신 Acceptdetails(), GetArea(), Display()와 같은 public 메서드를 통해서만 간접적으로 접근하게 됩니다.

이것이 바로 캡슐화의 핵심입니다. 내부 데이터는 숨기고(정보 은닉), 필요한 기능만 공개된 인터페이스(public 메서드)를 통해 노출함으로써 데이터의 무결성을 보호하고 코드의 유지보수성을 높일 수 있습니다.