• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

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

22.12.29 15:44 작성 22.12.29 15:46 수정 조회수 155

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를 한거에요!

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

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

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

 

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