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

비가싫어요님의 프로필 이미지
비가싫어요

작성한 질문수

Readable Code: 읽기 좋은 코드를 작성하는 사고법

객체 설계하기 (1)

코틀린에서의 getter, setter 질문이 있습니다!

작성

·

311

0

안녕하세요 우빈님! 이 강의 오픈 소식을 볼려고 6월 내내 인프런 알림을 얼마나 눌렀는지 아시나요? ㅠㅠㅋㅋㅋ 어제 오픈해주시자마자 열심히 듣는 중입니다! 좋은 강의 감사드립니다 ㅎㅎ

질문 제목처럼 setter 와 관련한 질문이 있습니다. 실무에서 코틀린을 사용하신다고 하셨는데, var 로 프로퍼티를 만들게 되면 외부에서 접근해서 setter 처럼 바로 값을 변경할 수 있는게 문제가 되지 않을까 늘 고민이 많이 됐습니다.

접근 제어자를 private 으로 만들어주고 해당 프로퍼티의 값을 업데이트해주는 내부 메서드를 만드는 식으로 해야되나 이런 고민도 해봤구요. 아니면 팀원들과 잘 약속해서 써야하나? 이런 고민도 해봤습니다. (물론 저는 지금 취준생이지만요 ㅎㅎ)

getter 도 처음에는 자제하는게 좋다고 하셨는데, 이러면 val 도 사용을 자제해야되는 것일까요..? var, val 둘 다 되게 편하고 좋은 거 같은데 이런 걸 아예 사용 안 하는 것은 코틀린을 쓰는 의미가 크게 반감되는 거 같기도 해서, 뭔가 다른 더 좋은 방법이 있을 것 같기도 합니다.

우빈님 같은 경우에는 이런 문제를 어떻게 해결하시는 지 궁금합니다!

감사합니다.

답변 1

1

박우빈님의 프로필 이미지
박우빈
지식공유자

happycoding 님, 안녕하세요!

아이고 제가 6월 중 오픈으로 공지를 했는데 여러 사정상 7월 1일 오픈이 되었네요ㅠㅠ 기다려주셔서 감사드려요 😌

 

접근 제어자를 private 으로 만들어주고 해당 프로퍼티의 값을 업데이트해주는 내부 메서드를 만드는 식으로 해야되나 이런 고민도 해봤구요. 아니면 팀원들과 잘 약속해서 써야하나? 이런 고민도 해봤습니다.

맞습니다! 자바와 다르게 코틀린은 언어 레벨부터 지향하는 바가 다르기 때문에, 말씀하신대로 접근 제어자를 통해 private set을 지정해서 사용합니다.
값의 변경이 필요하다면 의도가 드러나는 네이밍과 함께 변경 메서드를 만들어 값을 업데이트하시면 됩니다.

추가적으로, DTO의 경우는 val 프로퍼티를 가진 data class를 사용해서 불변을 보장하고 있어요.

getter 도 처음에는 자제하는게 좋다고 하셨는데, 이러면 val 도 사용을 자제해야되는 것일까요..? var, val 둘 다 되게 편하고 좋은 거 같은데 이런 걸 아예 사용 안 하는 것은 코틀린을 쓰는 의미가 크게 반감되는 거 같기도 해서, 뭔가 다른 더 좋은 방법이 있을 것 같기도 합니다.

자바에서 getter를 자제하라는 의미는 무분별한 getter를 지양하고, 객체에 메시지를 보내 객체 지향적인 설계를 하라, 는 의미인데요.

코틀린에서는 아무래도 프로퍼티의 개념(필드 + 접근자)이 도입되다 보니, 이러한 지침을 그대로 적용하기는 무리가 있습니다.
val을 사용하면서, 객체 지향적으로 객체를 설계하고 다른 객체 프로퍼티에 무분별하게 접근하고 있지 않은지 의식적으로 체크하는 것이 필요합니다.
private get을 사용할 수도 있겠지만, 자바에서는 getter를 내가 의도를 가지고 만들어서 외부에 열어주는 방식이고, 코틀린에서는 (val 프로퍼티를 선언한 경우) 이미 존재하는 getter를 억지로 닫는 느낌이기 때문에, 필요한 경우가 아니라면 굳이 그렇게 번거롭게 가져갈 필요는 없어보여요. :)

이 강의의 첫 질문을 올려주셨는데, 큰 관심 주셔서 감사드립니다. ㅎㅎ
도움이 되셨기를 바랍니다.

감사합니다 🙂

친절한 답변 감사드립니다! 요새 한창 고민하던 주제를 우빈님이 다뤄주신다는 공지를 보고 얼마나 기뻤는지 모릅니다 ㅎㅎ 열심히 다 들어보겠습니다~ 장마철 조심하시고 좋은 하루 되세요 :)

비가싫어요님의 프로필 이미지
비가싫어요

작성한 질문수

질문하기