C#

C# - 캡슐화

Dev_Jen 2025. 7. 1. 11:03
반응형

✅ 캡슐화(Encapsulation)란?

"객체의 내부 상태(데이터)를 외부로부터 숨기고, 허용된 방식으로만 접근하도록 제한하는 것."


✅ 핵심 요약

항목설명
목적 데이터를 보호하고, 잘못된 접근/수정을 방지
수단 접근 제한자 (private, public, protected 등) 사용
결과 유지보수성 증가, 의도치 않은 버그 감소, 코드 안정성 향상

✅ 왜 중요한가?

  • 모든 데이터에 마음대로 접근할 수 있다면?
    • 예: 체력이 음수로 떨어진다거나, 돈이 마이너스가 되는 상황 발생
  • 캡슐화를 통해 이런 비정상적인 상황을 차단할 수 있음

✅ 예제 코드 (C# 기준)

❌ 잘못된 설계: 데이터가 완전 노출됨

public class Player
{
    public int hp;  // 외부에서 직접 접근 가능
}

Player p = new Player();
p.hp = -100; // 💥 논리적으로 말이 안 되는 상태

✅ 캡슐화 적용 예시

public class Player
{
    private int hp = 100; // 외부에서 직접 접근 불가

    public int HP
    {
        get { return hp; }
        set
        {
            if (value >= 0) hp = value;
        }
    }
}
  • 이제 외부에서는 HP 프로퍼티로만 접근 가능
  • if (value >= 0) 같은 검증 로직도 넣을 수 있어

✅ Unity에서 캡슐화 예시

public class Enemy : MonoBehaviour
{
    [SerializeField] private float speed = 3.0f;

    public void SetSpeed(float value)
    {
        if (value >= 0)
            speed = value;
    }

    public float GetSpeed()
    {
        return speed;
    }
}

SerializeField로 에디터에서는 보이게 하되,
스크립트에서는 private하게 유지하는 것도 일종의 캡슐화야


✅ 캡슐화를 위한 주요 키워드 정리

키워드설명
private 외부 접근 불가, 내부에서만 사용 가능
public 외부 접근 허용
protected 자식 클래스는 접근 가능
internal 같은 어셈블리 내에서는 접근 가능
property (get, set) 안전한 접근 인터페이스 제공

✅ 요약 한 줄

캡슐화는 “객체 내부의 상태를 보호하고, 오직 허용된 방식으로만 외부에 접근하게 만드는 것”이다.

 

 

이 내용 또한 회사 면접에서 나왔던 내용이다 개발할떄 잘만 써놓고 용어를 몰라서... 잘 모르곘다고 대답했었다..ㅋㅋㅋㅋㅋ...바보..앞으로는 절대 그럴 일 없겠다..하하...

반응형