Class

Panda·2022년 2월 21일
1

Kotlin

목록 보기
5/10

이번에는
Class, Data Class, Object에 대해 공부해 보려고 합니다.

Class

코틀린의 Class는 자바처럼 작성할 수 있지만
더욱 편리한 문법을 제공합니다.

class Person2(val name : String = "홍길동", val age : Int = 20) {
    val isTeen : Boolean
    // getter 설정
    get() =
        age < 20

//    constructor(name : String, age : Int) {
//        this.name = name
//        this.age = age
//    }
//    기존 프로퍼티 정의
//    var name : String = ""
//    var age : Int = 0
}

fun main() {
    val p1 = Person2("민호")
    val p2 = Person2()

    println("${p1.name} : ${p1.age}, isTeen : ${p1.isTeen}")
    println("${p2.name} : ${p2.age}, isTeen : ${p2.isTeen}")

    - 결과 -
    민호 : 20, isTeen : false
	홍길동 : 20, isTeen : false
}

1. 생성자 생략 가능

  • 생성자를 constructor 라는 키워드로 생성자를 작성할 수 있습니다.
  • 하지만 class Name(...) 형태로 작성하게 되면 생성자가 생략이 됩니다.(구현이 되있는 상태)
  • 자바에서 오버로드 생성자를 만들때 여러개를 만들었는데 코틀린은 프로퍼티의 기본값을 설정해줘서 여러 생성자를 안만들어줘도 됩니다. (기본값 설정 안해줘도 됨.) (파이썬 이랑 비슷비슷)
  • 이때 프로퍼티 설정은 함수 매개변수 정의하는것과 유사하게 정의할 수 있습니다.

2. Getter, Setter 자동구현

  • 프로퍼티에 대해서 Getter, Setter가 자동으로 구현이 되있어서 외부에서 그냥 변수쓰듯이 가져다가 사용하면 됩니다.
  • 이때 val은 Getter만 생성, var은 Getter, Setter 둘다 생성합니다.
  • 하지만 사용자가 직접 Getter, Setter를 정의할 수있는데 그것이 바로 get() set() 필드입니다.

Class 정의 부분에 대해
자바와 비교했을때 코틀린은 너무나도 뛰어난 가독성을 보유하고 있기 때문에 코드의 생산성이 올라가게 됩니다.

Data Class

data class HandSomeGuy(
    val name : String,
    val age : Int,
    val job : String
)

Data Class는 POJO객체를 구현할때 딱좋은 class인거 같습니다.
그래서 보통 DTO 겸 Model 만들때 많이 쓴다고 알고있습니다.

Data Class를 만들게 되면 자동으로 Getter, Setter, toString, hashCode, equals 등 자동으로 만들어주게 됩니다.

진짜 진짜 편리한 기능 같아요

Object

object GameManager {
    val title : String = ""
    val type : String = ""
}

Object 키워드는 싱글톤을 만들어주는 기능을 합니다.
심지어 Thread-Safe 하게 만들어줘서 대박인거 같습니다.
Java에서는 Thread-Safe하게 하려면 synchronized 키워드를 이용하는데
코틀린은 자동으로 처리해준다!!

class Car(val horsepowers: Int) {
    companion object Factory {
        val cars = mutableListOf<Car>()

        fun makeCar(horsepowers: Int): Car {
            val car = Car(horsepowers)
            cars.add(car)
            return car
        }
    }
}

fun main() {
    // Factory 객체 생략가능
    val car = Car.makeCar(150)
    val car2 = Car.Factory.makeCar(150)
    println(Car.cars.size) 
    
    - 결과 - 
    2
}

object 키워드 활용법은 또있는데 (익명 객체 활용법도 있긴 있음)
companion object 키워드로 static 비스무리하게 사용할 수 있습니다.
(static과 동일한 기능은 아님!)

Inner Class 형태로 생성이 되게 됩니다.
이것도 마찬가지로 똑같이 싱글톤 형태이기 때문에
단 한번만 메모리에 적재됩니다.

느낌점

코틀린에서 Class 쓰는법에 대해 공부해봤는데
공부하면 공부할수록 너무 편리한 기능들만 있어서
자바로 못돌아갈것같다....

profile
실력있는 개발자가 되보자!

0개의 댓글

관련 채용 정보