본문 바로가기
2학년 2학기/모바일 소프트웨어 - 코틀린

Class(1) - 클래스 선언과 생성자

by kkkkk1023 2024. 9. 30.

 

클래스 및 객체

 

// 클랙스 선언 - 캡슐화
class Person {

    // 프로퍼티
    val name: String = "Kim"
    var age: Int = 24
    var isMarried: Boolean = false

    //메서드
    fun getName() = println("Your name is ${this.name}")

}



fun main() {
    val p = Person() //기본 생성자 호출

    //dot-notation
    println(p.name) //Kim

}

 

이렇게 클래스를 선언하고 main함수에서 클래스의 객체를 선언해서 해당 클래스에 있는 요소들에 접근할 수 있다.

 

 

 

하지만 클래스를 사용하는 이유는 커스텀 타입을 만들기 위해서이다. 즉, 여러 데이터를 같은 타입으로 사용하기 위함이라는 것이다.

 

위 방식처럼 사용하면 하나의 데이터만 사용할 수 없기 때문에 진짜 클래스 타입을 만들어보자. 진짜 클래스 타입을 만들기 위해서는 생성자가 필요하다.

 


생성자

 

생성자에는 기본 생성자, 보조 생성자가 있다.

 

기본 생성자는 클래스 머리에서 선언한 생성자 형태이고, 보조 생성자는 클래스 몸에서 constructor라는 키워드를 사용한 생성자 형태이다.

 

 

기본 생성자(주 생성자)

클래스 선언부에 바로 정의된다.

: 프로퍼티는 자동으로 초기화된다.

: init에서는 생성자가 초기화 되고 진행되어야 할 코드를 작성한다.

: 기본 생성자는 간단한 기본적인 생성 작업에 사용한다.

 

class Person(val name: String, var age: Int, var isMarried: Boolean) {

    // init 블록 (초기화 작업이 필요하면 사용 가능)
    init {
        println("Person 객체가 생성되었습니다.")
    }

    fun getName() = println("Your name is ${this.name}")
}

 

 

 

보조 생성자

: 클래스 본문에 정의된다.

: 프로퍼티를 수동으로 초기화해야 한다. (this.name = name)

: 여러 개의 보조 생성자를 가질 수 있다. 다만 매개변수의 개수는 달라야한다!

: 보조 생성자는 다양한 생성 방법을 제공할 때  사용한다.

 

class Person {
    val name: String
    var age: Int
    var isMarried: Boolean

    // 보조 생성자 - 매개변수 3개
    constructor(name: String, age: Int, isMarried: Boolean) {
        this.name = name
        this.age = age
        this.isMarried = isMarried
    }
    
    // 보조 생성자 - 매개변수 2개
    constructor(name: String, age: Int,) {
        this.name = name
        this.age = age
        this.isMarried = false
    }

    fun getName() = println("Your name is ${this.name}")
}

 

 

 

 

예외의 경우 - 기본 생성자(주 생성자)를 통해서 프로퍼티의 일부를 초기화시키고, 보조 생성자로 남은 프로퍼티를 초기화시켜야할 떄는 어떻게 해야할까?

 

예외의 경우

아래와 같이 남은 프로퍼티는 보조 생성자를 통해서 초기화를 진행한다. 이때 보조 생성자에 있는 this는 기본 생성자(주 생성자)를 의미한다.

 

class Person(val name: String,
             var age: Int,
             var isMarried: Boolean) {
    var nickname: String = ""
    
    constructor(name: String, age: Int, isMarried: Boolean, nickname: String) : this(name, age, isMarried) {
        this.nickname = nickname
    }

    fun getName() = println("Your name is ${this.name}")

}

 

 

 

'2학년 2학기 > 모바일 소프트웨어 - 코틀린' 카테고리의 다른 글

Class(1) - 상속  (0) 2024.10.01
Class(1) - getter, setter  (0) 2024.10.01
Kotlin_Basic03 - when(2)  (0) 2024.09.20
Kotlin_Basic03 - when(1)  (0) 2024.09.20
Kotlin_Basic03 - null 처리  (0) 2024.09.20