룬아님의 취중코딩

Kotlin Bootcamp for Programmers 9. 클래스 본문

개발/Kotlin

Kotlin Bootcamp for Programmers 9. 클래스

룬아님 2019. 11. 18. 17:26

다음 프로그래밍 용어는 이미 익숙해야합니다.

  • 클래스(Class)는 객체에 대한 청사진입니다. 예를 들어 Aquarium 클래스는 수족관 개체를 만들기위한 청사진입니다.
  • 객체(Object)는 클래스의 인스턴스입니다. 수족관 개체는 하나의 실제 수족관입니다.
  • 속성(Property)은 수족관의 길이, 너비 및 높이와 같은 클래스의 특성입니다.
  • 멤버 함수(Method)라고도하는 메서드는 클래스의 기능입니다. 방법은 객체로 "할 ​​수있는"것입니다. 예를 들어 Aquarium 객체를 FillWithWater () 할 수 있습니다.
  • 인터페이스(Interface)는 클래스가 구현할 수있는 사양입니다. 예를 들어, 청소는 수족관 이외의 물체에 공통적이며 일반적으로 다른 물체에 대해서도 비슷한 방식으로 청소합니다. 따라서 clean () 메서드를 정의하는 Clean이라는 인터페이스를 가질 수 있습니다. Aquarium 클래스는 Clean 인터페이스를 구현하여 부드러운 스폰지로 수족관을 청소할 수 있습니다.
  • 패키지(Package)는 관련 코드를 그룹화하여 체계적으로 유지하거나 코드 라이브러리를 만드는 방법입니다. 패키지가 생성되면 패키지 내용을 다른 파일로 가져 와서 코드와 클래스를 재사용 할 수 있습니다.

 

1. 클래스 만들기

class Aquarium {
    var width: Int = 20
    var height: Int = 40
    var length: Int = 100
    
    fun printSize() {
        println("Width: $width cm " +
                "Length: $length cm " +
                "Height: $height cm ")
    }
}

 

fun buildAquarium() {
    val myAquarium = Aquarium()
    myAquarium.printSize()
    myAquarium.height = 60
    myAquarium.printSize()
}
⇒ Width: 20 cm Length: 100 cm Height: 40 cm 
Width: 20 cm Length: 100 cm Height: 60 cm 

 

 

2. 클래스 생성자 추가

기본값을 정하여 클래스를 생성할 수 있다.

class Aquarium(length: Int = 100, width: Int = 20, height: Int = 40) {
   // Dimensions in cm
   var length: Int = length
   var width: Int = width
   var height: Int = height
...
}

 

더 올바른 방법

class Aquarium(var length: Int = 100, var width: Int = 20, var height: Int = 40) {
...
}

 

일일히 생성자를 만들어 주지 않아도 원하는 properties를 넣어 생성할 수 있다.

fun buildAquarium() {
    val aquarium1 = Aquarium()
    aquarium1.printSize()
    // default height and length
    val aquarium2 = Aquarium(width = 25)
    aquarium2.printSize()
    // default width
    val aquarium3 = Aquarium(height = 35, length = 110)
    aquarium3.printSize()
    // everything custom
    val aquarium4 = Aquarium(width = 25, height = 35, length = 110)
    aquarium4.printSize()
}
⇒ Width: 20 cm Length: 100 cm Height: 40 cm 
Width: 25 cm Length: 100 cm Height: 40 cm 
Width: 20 cm Length: 110 cm Height: 35 cm 
Width: 25 cm Length: 110 cm Height: 35 cm 

 

 

3. Init 블록 추가하기

init 블록을 클래스 안에 넣으면 클래스가 초기화 될때에 실행된다.
init 블록은 한개 이상 사용할 수 있다.

class Aquarium (var length: Int = 100, var width: Int = 20, var height: Int = 40) {
    init {
        println("aquarium initializing")
    }
    init {
        // 1 liter = 1000 cm^3
        println("Volume: ${width * length * height / 1000} l")
    }
}
aquarium initializing
Volume: 80 l
Width: 20 cm Length: 100 cm Height: 40 cm 
aquarium initializing
Volume: 100 l
Width: 25 cm Length: 100 cm Height: 40 cm 
aquarium initializing
Volume: 77 l
Width: 20 cm Length: 110 cm Height: 35 cm 
aquarium initializing
Volume: 96 l
Width: 25 cm Length: 110 cm Height: 35 cm 

생성자 호출 시 모든 init이 실행된다.

참고 : 기본 생성자의 매개 변수는 초기화 블록에서 사용할 수 있습니다.
이니셜 라이저 블록에 사용 된 모든 속성은 미리 선언해야합니다.

 

 

4. 보조 생성자에 대해 알아보기

하나 이상의 init 블록을 가질 수 있고 Kotlin 클래스에는 생성자 오버로드, 즉 다른 인수를 가진 생성자를 허용하는 하나 이상의 보조 생성자가있을 수도 있습니다.

참고 : Kotlin 코딩 스타일에 따르면 각 클래스에는 기본값과 명명 된 매개 변수를 사용하는 생성자가 하나만 있어야합니다.
여러 생성자를 사용하면 더 많은 코드 경로가 생성되고 하나 이상의 경로가 테스트되지 않을 가능성이 있기 때문입니다.
보조 생성자를 작성하기 전에 클래스 정의를 깨끗하게 유지하기 위해 팩토리 함수가 작동하는지 여부를 고려하십시오.
참고 : 모든 보조 생성자는 this ()를 직접 사용하거나 간접적으로 다른 보조 생성자를 호출하여 기본 생성자를 먼저 호출해야합니다.
이것은 기본의 모든 init 블록이 모든 생성자에 대해 호출되고 기본 생성자의 모든 코드가 먼저 실행됨을 의미합니다.

 

Aquarium 클래스에서 constructor 키워드를 사용하여 여러 물고기를 인수로 취하는 보조 생성자를 추가합니다. 물고기 수에 따라 리터 단위의 계산 된 수족관 부피에 대한 val tank 속성을 만듭니다. 물고기 당 2 리터 (2,000cm ^ 3)의 물과 물이 쏟아지지 않도록 약간의 여분의 공간이 있다고 가정하십시오.

constructor(numberOfFish: Int) : this() {
    // 2,000 cm^3 per fish + extra room so water doesn't spill
    val tank = numberOfFish * 2000 * 1.1
    // calculate the height needed
    height = (tank / (length * width)).toInt()
}

 

fun buildAquarium() {
    val aquarium6 = Aquarium(numberOfFish = 29)
    aquarium6.printSize()
    println("Volume: ${aquarium6.width * aquarium6.length * aquarium6.height / 1000} l")
}
⇒ aquarium initializing
Volume: 80 l
Width: 20 cm Length: 100 cm Height: 31 cm 
Volume: 62 l

볼륨은 2 차 생성자가 실행되기 전에 1 차 생성자의 init 블록에 의해 한 번, buildAquarium ()의 코드에 의해 두 번 인쇄됩니다.
생성자 키워드를 기본 생성자에도 포함시킬 수 있지만 대부분의 경우 필요하지 않습니다.

반응형
Comments