강의

멘토링

커뮤니티

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

콜라곰님의 프로필 이미지
콜라곰

작성한 질문수

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

8강. 유저 관련 기능 테스트 작성하기

getUsersTest()에서 getUsers()로 메소드명을 명시하여 호출하는 이유는 무엇인가요?

해결된 질문

작성

·

255

·

수정됨

1

강의에서 getUsers()가 get으로 시작하다보니 코틀린에서 프로퍼티처럼 간주한다고 하셨는데, 실제로 인텔리제이의 자동완성에서는 getUsers()가 나타나지 않고 users만 나타나는 것을 볼 수 있었습니다.

다만 위와 같이 users를 사용해서 호출해도 테스트가 정상적으로 통과되는것을 확인할 수 있었습니다.

그렇다면 get을 생략해서 코드 길이를 줄일 수 있지 않나? 하는 생각이 들었는데 강의에서와 같이 메소드명 전체를 명시하는 이유에 대해서 알고싶습니다!

답변 1

1

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

안녕하세요~ 콜라곰님!!! 아이고~~ 좋은 질문이십니다 👍👍

맞습니다~ 제가 getUsers() 가 get으로 시작해 프로퍼티처럼 간주된다고 말씀드렸는데요! 그렇기 때문에 메소드의 전체 이름인 userService.getUsers()대신 users 만 사용해도 정상 동작하는거에요!!

 

그렇지만, 강의에서 getUsers() 를 사용하는 이유는, users 만 쓰게 되면 userService.users 라고 했을때 누군가 이를 '프로퍼티'로 착각할 수 있기 때문입니다!

 

사실은 함수인데 밖에서의 사용 모습때문에 프로퍼티로 착각하는거죠!!

 

함수와 프로퍼티의 그 원리 및 용례가 다르기 때문에 이를 착각하게 하는 것은 큰 위협으로 이어질 수 있습니다! 실제로 <이펙티브 코틀린 Item 16> 에서도 프로퍼티를 쓰려면 다음과 같은 경우에 사용하는 것이 좋다고 권장하고 있습니다~ 😊 (참고 자료 입니다!! https://javabom.tistory.com/136)

 

위와 같은 이유로 저는 다음과 같은 Trade-Off를 한거에요!

  • 코드 길이를 약간 줄이되, 다른 사람이 프로퍼티로 착각할 수 있게 하기

  • 코트 길이를 약간 늘리되, 확실히 함수임을 명시하여 착각하지 않게 하기

이 중에 전자를 선택한겁니다!

 

답변이 도움이 되었으면 좋겠네요!! 감사합니다, 편안한 밤 되세요!! 🙇🙇

콜라곰님의 프로필 이미지
콜라곰

작성한 질문수

질문하기