본문

코틀린(Kotlin) 기본 문법 - 5

도입

이번 포스팅에서는 코틀린의 개념 중

1) 데이터 클래스

2) companion object

3) open 키워드

에 대해서 정리할 것이다.


오늘 정리할 개념들은 연관이 없다. 코틀린 공부 중 잘 모르겠는 것들을 모아 정리하는 것이다.


데이터 클래스 개념

자바에서는 사용자 정의 클래스를 비교하기 위해서는 equals(), hasCode()를 추가로 구현해야 했다.

또한, toString()를 이용해 값을 확인하기 위해서는 추가로 구현을 해줬어야 했다.

코틀린에서 데이터 클래스는 equals(), hasCode(), toString()를 컴파일러가 자동으로 구현해준다.


데이터 클래스 실습

데이터 클래스 적용 후

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        dataClassF()
    }
 
    fun dataClassF() {
        val person1 = Person(1"heepie"200)
        val person2 = Person(1"heepie"200)
 
        Log.e("heepie""toString: ${person1.toString()}\n" +
                "equals  : ${person1.equals(person2)}\n" +
                "hashCode: ${person1.hashCode()}")
    }
}
 
// data class 선언
data class Person (val pId: Int, var pName: String, var pHeight: Long)
cs


데이터 클래스 적용 전

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        dataClassF()
    }
 
    fun dataClassF() {
        val person1 = Person(1"heepie"200)
        val person2 = Person(1"heepie"200)
 
        Log.e("heepie""toString: ${person1.toString()}\n" +
                "equals  : ${person1.equals(person2)}\n" +
                "hashCode: ${person1.hashCode()}")
    }
}
 
// 기본 class 선언
class Person (val pId: Int, var pName: String, var pHeight: Long)
cs



companion object 개념

자바에서는 클래스 내에 정적 필드, 정적 메소드가 필요하다면 static 키워드를 통해 인스턴스 생성없이 접근이 가능했다.

그러나 코틀린에서는 static 키워드를 제공하지 않는다.

그 대신, 인스턴스 생성없이 접근 할 수 있는 Object를 제공하고 이것을 companion object라고 한다.

여기서 확장해서 생각하면 코틀린에서 object 키워드로 싱글톤을 제공한다.


companion object 실습

Kotlin - companion object

1
2
3
4
5
6
7
class MathKotlin {
    companion object {
        val PI = 3.14
 
        fun sum(parm1: Int, parm2: Int): Int = parm1 + parm2
    }
}
cs


Java - static

1
2
3
4
5
6
7
public class MathJava {
    public static final double PI = 3.14;
 
    public static int sum(int parm1, int parm2) {
        return parm1 + parm2;
    }
}
cs


동일한 결과

1
2
Log.e("heepie""${MathJava.PI * MathJava.sum(1,2)}")
Log.e("heepie""${MathKotlin.PI * MathKotlin.sum(1,2)}")
cs



open 키워드 개념

자바의 final 키워드는 클래스 상속, 메소드 재정의, 값 재정의를 불가능하게 만들었다.

그러나 코틀린에서는 final 키워드를 지원하지 않는 대신 open 키워드를 제공한다.

open 키워드는 클래스 상속, 메소드 재정의, 값 재정의를 가능하게 만는다.


open 키워드 실습

open 키워드 적용 후


open 키워드 적용 전

클래스 뿐만 아니라 메소드, 값도 open 키워드가 없다면 재정의가 불가능하다.



#kotlin #data class #companion object #open

공유

댓글