Kotlin

[Kotlin] Class, Interface 새로 배운 학습 정리

 

(1) 기본/보조 생성자 (constructor)

 

- 기본적인 접근 제어자는 public이다. public으로 사용 할 땐 constructor 키워드 생략 가능하다.

- 멤버 변수로 사용하고자 할 때에는 기본 생성자에서 val 또는 var 키워드를 붙인다.

class MyClass(name: String) // name은 기본적으로 public 형태를 가진다.

class YourClass(val name: String) // name은 YourClass의 멤버 변수

 

- 보조 생성자를 통해 다양한 형태의 생성자를 만들 수 있다.

- 보조 생성자를 통해 멤버 변수에 값을 할당하기 위해서는 위 기본 생성자와 같이 val, var를 붙일 수 없다.

- 보조 생성자의 매개변수를 직접 클래스의 멤버 변수에 할당해주어야 한다.

 

class MyClass {

    private var age: Int = 0
    private var name: String = ""

    constructor(age: Int) {
        this.age = age
    }

    constructor(age: Int, name: String) {
        this.age = age
        this.name = name
    }
}

val myClass1 = MyClass(24)  // age=24 , name=""
val myClass2 = MyClass(24,"H")  // age=24, name="H"

 

 

(2) 초기화 블록 (initializer block)

 

- 기본 생성자는 클래스의 헤드에 들어가므로, 블록 형태로 코드를 포함 할 수 없다.

- 클래스 초기화 시 블록 형태로 초기화 할 수 있는 init {} 을 사용 할 수 있다.

 

class MyClass(private val name: String) {
  
  init {
     println(name)
  }
}

val myClass = MyClass("Hun") // Log : Hun

 

 

(3) 상속 (Inheritance)

 

- 상속을 통해 코드의 중복을 제거할 수 있다.

- 부모의 var 타입 멤버변수는 val 타입으로 오버라이딩 가능. 반대는 성립하지 않음.(var = getter, setter 모두 가짐 / val = getter만 가짐)

- 코틀린의 모든 클래스는 특정 클래스를 상속 받지 않으면 암묵적으로 Any를 상속 받는다.

- Any에는 equals() , hashCode(), toString() 3개의 메소드만을 정의하고 있다.

- equals() : 객체 간 동등성을 비교할 때 사용. (같은 객체임을 비교하는 것이 아니라 동일한 값을 가지는 지 비교)

- hashCode() : 객체의 값에 대한 hash code 값을 반환. 같은 값에 대해서는 같은 hash code를 가진다.

- toString() : 객체에 대한 표현을 String으로 변환.

 

 

 

(4) 정적 클래스 (static class)

 

- 정적 클래스 내 멤버변수, 메소드는 객체를 생성하지 않고 사용 할 수 있다.

- 일반적으로 클래스의 각 객체마다 가지고 있을 필요가 없는 공통된 데이터를 보관한다.

- 코틀린에서는 companion object 키워드를 이용한다.

- 기본 접근 제어자는 public.

- const 키워드를 더해 컴파일 타임에 초기화 되는 상수를 만들 수 있다. 

class MyClass() {

   companion object {
       const val TAG = "myClass" //컴파일 타임에 초기화 되는 상수
       fun newInstance(): MyClass = MyClass()
   }
}

 

 

(5) 인터페이스 (Interface)

 

- 클래스와 인터페이스의 차이는 인터페이스는 상태를 저장할 수 없다는 점이다.

- 따라서, 인터페이스에서 멤버변수에 값을 할당 할 수 없다. 추상화 되어 있다.

- 상태로써 사용하고자 하면 implementation 받아서 오버라이딩 하여 사용하여야 한다.

- 함수에 대해서는 구현, 추상화 모두 가능하다.

 

interface MyInterface {
    val name: String
    val age: Int
    // val newAge: Int = 24 (Error)

    fun printInfoAbstract()

    fun printInfo() {
        println("$name / $age")
    }
}

 

 

 

 

참고 : https://sabarada.tistory.com/169?category=941106

 

[kotlin] 코틀린 차곡차곡 - 5. 클래스 - 2

안녕하세요. 코틀린 차곡차곡 5번째 시간입니다. 오늘은 이전 시간에 이어서 코틀린의 클래스 기본에 대해서 알아보는 시간을 가져보도록 하겠습니다. 상속(Inheritance) 상속이란 클래스를 설계할

sabarada.tistory.com

 

https://kotlinlang.org/docs/classes.html

 

Classes | Kotlin

 

kotlinlang.org

 

https://kotlinlang.org/docs/inheritance.html

 

Inheritance | Kotlin

 

kotlinlang.org

 

https://kotlinlang.org/docs/interfaces.html

 

Interfaces | Kotlin

 

kotlinlang.org