Kotlin Day06 회고
Kotlin Day06 회고

Kotlin Day06 회고

1️⃣ 오늘의 Keyword

  1. this
  1. field
  1. property
  1. custom accessor
  1. lateinit
  1. isInitialized
  1. by lazy

2️⃣ 학습 내용 및 예시

  • this
    • Kotlin에서는 주 생성자가 선언되어있다면, 보조 생성자는 무조건 this. 으로 주 생성자를 같이 호출해 주어야한다.
 
  • field : 실제 데이터 값을 저장하는 메모리 공간
  • Property : 필드 + getter/setter(accessor)
    • 코틀린에서 Top-level과 클래스의 변수를 프로퍼티라 부른다.
    • var로 선언한 변수는 get(), set() 이 추가
    • val로 선언한 변수는 get() 만 추가
    • field : getter, setter 함수 내에서의 예약어
  • custom property, custom accessor
    • get(), set() 내부에서는 프로퍼티 값을 field로 접근한다.
    • val의 경우 get() 을 정의하였다면 초기 값을 명시하지 않아도 된다.
    • var의 경우 get() 이 정의되었다고 하더라도 초기 값이 명시 되어야한다.
    • 주 생성자의 var, val 이 추가된 매개변수에 Custom get(), set() 이 추가 불가
 
  • lateinit : 늦은 초기화
    • 개발자가 책임지고 뒤에서 반드시 초기화를 할 것이니 일단은 컴파일 에러없이 넘기는 것.
    • var의 경우에만 사용 가능.
    • 주 생성자에서는 사용할 수 없다.
    • custom getter/setter를 사용하지 않은 프로퍼티에만 사용할 수 있다.
    • nullable 프로퍼티에는 사용할 수 없다.
    • 타입은 기초 타입이 아니어야 한다.
  • isInitialized
    • lateinit으로 선언된 변수가 초기화 되었는지 확인
    • 클래스 내부에 선언된 lateinit을 클래스 밖에서 사용할 때 초기화 되었는지 직접 확인한느 방법은 없다.
  • by lazy : 초기화 미루기
    • 초기화를 프로퍼티의 ‘이용 시점’으로 미룰 수 있는 방법
    • by lazy { } 로 선언되어 프로퍼티의 초기화를 lazy { } 에서 진행
    • 호출 시점에서 초기화 진행
    • val 과 같이 사용 가능
    • primary type에도 사용가능
 
  • lateinit과 by lazy의 차이
    • 구분
      lateinit
      by lazy
      변수 제한
      var (변경 가능)
      val (변경 불가능)
      초기화 주체
      개발자가 직접 특정 시점에 할당
      변수에 처음 접근할 때 자동 실행
      Primitive 타입
      불가능 (Int, Boolean 등 X)
      가능
      Nullable
      Null 허용 안 됨
      Null 허용 가능
      Thread-Safe
      지원하지 않음
      기본적으로 지원함 (멀티스레드 안전)
  • 프로퍼티 변경 감지 - by Delegates.observable
 
 

❓ 이해 안 된 부분 / 도움 요청

 

‼️오늘 느낀 점