코틀린

클래스와 프로퍼티

누룽지맛치킨 2023. 1. 25. 16:33
class Person(val name: String)
  • class 이름 : Person
  • 괄호 안의 파라미터는 프로퍼티
  • 클래스의 기본 가시성은 public

프로퍼티

  • 클래스
    • 데이터를 캡슐화
    • 캡슐화한 데이터를 다루는 코드를 한 주체 아래 가두는 것
  • 프로퍼티
    • 자바에서는 필드와 접근자를 묶어서 프로퍼티라고 부름
    • 코틀린 프로퍼티
      • 자바의 필드와 접근자 메소드를 완전히 대신
      • 프로퍼티 선언 시 → val이나 var을 사용
        • val : 읽기 전용 프로퍼티
        • var: 변경 가능
      class Person(
        val name: String,
        var isMarried: Boolean
      )
    • 코틀린은 위의 2개의 프로퍼티에 대해 (비공개) 필드와 (공개) 접근자 메소드를 만들어낸다.
    • 단 val의 경우 setter는 만들지 않음!
val person - Person("Bob", true)
println(person.name)
println(person.isMarried)
person.isMarried = false
  • 클래스 객체 생성 시 new 키워드는 사용하지 않고 생성자 호출
  • 프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터를 호출해준다.
  • var 프로퍼티의 세터도 마찬가지 방식으로 동작

커스텀 접근자

class Rectangle(val height: Int, val width: Int){
    val isSquare: Boolean
        get() {
            return height == width
        }
}
fun main() {
    val rectangle = Rectangle(10, 10)
    println(rectangle.isSquare)
}
  • 대부분의 프로퍼티에는 그 프로퍼티의 값을 저장하기 위한 필드 존재
    • backing field라고 부름
  • 위의 예시와 같이 커스텀 접근자 생성 가능

코틀린 소스코드 구조

  • 코틀린 파일의 맨 앞에 package문을 넣을 수 있음
    • 그 파일 안에 있는 모든 선언(클래스, 함수 ,프로퍼티 등)이 해당 패키지에 들어간다.
    • 다른 파일에서 정의한 선언이라도 같은 패키지에 속한다면 직접 사용 가능
    • 다른 패키지의 선언은 import를 통해 선언을 불러와야함
    • 패키지 이름 뒤에 .*를 추가하면 패키지 안의 모든 선언을 import 가능’
  • 코틀린에서는 패키지 구조와 디렉터리 구조가 맞아 떨어질 필요가 없음

🎉 알게된 점

- 기존에 안드로이드 개발 시 ViewModel 구조에서 LiveData를 사용
    - LiveData의 구조가 이해되지 않았지만 항상 봐왔기 때문에 의문없이 사용
    - 이 구조가 커스텀 접근자라는 것을 알게 되었음

 

참조

KOTLIN IN ACTION