본문 바로가기
Android(Kotlin)

[Kotlin Android] 클래스

by 클리마 2022. 5. 26.
728x90

Kotlin은 컴파일 시간에 JAVA로 변환되어 프로그램이 실행되기 때문에 당연히 OOP(Object Oriented Programming)방식으로 프로그래밍합니다. 그래서 이번 시간에는 OOP의 중요한 특징을 구현하는 클래스에 대해 알아보고자 합니다.

클래스가 OOP에서 중요한 이유는 객체의 속성, 객체가 할 수 있는 행동과 값?을 정의할 수 있기 때문입니다. 또한 캡슐화하는데에도 중요한 것이 클래스입니다.

이제 Kotlin에서 클래스의 기본 모습을 살펴보려고 합니다. 이번 글은 JAVA와 비교하여 글을 쓰기 때문에 JAVA를 이미 알고 있는 분이 보기에 좋은 글입니다.

// JAVA Class
class 클래스이름 extends 상속클래스 implements 상속Implement {
    멤버변수

    멤버메소드
}
// Kotlin Class
class 클래스이름(매개변수) : 상속클래스() or 상속Implement {
    멤버변수

    멤버 메소드
}

Kotlin의 클래스의 기본 모습은 JAVA와 크게 다르지 않습니다. 다른 점이라고 한다면 JAVA는 extendsimplements로 상속하는 클래스와 Implement를 나누었지만, Kotlin은 상속하는 클래스의 경우에는 이름 뒤에 괄호()를 붙이도록 했고 Implement는 이름만 작성하도록 했다는 점입니다.
또한, Kotlin은 클래스 파일의 이름과 클래스의 이름이 달라도 생성이 가능합니다.

>생성자

JAVA에서는 기본 생성자 이외에 매개변수를 받는 생성자를 사용할 경우 따로 생성자를 정의하고 멤버변수와 연결시켜주어야 했습니다. 하지만, Kotlin은 매개변수를 받는 생성자만 사용할 경우 따로 생성자를 정의해서 멤버변수를 연결시키지 않더라도, 마치 메소드를 작성하는 형식처럼 클래스 이름 옆에 매개변수를 작성하면 주 생성자를 알아서 생성해줍니다.

코드를 통해 살펴보도록 하겠습니다.

class Human constructor(val name: String = "Anonymous"){    //주 생성자(constructor) 정의
    init{ ... }                                              //클래스가 호출될 때 가장 처음 할 행동 정의
    constructor(name: String, age: Int): this(name){ ... }    //부 생성자 정의
    //부 생성자는 this()를 써서 주 생성자를 받아와야 정의 가능

fun main(){
    //Kotlin은 new 연산자 안써도 됨
    val human = Human()             //주 생성자의 param이 이미 데이터가 있기 때문에 기본 생성자 사용 가능
    val human2 = Human("james")     //주 생성자 사용
    val human3 = Huma("joyce", 25)  //부 생성자 사용

    println("this human's name is ${human.name}")   //Anonymous
    println("this human's name is ${human2.name}")  //james
    println("this human's name is ${human3.name}")  //joyce
}

>상속

Kotlin에서 class와 함수 등은 기본적으로 final 접근지시자입니다. 그렇기 때문에 상속이나 오버라이딩을 하기 위해서는 접근지시자를 명시하여 바꿔주어야 합니다. Kotlin에서는 공개적인 접근지시자로 open을 사용합니다.

open class Human(val name: String = "Anonymous"){
    open fun sing(){
        println("lalala")
    }
}

class Korean: Human(){
    override fun sing(){
        super.sing()
        println("라라라")
    }
}

fun main(){
    val kHuman = Korean()
    kHuman.sing()
}
/*
lalala
라라라
*/

>데이터 클래스

JAVA에서는 POJO(Plain Old Java Object) class라는 개념이 있습니다. POJO 클래스는 특정한 수행없이 비어있는 틀과 같은 클래스를 이야기합니다. 이 클래스를 만드려면 직접 일일이 getter/setter 메소드를 작성해야 했습니다. 그리고 class는 파일에 하나만 만들 수 있기 때문에 파일이 매우 많이 늘어나고 효율이 떨어졌었습니다.

Kotlin에서는 data class를 활용하여 pojo class를 손쉽게 만들 수 있고, 따로 getter/setter 메소드를 구현할 필요가 없습니다. 또한, 한 파일에 여러 data class를 만들어서 관리할 수 있는 장점이 있습니다.

data class Ticket(val companyName: String, val name: String, var date: String, var seatNumber: Int)

fun main(){
    val ticketA = Ticket("koreanAir", "JK Seon", "2022-03-02", 14)
    
    println(ticketA)    //Ticket(companyName=koreanAir, name=JK Seon, date=2022-03-02, seatNumber=14)
}

 


이상 JAVA와 비교하여 Kotlin Class의 특징에 대해 살펴보았습니다.

728x90