클래스

- 1개의 primary constructor를 가진다.

- N개의 secondary constructor를 가진다.

- secondary constructor에서는 primary constructor를 호출해야 한다.

- primary constructor는 init() {...} 블록을 가진다.

- primary constructor에 정의된 변수는 전역 변수이다.

- 전역 변수는 default값을 가질 수 있다.

- default값을 정의한 클래스를 자바에서 사용하려면 @JvmOverloads 어노테이션을 적용해야 한다.

자바

public class Sample {

    private String name = "";

    private String name2 = "";

 

    Sample(String name) {

        this.name = name;

    }

    Sample(String name, String name2) {

        this.name = name;

        this.name2 = name2;

    }

}

코틀린

class Sample(val name: String, val name2: String) {

    init() {

        println("name : $name, name2 : $name2")

    }

    constructor(name: String) : this(name, "") {

        println("name : $name")

    }

}

 

 

 

 

 

상속

자바

default class

- Non final (재정의 가능)

abstract

- extends로 상속

interface

- implements로 상속

 

public class Sample extends abstract implements interface {

    Sample() {  }

}

 

코틀린

default class

- final (재정의 불가능)

- 재정의 하려면 open 키워드를 추가

 

상속은 콜론(:)으로 한다.

다중상속은 콤마(,)로 한다.

abstract와 interface의 순서는 상관없다.

 

class Sample : interface, abstract () {

    init() {  }

}

 

interface

자바

public interface Sample {

    int Type = 0;

    

    default void init() {

    }

 

    static void initstatic() {

    }  //call Sample.initstatic();

    

    void out();

}

코틀린

 

interface Sample() {

    val type: Int

 

    fun init() {

    }

    fun out()

}

 

변수를 자바처럼 사용하면 오류 발생

    val type = 0

 

companion object

- 자바에서 처럼 인터페이스에서 변수를 사용할수 있게 해주는 객체

interface Sample() {

    companion object {

        const val type: Int = 0

    }

    fun init() {  }

    fun out()

}

 

다중 상속

- 자바에서는 class의 init()만 접근가능.

- 코틀린에서는 super.init()을 할 경우 에러 발생 <타입>을 꼭 써줘야함.

자바

public interface InterfaceSample {

    default void init() {}

}

 

public abstract class AbstractSample {

    public void init() {}

}

public class Sample extends AbstractSample implements InterfaceSample {

    @Override

    public void init() {

        super.init();

    }

}

코틀린

interface InterfaceSample {

    fuc init() {}

}

 

abstract class AbstractSample {

    open fun init() {}

}

 

class Sample : InterfaceSample, AbstractSample() {

    override fun init() {

        super<InterfaceSample>.init()

        super<AbstractSample>.init()

    }

}

 

data class

자바

public final class User {

    private final long id;

    private final String name;

    private final String email;

 

    public final int getId() { return this.id; }

    public final String getName() { return this.name; }

    public final String getEmail() { return this.email; }

}

코틀린

data class User(val id: Long = 0,

                    val name: String? = null,

                    val email: String? = null)

 

 

 

 

 

 

 

Sealed class

- 다형성

sealed class Expr

data class Const(val number: Int) : Expr()

data class Sum(val e1: Expr, val e2: Expr) : Expr()

 

fun eval(expr: Expr): Int = when(expr) {

    is Const -> expr.number

    is Sum -> eval(expr.e1) + eval(expr.e2)

}

 

fun test() {

    eval(Sum(Const(0), Const(1)))

}

 

singleton

자바

public class Sample {

    private static Sample instance = new Sample();

    Sample() { }

    public Sample getInstance() {

        return instance;

    }

}

코틀린

object Sample

 

 

 

 

 

 

 

'Android' 카테고리의 다른 글

[Android] 코틀린 기본 문법 - 1  (0) 2019.04.09
[Android] Appcompat Library 란?  (0) 2019.04.08
[Android] retrofit 통신  (0) 2019.04.02
[Android] CustomListener 사용  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02

변수 타입

코틀린은 대문자로 시작

자바

double  :  123.5

float  :  123.5f

long  :  123L

int  :  123

short  :  16

byte  :  8

String

코틀린

Double  :  123.5

Float  :  123.5f

Long  :  123L

Int  :  123

Short  :  16

Byte  :  8

String

 

변수 선언

var 변수이름: 변수타입 = 값

자바

String name = "a";

final String name = "a";

코틀린

var name = "a"

val name = "a"

 

Null의 사용

코틀린은 Null을 허용하지 않는다 허용하려면 물음표(?)를 추가해야 한다

자바

String name = "a";

name = null;

코틀린

var name: String? = a

name = null

 

변수 Casting

자바 instanceof

Object object = "name";

int index = 0;

if (object instanceof Integer) {

    index = (int) object;

}

System.out.println("index : " + index);

 

 

 

 

 

 

코틀린 as 와 is

as의 사용

val a: Any? = "ABC"

val b: Int? = a as? Int

println("Out b $b") //Out b null

 

is의 사용

val a: Any? = "ABC"

val b: Int? = 0

if (a is Int) {

    b = a as? Int

}

println("Out b $b") //Out b 0

 

Elvis Operator

val a: Any? = "ABC"

val b: Int? = a as? Int ?: 0

println("Out b $b")

 

is와 when 활용

자바

Object object = "name";

int index = 0;

if (object instanceof Integer) {

    index = (int) object;

}

System.out.println("index : " + index);

코틀린

val a: Any? = "ABC"

when(a) {

    is Int -> println(a)

    is String -> println(a)

    else -> println("nothing")

} //print "ABC"

 

'Android' 카테고리의 다른 글

[Android] 코틀린 기본 문법 - 2  (0) 2019.04.09
[Android] Appcompat Library 란?  (0) 2019.04.08
[Android] retrofit 통신  (0) 2019.04.02
[Android] CustomListener 사용  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02

+ Recent posts