코틀린 언어 정리 2-2
class
접근 권한
여기에서는 접근 권한 키워드가 클래스 내에서 사용될 때의 설명( 멤버 선언에 사용될 때 )만 포함합니다.
private
클래스 내에서만 접근 가능
protected
클래스 및 하위 클래스 내에서만 접근 가능
public
클래스 내부와 외부에서 모두 접근 가능
internal
같은 모듈( 컴파일된 바이너리 단위 ) 내에서 접근 가능
프로퍼티
프로퍼티는 일반적으로 사용하는 변수와 동일한 방식으로 사용할 수 있지만 자체에 getter/setter를 내장하고 있습니다. getter/setter는 자동으로 생성되며 사용자가 직접 구현할 수도 있습니다. 코틀린에서는 전역에서 선언한 변수, 클래스 내부에 선언한 변수는 모두 프로퍼티로 처리되며 로컬 함수의 내부에서 선언한 변수는 프로퍼티로 처리되지 않습니다.
프로퍼티 선언 및 초기화
선언하면서 초기화
선언하면서 사용자가 입력한 고정값, 주생성자 매개변수, 기타 다른 프로퍼티들의 조합으로 계산된 새로운 값으로 초기화 할 수 있습니다.
예제
선언 후 초기화
init block에서 초기화
예제
보조생성자에서 초기화
어떤 생성자를 호출 하더라도 선언된 모든 프로퍼티들의 초기화가 실행되도록 해야 컴파일 에러가 발생하지 않습니다. 예를 들면 생성자가 2개 이상인데 어떤 프로퍼티가 특정 생성자에서만 초기화 되도록 구현했다면 컴파일 에러가 발생합니다.
by lazy
프로퍼티가 처음 이용( 참조 )되는 시점에 초기화 코드를 실행합니다.( Standard Delegates ) lazy는 함수입니다.
예제
제약
by lazy는 val 로 선언한 프로퍼티일 경우만 사용 가능합니다.
lateinit
C/C++ 처럼 프로퍼티의 초기화를 객체 생성 이후 아무때나 수행할 수 있게 해줍니다. 프로퍼티를 초기화 하지 않고 사용할 경우 예외가 발생합니다.
예제
제약
lateinit을 사용할 수 없는 경우
val로 선언한 프로퍼티
기본 타입(ex. Int, Double 등 )으로 선언한 프로퍼티
null 허용 프로퍼티
get/set을 구현한 프로퍼티
주생성자 매개변수와 동시에 선언한 프로퍼티
lateinit 사용 불가 코드 요약
val
:Int?
get(){} / set( value ){}
constructor ( val ... )
필드와 프로퍼티
field
프로퍼티(property)에 대응하는 값을 저장하는 변수입니다. 프로퍼티 정의를 통해 접근할 수 있습니다.
property
설정, 참조 가능한 객체의 특성입니다. property는 자신에 대응하는 field를 가질수도 있고 그렇지 않을 수도 있습니다.
get/set 구현
일반적으로 호칭할 때는 getter/setter라고 호칭하고 코드상으로는 get/set 으로 구현합니다.
var 프로퍼티에는 get/set 모두 구현 가능합니다.
val 프로퍼티에는 get만 구현 가능합니다.
val 프로퍼티일 경우 get 을 구현하면 프로퍼티 초기화를 별도로 하지 않아도 됩니다.
주생성자의 매개변수와 동시에 선언한 프로퍼티는 getter/setter를 구현할 수 없습니다.
field
프로퍼티에 저장된 값 자체(backing field)입니다. get/set 함수 구현 내부에서 backing field에 값을 저장하거나 참조할 때 사용하는 키워드입니다. 프로퍼티의 getter/setter 구현 시 사용 되나 값을 저장할 필요가 없는 프로퍼티에는 사용할 필요가 없습니다.
예제
'코틀린( Kotlin )' 카테고리의 다른 글
코틀린 2-4 class - 생성자 호출 순서, Any (0) | 2020.04.05 |
---|---|
코틀린 2-3 class - 상속 (0) | 2020.04.04 |
코틀린 2-1 class - 주생성자, 보조생성자 (0) | 2020.04.04 |
코틀린 1-9 기본 - operator(연산자) - 연산자 오버로딩 (0) | 2020.04.03 |
코틀린 1-8 기본 - operator(연산자) - spread operator( 전개 연산자 ), 범위 연산자, 비트 연산자 (0) | 2020.04.03 |