인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

terry9611님의 프로필 이미지
terry9611

작성한 질문수

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

코틀린 val 질문

작성

·

15

0

클래스 속성에 val로 정의할 경우 속성 값을 외부로 반환할 때 getter 메소드를 만들어서 반환하시나요? 아니면 속성 그대로 인스턴스.속성 으로 바로 반환하시나요??

만약에 후자일 경우 캡슐화 위반이 아닌지 생각이 듭니다...

답변 2

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요 terry9611님! 좋은 질문 감사드립니다!

저는 private 프로퍼티를 만들고 외부 노출이 필요한 경우에 private 구문을 없애 (default가 public 이니까요) 외부에서 getter를 사용하는 편입니다.

 

"후자일 경우 캡슐화 위반" 이라고도 표현해 주셨는데, 아래 캡슐화가 무엇인지에 따라 사람마다 다르게 느껴질 수 있을 것 같습니다! 제 개인적으로는

public class Person {
  private String name;

  public String getName() {
    return this.name;
  }
}

위의 Java 코드에서 getter가 꼭 필요하다면 캡슐화 위반으로 느껴지지는 않아요!

마찬가지로 위의 자바코드와 완전히 동일한

class Person(val name: String)

역시 캡슐화 위반으로 느껴지지 않는 것 같습니다.

 

감사합니다. 🙇 또 궁금한 점 있으시면 편하게 질문 남겨주세요~!!

0

안녕하세요, 인프런 AI 인턴입니다. terry9611님!

코틀린에서 val로 속성을 정의할 경우, 해당 속성은 읽기 전용으로 설정되며, 생성 이후 값을 변경할 수 없습니다. 코틀린에서는 이러한 val 속성을 정의하면 기본적으로 자동으로 getter가 생성됩니다. 따라서, “인스턴스.속성” 형식으로 값을 직접 가져올 수 있으며, 이는 코틀린의 설계 철학 중 하나인 간결성을 지원하는 방식입니다.

캡슐화 측면에서 코틀린의 접근 방식은 자바와 약간 다를 수 있습니다. 자바에서는 명시적으로 getter를 정의하고 private 프로퍼티에 접근하는 것이 일반적인 패턴인 반면, 코틀린은 기본적으로 읽기 전용 프로퍼티를 통해 캡슐화를 지원합니다. 즉, 다른 객체에 의해 값을 변경할 수 없는 한, 값이 외부로 반환되는 것은 캡슐화 측면에서 큰 문제가 되지 않습니다.

추가로, 필요에 따라 커스텀 getter를 만들어 동작을 수정할 수도 있습니다. 하지만 기본적인 캡슐화 원칙은 val 속성의 불변성을 통해 이미 잘 지켜지고 있으므로, 일반적으로는 추가적인 getter를 정의하지 않아도 안전하게 사용할 수 있습니다.

이와 관련된 좀 더 자세한 설명을 원하신다면, 아래 게시물들이 도움이 될 수 있습니다:

이 게시물에서는 코틀린에서 valvar를 사용할 때의 가시성 범위와 관련된 상호작용, 그리고 프로퍼티를 다루는 방법을 좀 더 깊이 있게 탐구할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

terry9611님의 프로필 이미지
terry9611

작성한 질문수

질문하기