클래스
- 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 |