본문 바로가기
Android/Kotlin

1. 클래스

by 일상 속 둔치 2018. 12. 25.

constructor (생성자)

 코틀린에서도 클래스에 constructor를 지정할 수 있다. 코틀린은 자바와는 달리 클래스 내부가 아니라 선언부에서 생성자를 만들 수 있다.

 

class Person(name:String = "untitle") { constructor(name:String, age:Int):this(name) }

 

 만약 생성자가 여러 개가 필요한 경우 클래스 내부에 constructor 키워드를 사용하여 정의할 수 있다. 기본 생성자 외에는 this를 꼭 호출해주어야한다. 선언부에서 생성자를 만드는 경우 constructor 키워드는 생략 가능하다. 또한 위 코드처럼 디폴트 생성자에 기본값을 넣어 줄 수도 있다.

* 코틀린은 클래스를 생설할때 new 키워드를 사용하지 않는다.

 

 생성자에 바디를 생성하여 값을 초기화하거나 입력받은 값을 응용하는 작업이 필요할 수 있다. 코틀린에서는 init{} 을 사용하여 인자값들을 처리할 수 있다.

class Person(var name:String?){
    init{
        if(name.isNullOrBlank()) name = "No Name"
    }
}

* String에서 ?키워드는 null인지 판단하는 기호이다. 이후 자세히 설명하겠다.

 

 

변수

 크게 var와 val이라는 키워드가 사용된다. var는 값이 변할 수 있는 변수를 지정하는 변수이다. var는 항상 변수형을 선언해주어야 한다. val은 final 과 같이 수정이 불가능한 변수이다. val은 변수형을 선언하지 않아도 자동으로 정해주는 스마트 타입 캐스팅으로 정해진다. 코틀린에서는 값이 바뀌지 않는 변수라면 val을 사용하는 것을 권장한다. 또한 var나 val을 선언해주지 않으면 기본적으로 val으로 인식한다.

 클래스에 생성한 맴버변수는 클래스객체이름.변수명 으로도 접근이 가능하다.

 get()/set()을 오버라이드해서 사용하고 싶으면 field라는 키워드를 사용해서 변수값에 접근해야한다. 오버라이드시 override라는 키워드를 해당 변수, 함수 앞에 선언해준다.

 

접근제한자

 자바에서 사용하던 public, private, protected도 있지만 1가지 더 추가되었다. internal이라는 키워드이다. 기존의 3가지는 사용방법과 쓰임이 같다. internal 키워드는 클래스나 변수는 같은 모듈에서 접근이 가능하도록 하는 인자이다. 여기서 모듈의 정의가 자바와 조금 다르다. 자바의 모듈은 기능이 비슷한 클래스들의 집합이었다면 코틀린의 모듈은 컴파일의 집단이다. 즉, gradle에 묶여서 같이 컴파일되는 파일 전체를 의미한다. 코틀린에서도 접근제한자를 명시하지 않으면 public이 기본값이다.

 

 

상속

 open이라는 키워드가 사용되는 데 open이라는 키워드는 상속이 가능하다는 의미이다. open이라는 키워드가 없으면 상속을 받을 수 없다. 상속 받을 때는 extend가 아닌 콜론(:)을 사용한다. 또한 앞서 말햇드시 부모클래스에 open이나 abstract 키워드가 있어야만 상속이 가능하다.

open class Figure(var vertex: Int){
    open fun onFinishDraw(){
    }
}

 코틀린에도 interface 클래스가 있는 데 클래스 내부 함수가 바디를 가질 수 있고 맴버 변수를 추상 변수로 사용가능하다. 또한 get()/set() 역시 사용가능하다. interface 상속도 implement가 아니라 콜론(:)을 사용한다.

 상속받은 생성자의 초기화시에는 this가 아니라 super키워드를 사용한다.

class CustomDialg: AlertDialog
{
    constructor(context:Context):super(context)
}

* 자바의 Object와 비슷한 Any클래스가 있다.

 

기타 클래스

data 클래스

data class Person(var name:String, var age:Int)

 클래스 중에 데이터만 갖는 클래스이다. 반드시 디폴트 생성자를 선언해주어야하고 var,val 키워드를 꼭 명시해주어야한다. 컴파일러에서는 equlas(), toString()을 자동으로 생성해준다.

 

enum 클래스

enum Color{
     RED(0xFF0000),
     GREEN(0x00FF00),
     BLUE(0x0000FF);
     int rgb;
     Color(int color){
         rgb = color;
     }
}

 타입을 담는 클래스이다.

 

sealed 클래스

sealed class Expression{
}

 프로그램 내부에서 상속할 수 있고 외부 모듈에서 상속 못 하게 하는 경우에 사용한다. 쉽게말하면 같은 파일안에 있지 않은 클래스들은 상속 받을 수 없다. 자바에서는 클래스에 final이나 private을 사용하지 않는 이상 클래스가 상속가능하다.

 

 

'Android > Kotlin' 카테고리의 다른 글

[Kotlin/Java] instanceof를 지양하자  (0) 2023.05.05
3. 반복문, 조건문  (0) 2018.12.31
2. 함수  (0) 2018.12.31
[Intro] 안드로이드 공식언어?  (0) 2018.12.25

댓글