$30 off During Our Annual Pro Sale. View Details »

Java와 함께 사용하는 Kotlin

TaeHwan
July 17, 2017

Java와 함께 사용하는 Kotlin

TaeHwan

July 17, 2017
Tweet

More Decks by TaeHwan

Other Decks in Technology

Transcript

  1. Java৬ ೣԋ ࢎਊೞח Kotlin
    Taehwan

    View Slide

  2. Javaীࢲ Kotlin ࢎਊೡ ٸ
    • null ઱੄/3೦ध
    • JvmOverloads
    • Static Fields
    • Class ࢚ࣘ

    View Slide

  3. null ઱੄

    View Slide

  4. null ઱੄
    // class name String.kt
    fun merge(a: String, b: String) = "$a $b"

    View Slide

  5. null ઱੄ - javaীࢲ ࠗܳ ٸ
    // class name String.kt
    fun merge(a: String, b: String) = "$a $b"
    public class Sample {
    @Test
    public void sample() {
    System.out.println("merge " + StringKt.merge("A", "B"));
    }
    }

    View Slide

  6. null ઱੄ - javaীࢲ ࠗܳ ٸ - value
    // class name String.kt
    fun merge(a: String, b: String) = "$a $b"
    public class Sample {
    private String a = "A";
    private String b = "B";
    @Test
    public void sample() {
    System.out.println("merge " + StringKt.merge(a, b));
    }
    }

    View Slide

  7. null ઱੄ - javaীࢲ ࠗܳ ٸ - null value
    // class name String.kt
    fun merge(a: String, b: String) = "$a $b"
    public class Sample {
    private String a = "A";
    private String b = "B";
    @Before
    public void setUp() {
    a = null;
    }
    @Test
    public void sample() {
    System.out.println("merge " + StringKt.merge(a, b));
    }
    }

    View Slide

  8. null ઱੄ - java ௏٘ value null
    // class name String.kt
    fun merge(a: String, b: String) = "$a $b"
    public class Sample {
    private String a = "A";
    private String b = "B";
    @Before
    public void setUp() {
    a = null;
    }
    @Test
    public void sample() {
    System.out.println("merge " + StringKt.merge(a, b));
    // java.lang.IllegalArgumentException:
    // Parameter specified as non-null is null:
    // method tech.thdev.myapplication.StringKt.merge
    }
    }

    View Slide

  9. null ઱੄ - javaীࢲ ࠗܳ ٸ - null value
    // class name String.kt
    fun merge(a: String, b: String) = "$a $b"
    public class Sample {
    private String a = "A";
    private String b = "B";
    @Before
    public void setUp() {
    // a = null;
    }
    @Test
    public void sample() {
    a = null;
    System.out.println("merge " + StringKt.merge(a, b));
    // ਕ׬ ݫद૑ : Argument 'a' might be null less...
    }
    }

    View Slide

  10. Ӓېࢲ
    • nullable ୊ܻ
    • ? ೞաݶ ୊ܻ оמ
    // class name String.kt
    fun merge(a: String?, b: String?) = "$a $b"

    View Slide

  11. प೯ೞݶ ׮਺୊ۢ
    • return : merge null B
    // class name String.kt
    fun merge(a: String?, b: String?) = "$a $b"

    View Slide

  12. null ୊ܻח? - if != null
    // class name String.kt
    fun merge(a: String?, b: String?) = {
    if (a != null && b != null) {
    "$a $b"
    }
    }

    View Slide

  13. null ୊ܻח? - if != null Ѿҗ
    • return : merge Function0
    // class name String.kt
    fun merge(a: String?, b: String?) = {
    if (a != null && b != null) {
    "$a $b"
    }
    }

    View Slide

  14. null ୊ܻח? - if != null Ѿҗ
    • return :
    // class name String.kt
    fun merge(a: String?, b: String?) = {
    if (a != null && b != null) {
    "$a $b"
    } else {
    ""
    }
    }

    View Slide

  15. 3೦ध

    View Slide

  16. 3೦ध
    • java
    String merge(String a, String b) {
    return (a != null ? a : "a") + " " + (b != null ? b : "b");
    }

    View Slide

  17. 3೦ध
    • java
    String merge(String a, String b) {
    return (a != null ? a : "a") + " " + (b != null ? b : "b");
    }
    • kotlin
    fun merge(a: String?, b: String?)
    = "${a != null ? a : "a"} ${b != null ? b : "b"}"

    View Slide

  18. 3೦ध
    • java
    String merge(String a, String b) {
    return (a != null ? a : "a") + " " + (b != null ? b : "b");
    }
    • kotlin
    fun merge(a: String?, b: String?)
    = "${a != null ? a : "a"} ${b != null ? b : "b"}"
    ޙߨ য়ܨ ߊࢤ

    View Slide

  19. 3೦ध - if else ୊ܻೞӝ
    // class name String.kt
    fun merge(a: String?, b: String?)
    = "${if (a != null) a else "a"} ${if (b != null) b else "b"}"

    View Slide

  20. 3೦ध - if else ୊ܻೞӝ
    // class name String.kt
    fun merge(a: String?, b: String?)
    = "${if (a != null) a else "a"} ${if (b != null) b else "b"}"
    ӡযࢲ फযਃ. ઴ৈ઱ࣁਃ.

    View Slide

  21. 3೦ध - if else ୊ܻೞӝ
    // class name String.kt
    fun merge(a: String?, b: String?)
    = "${if (a != null) a else "a"} ${if (b != null) b else "b"}"
    // class name String.kt
    fun merge(a: String?, b: String?)
    = "${a ?: "a"} ${b ?: "b"}"

    View Slide

  22. null ୊ܻח? - ইې৬ э੉ ୊ܻ೤द׮
    • return : merge a B
    // class name String.kt
    fun merge(a: String?, b: String?)
    = "${a ?: "a"} ${b ?: "b"}"

    View Slide

  23. Kotlinীࢲ Java ௏٘ ࢎਊೡ ٸח?

    View Slide

  24. Kotlinীࢲ Java ௏٘ ࢎਊೡ ٸח?
    • Annotationਸ ੜ ੸ਊೞ੗
    • @Nullable/@NotNull

    View Slide

  25. JvmOverloads

    View Slide

  26. JvmOverloads
    class Sample(
    val name: String,
    val age: Int = 0,
    val birthday: String = "2000-01-01") {
    init {
    println("name $name age $age birthday $birthday")
    }
    }

    View Slide

  27. JvmOverloads - javaীࢲ ࠗܰݶ

    View Slide

  28. JvmOverloads - javaীࢲ ೣԋ ࢎਊೞ۰ݶ?
    class Sample(
    val name: String,
    val age: Int = 0,
    val birthday: String = "2000-01-01") {
    constructor(name: String, age: Int): this(name, age, "2000-01-01")
    constructor(name: String): this(name, 0)
    init {
    println("name $name age $age birthday $birthday")
    }
    }

    View Slide

  29. JvmOverloads - javaীࢲ ೣԋ ࢎਊೞ۰ݶ?

    View Slide

  30. ӡয ӡয ӡয

    View Slide

  31. JvmOverloads - @JvmOverloads ୶оೞӝ
    • @JvmOverloads
    class Sample
    @JvmOverloads constructor(
    val name: String,
    val age: Int = 0,
    val birthday: String = "2000-01-01") {
    init {
    println("name $name age $age birthday $birthday")
    }
    }

    View Slide

  32. JvmOverloads - ѾҴ

    View Slide

  33. JvmOverloads - function
    @JvmOverloads fun f(a: String, b: Int = 0, c: String = "abc") {
    ...
    }

    View Slide

  34. JvmOverloads - function ഐ୹ java
    void f(String a, int b, String c) { }
    void f(String a, int b) { }
    void f(String a) { }

    View Slide

  35. Static Fields

    View Slide

  36. Static Fields - final static ੿੄ೞӝ
    • const/@JvmField
    class Key {
    companion object {
    const val TYPE_ZERO = 0
    @JvmField val TYPE_ONE = 1
    }
    }

    View Slide

  37. Static Fields
    class Key {
    companion object {
    const val TYPE_ZERO = 0
    @JvmField val TYPE_ONE = 1
    }
    }
    // Java
    class SampleTest {
    @Test
    public void sample() {
    System.out.println(Key.TYPE_ZERO);
    System.out.println(Key.TYPE_ONE);
    }
    }

    View Slide

  38. Class ࢚ࣘ

    View Slide

  39. Class ࢚ࣘ - Java
    public class TestOne {
    public void print() {
    System.out.println("TestOne");
    }
    }

    View Slide

  40. Class ࢚ࣘ - Java > Kotlin
    public class TestOne {
    public void print() {
    System.out.println("TestOne");
    }
    }
    class TestTwo : TestOne() {
    override fun print() {
    super.print()
    print("TestTwo")
    }
    }

    View Slide

  41. Class ࢚ࣘ - Java > Kotlin > Java
    public class TestOne {
    public void print() {
    System.out.println("TestOne");
    }
    }
    class TestTwo : TestOne() {
    override fun print() {
    super.print()
    print("TestTwo")
    }
    }
    public class TestThree extends TestTwo {
    }

    View Slide

  42. Class ࢚ࣘ

    View Slide

  43. Class ࢚ࣘ - Error??
    • Kotlin ௿ېझח ӝࠄ੸ਵ۽ abstract/interfaceо ইפݶ ࢚ࣘ੉ ࠛо
    • open੉ۄח ఃਕ٘ܳ ݺद੸ਵ۽ ੸যષਵ۽ॄ ࢚ࣘ੉ оמ

    View Slide

  44. Class ࢚ࣘ
    open class TestTwo : TestOne() {
    override fun print() {
    super.print()
    print("TestTwo")
    }
    }
    public class TestThree extends TestTwo {
    override fun print() {
    super.print()
    print("TestThree")
    }
    }

    View Slide

  45. End...
    RGP Koreaীࢲ উ٘۽੉٘ ѐߊ੗ܳ ଺Ҋ ੓
    যਃ!
    kotlin ೣԋ ೞप ࠙!

    View Slide