작성
·
562
1
안녕하세요. 9강 마지막 요약 부분에서 '실제 메모리에 존재하는 것과는 무관하게 getter,setter를 만들 수 있다.' 라고 말씀해주신 부분에 대해서 질문 드립니다.
쭉 이어서 설명해주신 것처럼, 코틀린으로 작성한 getter.setter가 byte코드 변환 시 함수로 생성되는데요. 그럼 실제 메모리에는 함수로 존재하는거 아닌가요?..
아니면 코틀린에서 그부분은 캡슐화?.. 처럼 내부구현을 가려놔서 사용자인 개발자들은 메모리에 없는 것처럼 느낀다? 라고 말씀해주신 걸까요??
궁금해서 질문드려봅니다!
답변 1
2
안녕하세요 Ares님!!! 크으~~ 좋은 질문 감사드립니다!! 🙏🙏
제가 '메모리에 존재하는 것과 무관하게 getter / setter를 만들 수 있다'고 표현한 것은
1) Heap Area에 할당되는 필드가
없더라도 함수로써 getter와 setter를 만들 수 있다는 점 2) 그것을 가능하게 하는 custom getter와 custom setter의 개념을 강조하는 부분이었습니다!
원래 getter와 setter라는 함수가 존재하는 필드를 감싸둔 느낌인 반면, (아래와 비슷한 코드)
class Person(
var name
)
// Main
val p = Person("A")
p.name // name이라는 필드를 가져오는 getter
p.name = "B" // name이라는 필드의 값을 업데이트 하는 setter
custom getter 혹은 custom setter를 사용하면 메모리에 존재하는 필드와는 대응되지 않는 함수가 존재할 수 있는거죠!
class Person(
var name
) {
val newName: String
get() = this.name + "ABC"
}
// Main
val p = Person("A")
p.name // name이라는 필드를 가져오는 getter
p.name = "B" // name이라는 필드의 값을 업데이트 하는 setter
// newName이라는 필드는 없다!!!
// 하지만 newName이 메모리에 존재하는 것과 무관하게 (있건 없건~) 밖에서는 getter 함수를 사용한다.
p.newName
말씀해주신것처럼 getter 함수와 setter 함수 자체는 메모리에 로드되어 실행될거에요!!!
다만 클래스에 있는 getter나 setter를 호출하는 입장에서 해당 getter, setter에 대응되는 필드가 있건 없건 신경쓸 필요가 없기도 하고~ 이런 방식으로 custom getter나 custom setter를 만들 수 있다는 것을 짚어드리고 싶었습니다!!!
물론! 이런 방식은 Java에서도 가능합니다!! ㅎㅎㅎㅎ
public class Person {
private String name;
public String getNewName() {
return this.name + "ABC"
}
}
// Main
Person p = new Person("A")
p.getNewName();
"실제 메모리에 존재하는" 이라는 표현 보다는 "필드가 있건 없건~" 이라는 표현이 조금 더 명확했을 것 같네요 ㅎㅎㅎㅎ
Ares님, 좋은 질문 해주셔서 감사드립니다! 답변이 되었으면 좋겠습니다!
오늘도 행복한 하루 되세요~~ 감사합니다!!! 🙇🙇
답변 감사합니다!! 회사에서 다음주부터 코틀린으로 프로젝트를 들어가는데,
초기 지식 쌓는데 큰 도움이 되고 있습니다!! ㅎㅎ 태현님도 행복한 하루 되세요!