본문 바로가기
언어 공부/Kotlin

[Kotlin] 4. 클래스와 생성자(for레이블)

by krapoi 2021. 11. 17.
반응형

이번에 클래스와 생성자에 대해 배워왔다.

 

점점 배울수록 신기한 언어인 것 같다.

 

일단 여기 클래스는 자바와 다른 것이 무엇이냐면 클래스에 매개변수가 붙는다.

class Human(var name:String, var age:Int){
 
}

대충 Human 클래스를 만들었을 때 이런 식으로 클래스를 만들 수 있다.

사용하는 방식이 자바의 추상 메서드와 비슷한 느낌이 들었다.

 

물론 클래스이기 때문에 여기에 함수를 추가할 수 도 있다.

 

class Human(var name:String, var age:Int){
    fun say(){
        println("이름 : $name, 나이 : $age")
    }

}

이런 식으로 say 함수를 만들어 주었다.

참고로 print문 안에 $표시를 하면 변수로 인식한다고 한다.

이건 정학하게는 모르겠다.

 

이런 식으로 함수를 만들고

변수에 선언하여 메인에서 실행할 수 도 있다.

class Human(var name:String, var age:Int){
    fun say(){
        println("이름 : $name, 나이 : $age")
    }

}
fun main() {
    val a = Human("abc",16)
    a.say()
  
}

val a = Human("abc",16). say()

로 한 문장으로도 실행이 가능하긴 하다.

 

이제 생성자로 넘어가 보자

 

여기는 생성자가 자바처럼 클래스의 이름을 따라가는 것이 아니라 클래스 안에 init을 적어주고 중괄호 안에 실행문을 적는다.

class constructor(var name:String, var age:Int) {
    init {
        println("이름 : ${this.name}, 나이 : ${this.age}")
    }
}

이런 식으로 개조가 가능하다.

 

그리고 보조 생성자가 있는데

이건 디폴트 값을 설정하는 거다.

대충 이름은 다른데 나이가 같다고 하면 일일이 나이를 적을 필요가 없으니 디폴트 값으로 설정하는 것이다.

이건 자바처럼 클래스의 이름을 그대로 가져온다.

 

class constructor(var name:String, var age:Int) {
    init {
        println("이름 : ${this.name}, 나이 : ${this.age}")
    }

    constructor(name: String):this(name,18){
        println()
    }

}

클래스명(매개변수) : this로 이 클래스의 보조 생성자를 만들어 주고

this(name,18)로 name의 기본값을 18로 정해준다.

메인에서 실행해보자.

class constructor(var name:String, var age:Int) {
    init {
        println("이름 : ${this.name}, 나이 : ${this.age}")
    }

    constructor(name: String):this(name,18){
        println()
    }

}

fun main() {
    var a = constructor("a", 17)
    var b = constructor("b", 18)
    var c = constructor("c", 19)

    var d = constructor("d")
    var e = constructor("e")
    var f = constructor("f")

}

a, b, c 부분은 init을 실행하는 부분이고,

d, e, f부분은 init과 constructor(name:...)..... 이렇게 보조 생성자를 이용해 자동으로 name을 채워준다.

 

아 마지막으로 루프 for문에 대해 말하겠다.

for문에 같이 포스팅했어야 했는데, 이번에 함수 배우며 같이 알게 된 거라 지금이라도 올린다.

 

a@for(i in 1..10){
        for(j in 1..2){
            if(i == 2 && j == 2) break@a
            println(i)

        }
    }

이런 식으로 for문 앞에 레이블명@for... 식으로 쓴다.

 

또한 continue나 break를 쓸 때 루프 전체를 걸고 싶다면 

break@레이블명 or continue@레이블면으로 걸 수 있다.

원래 같으면 break를 2번 걸어 야하지만 그런 번거로움을 덜 수 있는 방법이다.

 

반응형

'언어 공부 > Kotlin' 카테고리의 다른 글

[Kotlin] 3. 반복문  (0) 2021.11.16
[Kotlin] 2. 배열과 형변환  (0) 2021.11.15
[Kotlin] 1. 변수 사용법  (0) 2021.11.14
[Kotlin] 0. 코틀린 배우기 시작  (0) 2021.11.11