Kotlin, 클래스 정의

이도현·2023년 8월 10일
0

Kotlin 공부

목록 보기
11/20

클래스 정의

class Player

인스턴스 만들기

val player = Player()

가시성 제한자

public
private
protected
inernal // 함수나 속성이 정의된 클래스가 포함된 모듈(module)에서 사용될 수 있다.

Property(속성), Field

  • Property: val(inmutable), var(mutable)
  • 코틀린에서는 클래스 내에서 직접적으로 Fields에 대해 선언할 수 없으나 프로퍼티가 Backing field를 필요로 할 때 자동으로 Accessor 메소드 안에서 참조할 수 있도록 field라는 식별자를 제공해줍니다.
class Person {
    var name: String = "Not Assigned"
        set(value) {
            field = "Dev." + value
        }
}
 
fun main(args: Array<String>) {
    val person = Person()
    person.name = "Ready"
 
    println(person.name)
}
  • 위에서 name이 field(backing field)
  • 아래 main 함수에서 person.name = "Ready"가 실행될 때 person 객체의 name 프로퍼티를 직접 접근하는 것이 아니라 setter 함수를 호출하는 것

속성의 게터나 세터

  • 클래스의 필드는 직접 정의할 수 없음
  • 직접 정의하는 것은 속성
    - 해당 필드에 대한 getter/setter 함수를 자동으로 생성
    • getter/setter 재정의 가능
class Player {
  var name = "mardrigal"
    get() = field.capitalize()
    set(value) {
    	field = value.trim()
    }
  fun castFireball(numFireballs: Int = 2) =
  println("한 덩어리의 파이어볼이 나타난다. (x$numFireballs)")
}
val player = Player()
player.name = "estragon "
println(player.name + "TheBrave")

산출 속성

  • 다른 속성이나 변수 등의 값을 사용해 자신의 값을 산출하는 속성
  • 값을 저장할 필요가 없음(setter가 없음)
class Dice() {
  val rolledValue
  	get() = (1..6).shuffled().first()
}

val myD6 = Dice()
println(myD6.rolledValue)
println(myD6.rolledValue)
println(myD6.rolledValue)

패키지 사용하기

  • 비슷한 요소들을 분류하고 모아 놓은 것
  • 이름 충돌을 피하는 한 방법
  • 소스 관리시 패키지 경로에 대응하는 디렉터리를 생성해서 관리

    mykg.util이면 mypkg/util경로 준비

  • 소스 파일의 가장 앞줄에 지정
    package mypkg.util
  • 다른 패키지에 있는 클래스/함수 사용시 import하여 사용
  • 이름 충돌 시 as로 별칭 부여
profile
좋은 지식 나누어요

0개의 댓글