inflearn logo
강의

Course

Instructor

Kotlin Advanced

Lesson 9. The principle of lazy and delegated properties

val 키워드도 setValue가 있나요?

86

leeseokwoon5791

10 asked

0

by lazy 위임 프로퍼티 강의에서

by 키워드를 사용하려면 getValue 함수와 setValue 함수가 필요하다고 하셨는데 val 키워드로 변수 선언 시 setValue가 존재할수 없지 않나요?

 

var 키워드 -> getValue(),setValue()

val 키워드 -> getValue()

로 by 키워드를 사용할 수 있는것같아 질문드립니다.

kotlin 함수형-프로그래밍 객체지향

Answer 2

1

lannstark

안녕하세요 석운님! 🙂 말씀해주신 내용이 맞습니다!

val 키워드는 불변이라 getValue() 만 있어요!

 

by 키워드를 사용하려면 getValue와 setValue 함수가 필요하다 라는 워딩은

(val 혹은 var 변수와 함께) by 키워드를 사용하려면 getValue만 사용하거나 getValue와 setValue가 함께 필요하다. 라는 워딩이 더 정확할 것 같습니다.

 

강의를 들으시다가 또 궁금한 점 생기시면 편하게 말씀해주세요! 감사합니다! 🙏

1

communityai8509

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

val 키워드와 by 키워드를 사용할 때 발생하는 의문에 대해 설명드리겠습니다. 코틀린에서 by 키워드를 사용하여 위임 프로퍼티를 만들 때, valvar의 차이점 때문에 getValuesetValue 함수의 사용 여부가 달라집니다.

  • val 키워드의 경우: val로 선언된 변수는 불변(immutable)이기 때문에 해당 변수에는 설정(set)하는 기능이 없습니다. 따라서 by를 사용해 위임 프로퍼티를 구성할 때, getValue 함수만 필요하게 됩니다. 이 함수는 해당 프로퍼티의 값을 읽어오는 역할을 하며, 값을 변경할 수 없는 특성 때문에 setValue 함수는 존재하지 않습니다.

  • var 키워드의 경우: var로 선언된 변수는 가변(mutable)이기 때문에 값을 변경할 수 있어야 하므로 getValuesetValue 함수를 모두 구현해야 합니다. getValue는 값을 읽어오는 반면, setValue는 값을 설정하는 역할을 합니다.

따라서, val로 선언된 프로퍼티는 by 키워드를 사용하여 getValue 기능만 제공하고 있으며, 이는 val 특유의 불변 특성과 맞아떨어지기 때문입니다.

이와 관련된 좀 더 구체적인 설명과 예제를 원하신다면, 아래 관련 질문을 참고해 보세요:

이 게시물들은 코틀린에서 위임 프로퍼티를 사용하는 다양한 방식을 깊이 있게 탐구할 수 있는 기회를 제공합니다.

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

싱글턴패턴

0

1

1

KType 관련 Kotlin 2.3 변경점

1

61

2

Kotlin 2.0(K2 컴파일러)에서 달라진 Java SAM 변환 동작

2

98

3

SuperTypeSafeCage에 대해 질문드립니다

0

62

2

좋은 코드 예시

0

94

2

반공변성 질문드립니다.

1

114

3

[23강] SuperTypeToken의 equals 관련 질문

1

96

2

23강 타입 안전 이종 컨테이너 예제 관련 문의 드립니다.

0

111

2

abstract class Fish(name:String):Animal(name)

0

105

2

지식공유자님 inline에 대해서의 질문과 추가적인 질문 1가지가 있습니다!

1

118

1

안녕하세요 JMH 설정 관련 팁을 드릴까 합니다! (24년 12월 16일 기준)

0

164

2

Generic Func 질문이 있습니다

1

104

1

2강부터 영상 재생이 안되네요ㅠㅠ

0

152

2

by lazy 블럭 안에서 suspend 함수의 결과값을 받는게 가능한가요?

0

389

1

DSL 만들기

0

288

1

Sequence vs Stream

1

251

1

코틀린 indent 코드 스타일 질문입니다.

0

263

1

non-local return 질문입니다.

1

227

1

SynchronizedLazyImpl 함수관련 질문

0

424

2

제네릭 클래스를 정의하는 경우, 반드시 변성을 고려하는 것이 바람직한가요?

4

1327

1

실무에서 lateinit 이 필요한 경우는 어떤 상황일까요?

1

455

1

4강 타입소거 관련 질문

1

331

2

추상클래스의 공변 / 반공변, 추상 제네릭 일급컬랙션 리팩토링 에 대한 질문입니다.

2

598

1

lateinit 키워드 관련해서 질문드립니다!

1

314

1