wafflestudio / seminar-2020

2020 Rookies 세미나
28 stars 49 forks source link

kotlin의 randomInt #93

Open Wits15730 opened 4 years ago

Wits15730 commented 4 years ago

google codelabs의 Android Studio tutorial에서 [1,6]내의 random int 를 생성하는 과정을 다음과 같이 하고 있습니다.

randInt: Int = (1..6).random()

그런데 여기서 randInt라는 변수명은 다음과 같이 자동완성에 존재하고 있습니다

스크린샷 2020-09-04 오전 2 18 52

그런데 처음 만드는 그냥 변수명을 자동완성한다는 것이 이해가 안되서 검색했으나 왜 그런지 알지 못했습니다. 그냥 kotlin file에서eh randomInt라는 변수명이 자동완성에 나옵니다.

이 자동완성을 무엇일까요..?

Wits15730 commented 4 years ago

다시 알아본 결과, 제 결론이 맞다면 이 variable은 아마도 java에서 "public final value"라고 미리 분류해 놓은 variable인 듯합니다. public은 다른 모든 class 에 visible하다는 뜻이고, final은 변수의 값이 변하지 않는다는 뜻입니다. 그냥 public variable이었으면 외부에서 바꿀 수 있었겠지만 final이기 때문에 값이 변경되지는 않습니다. 그러니까 튜토리얼에서 한번 던진 주사위의 눈의 값은 절대 변하지 않고, 다시 던져야만 변할 수 있습니다.

public: https://en.wikibooks.org/wiki/Java_Programming/Keywords/public final: https://en.wikibooks.org/wiki/Java_Programming/Keywords/final

Hank-Choi commented 4 years ago

자동완성은 단순히 IDE에서 제공하는 변수명 추천기능인 것으로 보입니다. 또 Kotlin에서 val은 무조건 immutable한 값을 나타냅니다. (final과 동일)

sanggggg commented 4 years ago

아마도 한결님이 말씀하신 것 처럼 Android Studio 에서 rvalue에 따라 자동으로 변수명을 추천해 주는 기능으로 보입니다.

비슷한 예로, 설정에 따라 LayoutController 라는 클래스의 인스턴스를 만든다면 비슷한 맥락으로 layoutController, mLayoutController 라는 변수명을 Android Studio IDE 가 자동으로 추천해줍니다.

아마 public final value라고 말씀하신 부분이 제 생각에는 c 의 errno 와 같이 default 로 선언된 전역 변수의 느낌으로 언급하신 것 같은데, kotlin 문법에서는 default 전역 변수는 존재하지 않고, 심지어 그냥 전역 변수 도 kotlin 문법에서는 존재하지 않습니다. (import 를 통해 가져올 수 있는 것도 보통 object, class, interface 입니다)

Wits15730 commented 4 years ago

아 그렇군요.. 그냥 변수명 추천이었군요 감사합니다!