[TIL] Unity - 캡슐화(Encapsulation) - day 65

뭉크의 개발·2023년 10월 20일
0

Unity - Camp

목록 보기
34/70
post-thumbnail

🐧 들어가기 앞서

협업을 진행하다보면, 캡슐화가 되지 않은 코드를 볼 수 있다.

캡슐화가 좋다는 것은 알지만, 나도 정확하게 설명할 수 있게 공부를 했다.


🐧 오늘 배운 것

  1. 캡슐화
  2. 프로퍼티

🐧 기억할 것 & 진행

캡슐화(Encapsulation)란?

  • 객체 지향 프로그래밍의 핵심 원칙 중 하나로, 데이터와 데이터를 조작하는 메서드를 하나의 '클래스'라는 캡슐로 묶는 것을 말한다.

  • 이를 통해 데이터가 외부에서 직접 접근되는 것을 방지하고, 오직 클래스 내부의 메서드를 통해서만 데이터에 접근할 수 있게 한다.

  • 이렇게 함으로써 데이터의 안정성과 유지보수성이 향상된다.

  • 만약 필요한 경우 클래스 내부 구현은 변경할 수 있지만, 외부에 공개된 메서드(인터페이스)는 동일하게 유지될 수 있어 코드 변경에 따른 영향을 최소화할 수 있다.

Unity에서 C# 캡슐화 사용하기

Unity 게임 개발에서도 C# 언어의 캡슐화 원칙을 활용할 수 있다.

public class Player : MonoBehaviour
{
    private int health; // Private variable

    // Public method to access the private variable
    public int GetHealth()
    {
        return health;
    }

    // Public method to modify the private variable
    public void SetHealth(int value)
    {
        if (value < 0)
            health = 0;
        else
            health = value;
    }
}
  • 위 코드에서 health 변수는 private으로 선언되었으므로 클래스 외부에서 직접적으로 접근할 수 없다.
    대신 GetHealth()와 SetHealth(int value)라는 메서드를 통해서만 체력 정보에 접근하거나 수정할 수 있다.

  • 특히 SetHealth(int value) 메서드에서 입력값이 음수인 경우 체력 값을 0으로 설정하여, 체력 값이 음수가 되는 상황을 방지한다. 이처럼 캡슐화를 통해 데이터의 유효성을 보장하는 로직을 추가할 수 있다.

결론

  • 캡슐화는 객체 지향 프로그래밍의 중요한 원칙으로, 데이터와 그 데이터를 조작하는 메서드를 하나로 묶어 코드의 안정성과 유지보수성을 높인다.
  • Unity에서 C#을 사용하여 게임 개발할 때에도 이 원칙은 그대로 적용되며, 이를 통해 더 안정적이고 관리하기 쉬운 코드를 작성할 수 있다.

프로퍼티 사용

  • C#에서는 프로퍼티(Property)라는 기능을 제공하여 필드(Field)에 직접 접근하는 것처럼 보이지만 실제로는 메서드를 통해 접근하도록 하는 방법을 제공한다.

  • 이를 사용하면 GetHealth()와 SetHealth(int value) 메서드를 간결하게 작성할 수 있다.

public class Player : MonoBehaviour
{
    private int health; // Private variable

    // Property to access and modify the private variable
    public int Health
    {
        get { return health; }
        set { health = (value < 0) ? 0 : value; }
    }
}
  • 위 코드처럼 작성하면 Health 프로퍼티를 통해 체력 정보에 접근하거나 수정할 수 있다. 이렇게 하면 코드가 더 간결해지고 가독성이 높아진다.
Player player = new Player();
player.Health = 10; // Set health to 10
int currentHealth = player.Health; // Get current health

위와 같이 사용할 수 있으며, 여전히 health 필드에 직접 접근하는 것은 불가능하다.


🐧 내일 할 일

  • 상속, 다형성 알아보기
  • 프로젝트 마무리 하기

0개의 댓글