-
[Unity]유니티 입문하기 6-7(캡슐화)프로그래밍 2023. 8. 10. 22:07
이전 글을 통해서 개념을 추상화해 클래스로 만들고, 클래스를 이용해 객체를 생성하는 법에 대해서 배웠습니다.
이번에는 객체 지향의 특성 중 캡슐화에 대해서 알아보도록 합시다.
캡슐화
캡슐화란 말 그대로 클래스를 이루는 정보를 캡슐에 담듯이 포장해 외부에 공개할 것과 공개하지 않을 것을 구분하는 것을 말합니다.
좀 더 자세히 말하자면, 클래스에서 캡슐화란 정보를 한 데 묶어두는 것과 멤버중 일부는 공개하고 일부는 은닉하는 것을 말합니다.
여기서 정보를 한 데 묶어둔다는 것은 클래스를 생성하는 단계에서 클래스 안에 여러 필드와 메서드를 모아놓았던 것을 말합니다.
그럼, 공개와 은닉은 어떻게 하는 것일까요?
접근 제한자
접근 제한자는 클래스의 외부에 해당 클래스의 멤버를 공개할지 아닐지를 결정하는 키워드입니다.
접근 제한자의 종류는 아래와 같습니다.
접근 제한자 설명 public 모든 외부에서 접근 가능 internal 같은 어셈블리 내에서는 접근 가능 protected 파생 클래스에서만 접근 가능 private 외부에서 접근 불가능 여태 코드에 자연스럽게 붙어있던 public이 바로 접근 제한자였습니다.
public은 말 그대로 제한 없이 접근이 가능한 제한자이고,
유니티에서 하나의 프로젝트가 하나의 어셈블리이므로, 외부 프로젝트에서 접근하는 것이 아닌 이상 internal과 public은 같은 의미를 가집니다.
protected에서 말하는 파생 클래스는 나중에 "상속"에 대해 배우며 언급될 테니 넘어가고,private는 외부에 일절 공개하지 않겠다는 뜻입니다.
public
우리가 public 키워드를 제일 처음 접했을 때는 유니티에서 스크립트를 생성했을 때입니다.
public class PlayerController : MonoBehaviour { }
유니티에서 스크립트를 생성했을 때, 위와 같이 자동으로 클래스가 생성됐던 것을 기억할 겁니다.
이때 class 앞에 붙은 public 덕분에, 다른 스크립트에서도 해당 클래스에 접근할 수 있습니다.
Human 클래스를 만들 때에도 멤버들의 앞에 public을 붙였기 때문에 다른 클래스에서 접근하여 필드의 값을 수정하거나 메서드를 실행할 수 있었던 것입니다.
private
그럼 반대로 private 키워드를 사용한다면 외부에서 접근이 불가능해지겠죠.
이전 글에서 만들었던 Human 클래스로 예시를 들어봅시다.
class PlayerController : MonoBehaviour { void Start() { Human john = new Human(); john.name = "John"; } //이하생략 } class Human { private string name; private float height; private int age; private void Eat(){ Debug.Log("eat"); } private void Walk(){ Debug.Log("walk"); } private void Sleep(){ Debug.Log("sleep"); } }
Human 클래스에서 public을 전부 private로 바꾸고 PlayerController 클래스에서 접근해 보았습니다.
이후 프로젝트로 넘어가 컴파일해보면 이렇게 오류가 발생하며 접근이 불가능함을 알 수 있습니다.
private 키워드를 통해 Human 클래스의 멤버들을 외부로부터 숨겼기 때문에 접근 권한이 부족해 오류가 발생한 것입니다.
접근 제한자의 생략
그런데, 여태 예습을 해오면서 접근 제한자를 생략한 적도 많았습니다. 그럼 접근 제한자가 생략됐을 때에는 어떻게 되는 걸까요?
먼저, 접근 제한자가 생략된 멤버의 경우에는 자동으로 private으로 설정됩니다.
따라서 접근 제한자를 생략한 멤버의 경우에는 외부에서 해당 멤버에 접근할 수 없게 됩니다.
이와는 다르게 접근 제한자가 생략된 클래스의 경우에는, 자동으로 internal로 설정되게 됩니다.
따라서 저희가 Human 클래스에 접근 제한자를 붙이지 않았음에도 같은 프로젝트 내의 다른 클래스에서 접근이 가능했던 것이죠.
다음 글에서는 캡슐화의 또 다른 대표적인 예시인 속성에 대해서 알아보겠습니다.
'프로그래밍' 카테고리의 다른 글
[Unity]유니티 입문하기 6-9(상속) (0) 2023.08.14 [Unity]유니티 입문하기 6-8(속성) (0) 2023.08.11 [Unity]유니티 입문하기 6-5(클래스 - 추상화) (0) 2023.08.06 [Unity]유니티 입문하기 6-4(객체 지향 언어란?) (0) 2023.08.04 [Unity]유니티 입문하기 6-3 번외(한번에 투사체 여러개 발사하기) (0) 2023.08.03