모르는게 많은 개발자

[Kotlin] 클래스 선언 본문

코틀린

[Kotlin] 클래스 선언

Awdsd 2020. 4. 7. 02:45
반응형

 코틀린 언어가 안드로이드 공식언어로 채택된 현재 자바로만 안드로이드 개발을 하면 안될 것  같아 코틀린을 공부하고 있다.

앞으로 코틀린의 문법을 계속 포스팅할 계획이다. 오늘은 클래스 구조와 선언 방법을 포스팅 하려 한다.

 

1. 클래스 기본 구조

class Person constructor() {
}

코틀린 코드의 기본적인 구조이다. 자바랑 비교했을 때 다를 바 없어보이지만 Person옆에 constructor( ) 있다는게 다르다는 것을 알 수 있다. 뜻 그대로 constructor( )를 통해 생성자를 정의 할 수 있다. 즉, ( )안에는 변수들이 들어갈 수 있다.

 

//constructor 생략 가능
class Person(var a:String, val b:Int) {
    
}

이런식으로 생성자의 인자를 정의할 수 있다. 인자의 의미는 a라는 이름의 String 변수와 b라는 Int 변수를 인자로 받겠다라는 뜻이다.

아마 지금 var와 val의 의미가 궁금할 것이다.

  • var : 수정 가능한 변수
  • val : Java의 final처럼 수정이 불가능한 변수
class Person(a:String, b:Int) {
    
}

이런식으로 변수앞에 var, val를 선언하지 않으면 기본적으로  val로 선언된다.

 

2. 클래스 생성자

만약, 생성자를 2개이상 만들고 싶을땐 어떡할까?

class Person(a:String, b:Int) { 
    constructor(a:String) : this(a, 10) {
        //Todo
    }
}

constructor라는 키워드를 사용해 새로운 생성자를 생성할 수 있다. 하지만 사용할 때 this를 사용해 상위 생성자를 호출해줘야한다.

  • 클래스 이름 옆에 선언된 생성자를 Primary Constructor
  • constructor 키워드를 사용해 만든 생성자들을 Secondary Constructor

 

class Person(a:String, b:Int=10) { 

}

//Person("asd", 0) -> a=asd b=0
//Person("awd") -> a=awd  b=10

또 다른 방법으로 Primary Constructor에 default값을 줘서 여러개의 생성자로 객체가 생성가능하게 할 수 있다.

 

3. init

Primary Constructor의 인자들을 초기화등 실행문을 하고 싶을때는 init 키워드를 사용한다. init 키워드는 여러번 선언할 수 있다.

class Person(var a:String, b:Int) {
    init{
        println("$a 1\n")
    }
    init{
        println("$b 3\n")
    }
    init{
        print("2\n")
    }

}
Person("asd",1) 객체 생성시

결과
asd 1

1 3

2

결과를 보면 객체 생성시 위에서부터 init이 차례대로 실행되는 것을 볼 수 있다.

 

4. 메소드(fun)

클래스에 안에 method를 정의하는 방법을 알아보자.

class Person(var a:String, b:Int) {
    var c:String = ""
    var d:Int = 0
    init {
        c = a
        d = b
    }
    fun prt() {
        println("$a$b$c$d")   //b를 출력하는 것에서 오류 발생!!
        		      //var, val를 선언안한 생성자 변수는 객체의 변수가 되지 않기 때문에 사용 불가
    }
}

메소드는 fun이라는 키워드를 통해 정의한다.

근데 여기서 중요한건 이 코드는 오류가 난다는 것이다. 생성자의 변수 b가 prt()에서는 사용할 수 없다.

왜냐하면 코틀린은 생성자 변수에 var, val을 선언해주면 생성자 변수가 객체의 변수가 되기 때문에 method에서 사용가능하지만 아무것도 선언하지않으면 위에 말했듯이 val로 선언되나 객체의 변수가 되지 않기 때문에 prt()에서 사용할 수 없다.

반응형

'코틀린' 카테고리의 다른 글

[Kotlin] 코틀린 문법 총정리  (4) 2020.04.24
Comments