[TIL] - 필드와 프로퍼티

김주형·2023년 1월 16일
0

TIL

목록 보기
28/37

Reference


프로퍼티란?

객체지향의 사실과 오해 학습 중 상태와 식별자 부분에서 '프로퍼티'가 자주 등장하다보니 이해하기에 헷갈리는 부분이 있었습니다.

객체지향에서 상태 : 객체가 가지고 있는 정보의 집합

  • 정적인 프로퍼티 + 동적인 프로퍼티 밸류

프로퍼티 (property)

  • 객체의 상태를 구분하는 ‘모든’ 특징 (p50)
  • 속성 + 링크 의 조합 (p51)
    • 속성(attribute) : 객체를 구성하는 단순한 값 (ex. 사람 객체의 ‘키’와 ‘위치’)
    • 링크 : 그림 2.2, 객체와 객체 사이 의미있는 연결 (의존성을 의미한다고 유추)

프로퍼티라는 개념은 본질적으로 무엇인지 궁금해서
구글링 해보았고 C#, javascript, swift등의 객체지향 언어에서 폭 넓게 사용되는 개념이며 '프로퍼티란 객체가 가지는 고유한 속성을 칭하는 단어'라고 설명되었음을 알게 되었습니다.

그리고 이 속성의 실체를 담는 곳은 '필드(멤버 변수)'로 구분한다고 합니다.

각 언어 별로 사소한 차이가 있는 것 같으니 저에게 익숙한 자바로 예시를 들어보자면

public class User {

    private int age;
    private String name;

    public User(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public int getName() {
        return name;
    }

    public void setName(int name) {
        this.name = name;
    }
}
  • User는 age와 name을 속성(프로퍼티)으로 가지고 있는 객체
  • getter와 setter로 실체(필드)에 접근할 수 있음
    예) age = 20, name = "joohyeong"

식별자 와의 차이

식별자 정의 : 프로그램 구성 요소인 변수, 상수, 배열, 메소드, 클래스 등을 구분하기 위해 사용자가 정의하는 이름

식별자(p57)

  • 객체를 서로 구별할 수 있는 ‘특정한’ 프로퍼티
  • 식별자는 프로퍼티에 포함되어 있는 특정한 개념으로 분류된다고 유추됨

동일한 이름과 나이를 가진 객체가 있다는 예시를 들어보겠습니다.

public class KimHae {
	private int age = 20;
    private String name = "joohyeong";
}
public class KyungJu {
	private int age = 20;
    private String name = "joohyeong";
}

이름과 나이가 같지만 김해김씨와 경주김씨인 사람 객체가 있습니다.
이 두 객체를 구별하는 특정한 프로퍼티를 '식별자'라고 합니다.

따라서 식별자를 의미하는 특정한 프로퍼티(속성)란 지정된 객체의 이름, 정확히는 '타입명'이라고 보입니다.

이를 검증하기 위해 임의로 이미 생성되어 있는 클래스와 동일한 이름의 클래스 생성을 시도해본 결과는 다음과 같습니다.

createObject

identifier

왜 조영호님은 프로퍼티라는 용어를 사용했을까?

'시스템을 설계할 때 단순한 값과 객체의 차이점을 명확하게 구분하고 명시적으로 표현하는 것이 매우 중요하다.' 라는 것을 설명하기 위해 라고 생각합니다.

서로 다른 인스턴스가 일치하는지 확인하기 위해 동등성과 동일성이 설명되어 있고, 불변과 가변 상황에서의 일치성 검사를 위해 그 차이점을 명확히 이해해야 하며

대부분의 사람들이 객체지향 프로그래밍 언어에서 값과 객체의 차이점을 클래스를 이용한 구현때문에 혼란스러워 한다고 소개되어 있습니다.

값과 객체 모두 클로스로부터 생성되기 때문에 문맥에 따라 의미가 혼란스러워 질 수 있는 점을 주의해야 한다고 이해했습니다.

이런 오해의 소지를 줄이기 위해 식별자를 지닌 참조 객체(reference object)엔티티(entity),
그리고 식별자를 가지지 않는 값 객체(value object)의 존재가 소개 되어 있습니다.

상속, 캡슐화, 다형성에 비해 식별자가 간과하기 쉽지만 객체지향의 표현력을 높이는데 중요한 역할임을 유의해야 하기 때문에 자세한 설명을 위해 사용했다고 보입니다.

profile
근면성실

0개의 댓글