본문 바로가기
모바일/Kotlin

[Kotlin] 코틀린 클래스(Class, Class 내 init)

by drCode 2021. 3. 31.
728x90
반응형

안녕하세요

 

이번 포스팅은 코틀린에서의 클래스 사용에 대해 다뤄보겠습니다

 

클래스를 사용할 때는 먼저 객체 지향 프로그래밍(OOP)에 대해 알아야합니다

 

객체란?  --> 이름이 있는 모든 것을 의미하죠

 

객체 지향 프로그래밍의 반댓말이 있죠

 

절차 지향 프로그래밍인데요, 코드를 위에서부터 아래로 실행하여 순차적으로 진행되는 프로그래밍입니다.

 

객체 지향 프로그래밍은 객체를 만들어서 객체에게 일을 시켜서 해결하는, 절대적인 순서에 상관없이 객체로 프로그래밍을 하는 방식입니다

ex) 선수, 심판, 경기장, 관중 -> 축구 게임 등

 

클래스를 선언하는 방법은 여러가지가 있습니다.

 

 1. 클래스 내에 어떠한 필드나 메서드가 없이 선언하는 방법입니다.

//클래스(설명서) 만드는 방법 (1)
class Car constructor(var engine: String, var body: String) {

}

 

2. 클래스 내에 필드가 있고, 필드를 초기화하는 생성자가 있는 방법입니다.

class SuperCar {
    var engine : String
    var body : String
    var door : String

    // 생성자
    constructor(engine: String, body: String, door : String) {
        this.engine = engine
        this.body = body
        this.door = door
    }
}

 

3. 생성자를 부분적으로 초기화하는 방법입니다.

class Car1 constructor(engine: String, body: String) {
    var door : String = "" // 초기화 해줘야 에러가 안남

    // 생성자
    constructor(engine: String, body: String, door: String) : this(engine, body) {
        this.door = door
    }

}

 

 

4. 생성자를 오버로딩하여 초기화하는 방법입니다.

class Car2 {
    var engine : String = ""
    var body : String = ""
    var door : String = ""

    constructor(engine: String, body: String) {
        this.engine = engine
        this.body = body
    }

    constructor(engine: String, body: String, door: String) {
        this.engine = engine
        this.body = body
        this.door = door
    }
}

 

5. 클래스 내에 메서드를 쓰는 방법입니다.

class RunableCar(engine: String, body: String) {

    fun ride() {
        println("탑승 하였습니다")
    }

    fun drive() {
        println("달립니다!")
    }

    fun navi(destination : String) {
        println("$destination 으로 목적지가 설정되었습니다.")
    }

}

 

6. init을 사용하여 인스턴스 생성 시 제일 먼지 실행하는 문장을 만든 방법입니다.

class RunableCar2 {
    var engine : String
    var body : String

    constructor(engine: String, body: String) {
        this.engine = engine
        this.body = body
    }

    init {
        println("RunableCar2가 만들어졌습니다.")
    }

    fun ride() {
        println("탑승 하였습니다")
    }

    fun drive() {
        println("달립니다!")
    }

    fun navi(destination : String) {
        println("$destination 으로 목적지가 설정되었습니다.")
    }
}

 

7. 메서드를 오버로딩할 수도 있습니다.

class TestClass() {
    fun test(a : Int) {
        println("up")
    }

    fun test(a: Int, b : Int) {
        println("down")
    }
}

 

다음은 메인함수입니다.

fun main(args : Array<String>) {

    // 클래스 (설명서)를 통해서 만드는 방법
    // -> 인스턴스화 -< 인스턴스(객체)
    Car("v8 engine", "big")

    val number : Int = 10
    var bigCar = Car("v8 engine", "big")

    // 우리가 만든 클래스(설명서)는 자료형이 된다.
    var bigCar1 : Car = Car("v8 engine", "big")
    var superCar : SuperCar = SuperCar("good engine", "big", "white")

    // 인스턴스가 가지고 있는 기능을 사용하는 방법
    var runableCar : RunableCar = RunableCar("simple engine", "short body")
    runableCar.ride()
    runableCar.navi("부산")
    runableCar.drive()

    // 인스턴스의 멤버 변수에 접근하는 방법
    val runableCar2 : RunableCar2 = RunableCar2("nice engine", "long body")
    println(runableCar2.body)
    println(runableCar2.engine)

    val testClass : TestClass = TestClass()
    testClass.test(1)
    testClass.test(1,2)
}
728x90
반응형

댓글