-
[Unity]유니티 입문하기 6-8(속성)프로그래밍 2023. 8. 11. 19:35
이전 글에서는 객체 지향의 속성 중 하나인 캡슐화에 대해서 간단히 알아보았습니다.
이번에는 캡슐화의 또 다른 예시인 속성에 대해서 알아보겠습니다.
속성
앞에서 필드에 대해서 설명할 때 필드는 객체의 속성이라고 설명했었습니다.
하지만 여기서 말한 속성은 지금 말할 속성과는 달리, 프로그래밍 용어가 아니라 우리가 실생활에서 사용하는 단어였습니다.
이제부터 말할 속성(Property)는 프로그래밍 용어이며, 필드와 메서드 처럼 클래스를 구성하는 멤버 중의 하나입니다.
즉, 이제부터 말하는 속성은 클래스, 메서드와 같이 C#의 문법 요소라고 생각하시면 됩니다.
속성의 정의
속성은 어떤 필드의 값에 접근하거나 값을 수정하는 메서드입니다.
접근제한자 자료형 속성의이름 { get { return 필드명; } set { 필드명 = value; } }
이제는 위의 용어들을 일일히 설명해줄 필요는 없겠죠.
속성에는 get 접근자와 set접근자가 있습니다.
get 접근자는 외부에서 해당 필드의 값을 가져오는 역할을 하고,
set 접근자는 반대로 해당 필드의 값을 변경하는 역할을 합니다.
예를 들어, 변수 age에 접근하기 위한 속성 Age를 만들면 아래와 같습니다.
private int age; public int Age { get { return age; } set { age = value; } }
이렇게 속성을 정의해준다면, 아래와 같이 Age를 호출할 때 자동으로 get 접근자 안의 코드가 실행되며, 결과적으로 age 필드의 값이 반환됩니다.
int result = Age;
이를 응용해서 return age; 를 return age +1;로 바꾸는 등의 변형을 가하면 해당 식을 거친 값이 나오게 됩니다.
Age = 1;
반대로 이렇게 Age에 값을 대입하려고 하면, 자동으로 set 접근자 안의 코드가 실행되어, age 필드의 값이 수정됩니다.
set 접근자 안에 정의한 적 없는 변수인 value가 있는 것을 볼 수 있는데요, 이는 미리 정의된 변수로 외부에서 할당하려고 하는 값을 임시로 저장하기 위한 변수입니다.
이 경우에도 똑같이 set 접근자 안의 코드를 age = value;에서 age = value +1;로 바꾸는 등의 변형을 가하면, 입력값이 필드에 저장되기 전에 해당 식을 거쳐서 나오게 됩니다.
외부에서 객체의 필드에 직접 접근하는 것은 여러모로 문제가 생길 수 있으므로, 아래와 같이 필드마다 속성을 정의하고 속성을 이용해 필드에 접근하는 것이 좋습니다.
class Human { private string name; private float height; private int age; public string Name { get { return name; } set { name = value; } } public int Age { get { return age; } set { age = value; } } public float Height { get { return height; } set { height = value; } } }
속성의 역할
그렇다면 이러한 속성은 무엇을 위해 존재하는 것일까요?
캡슐화의 예시라고 소개했던 것처럼, 속성의 역할은 필드를 외부에 제한적으로 공개하는 것에 있습니다.
예를 들어, 아래와 같이 속성에서 set 접근자를 없애면 Age 속성은 age의 값을 수정할 수 없게 되고, 이 말인 즉 외부에서 age의 값을 읽을 수는 있어도 수정할 수는 없는 읽기 전용의 변수가 되어버립니다.
class Human { private int age; public int Age { get { return age; } } }
물론 반대로 get만 없애고 set을 남길수도 있으며, 이렇게 하면 외부에서는 age의 값을 수정할 수는 있지만 age의 값이 무엇인지는 알 수 없는 수정 전용의 필드가 되게 됩니다.
그런가 하면 get 접근자와 set 접근자의 접근 수준을 다르게 설정할 수 도 있습니다.
class Human { private int age; public int Age { get { return age; } private set { age = value; } } }
위와 같이 코드를 작성하게 되면, 외부에서는 get 접근자에 접근할 수 있지만, set 접근자에 접근하는 것은 내부에서만 가능하게 됩니다.
'프로그래밍' 카테고리의 다른 글
[Unity]유니티 입문하기 6-10(클래스의 형변환) (0) 2023.08.17 [Unity]유니티 입문하기 6-9(상속) (0) 2023.08.14 [Unity]유니티 입문하기 6-7(캡슐화) (0) 2023.08.10 [Unity]유니티 입문하기 6-5(클래스 - 추상화) (0) 2023.08.06 [Unity]유니티 입문하기 6-4(객체 지향 언어란?) (0) 2023.08.04