JiwonDev

#1 ์ฝ”ํ‹€๋ฆฐ(Kotlin) ์ด๋ž€

by JiwonDev

(JetBrain์—์„œ ์ฝ”ํ‹€๋ฆฐ์„ ๋งŒ๋“  ์‚ฌ๋žŒ์ด ์•Œ๋ ค์ฃผ๋Š”) ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ฝ”ํ‹€๋ฆฐ ๊ฐ•์˜

 

Kotlin for Java Developers

JetBrains์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. The Kotlin programming language is a modern language that gives you more power for your everyday tasks. Kotlin is concise, ... ๋ฌด๋ฃŒ๋กœ ๋“ฑ๋กํ•˜์‹ญ์‹œ์˜ค.

www.coursera.org

 

 

๐Ÿ’ญ ์ฝ”ํ‹€๋ฆฐ(Kotlin)์ด ๋ญ์ฃ 

JetBrain์—์„œ ๋งŒ๋“  JVM ์–ธ์–ด์ด๋‹ค.

์˜์™ธ๋กœ ์ž๋ฐ” = JVM์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ์ปดํŒŒ์ผ ํ›„ ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์–ด๋–ค ์–ธ์–ด๋“ ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • 2011๋…„ ํƒ„์ƒํ–ˆ๊ณ , 2017๋…„ ๊ตฌ๊ธ€-์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ Kotlin์„ ๊ณต์‹์ ์ธ ๊ธฐ๋ณธ์–ธ์–ด๋กœ ์ง€์ •ํ•˜๋ฉฐ ๋งค์šฐ ์œ ๋ช…ํ•ด์กŒ๋‹ค.

์• ์ดˆ์— IntelliJ, Android Studio ๋ฅผ ๋งŒ๋“  ๊ณณ์ด๋ผ์„œ, ํ•ด๋‹น IDE๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”ํ‹€๋ฆฐ์„ ์ •๋ง ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด๋‚ธ๋‹ค. Java์™€ ์ƒํ˜ธ์šด์šฉ์„ฑ์„ ๊ณ ๋ คํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ์–ธ์–ด๋ผ์„œ, ์ž๋ฐ”์™€ 100% ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
    ๋‚ด๋ถ€ ๋™์ž‘์ด ๋˜‘๊ฐ™์•„์„œ ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ฝ”ํ‹€๋ฆฐ์„ ์‰ฝ๊ฒŒ ์ž…๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปดํŒŒ์ผ ์ดํ›„๋Š” ์ž๋ฐ”์™€ ๋™์ผํ•˜๋‹ค. (IntelliJ ๊ธฐ๋Šฅ์œผ๋กœ Java <-> Kotlin ์‹ค์‹œ๊ฐ„ ์ฝ”๋“œ ๋ณ€ํ™˜๋„ ๊ฐ€๋Šฅ)

 

  • ์ฐธ๊ณ ๋กœ ์ฝ”ํ‹€๋ฆฐ ์žฌ๋‹จ์—์„œ๋Š” JVM๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ(ex Javascript) ์–ธ์–ด์ง€์›์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค.

๋ชจ๋“ ๊ฑธ ์ฝ”ํ‹€๋ฆฐ ํ•˜๋‚˜๋กœ! ์ง„์งœ ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ํŽธํ•˜๊ฒ ๋‹ค.

 

  • Java์™€ ๋‹ค๋ฅด๊ฒŒ ํž™-ํ•œ ์–ธ์–ด์ด๋‹ค. ํ•จ์ˆ˜ํ˜•, ๋ถˆ๋ณ€์„ฑ๋“ฑ ์–ธ์–ด ์ฐจ์›์—์„œ ๋งŽ์€ ํŽธ์˜๊ธฐ๋Šฅ๊ณผ ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

Java๋ฅผ ๋งˆ์น˜ Python Ruby์ฒ˜๋Ÿผ ํž™-ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ = ์ฝ”ํ‹€๋ฆฐ

 

 

๐Ÿ’ญ ๊ทธ๋Ÿผ Kotlin์ด ์ž๋ฐ” ์ƒ์œ„ํ˜ธํ™˜์ธ๊ฐ€์š”?

์™„๋ฒฝํ•œ ์ž๋ฐ” ์ƒ์œ„ํ˜ธํ™˜์ด๋ผ๊ณ  ๋ณด๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ์‹ค์ œ ์‚ฌ์šฉํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹จ์ ๋“ค์ด ์กด์žฌํ•œ๋‹ค.

  • ์ปดํŒŒ์ผ/๋นŒ๋“œ ํƒ€์ž„์ด Java์— ๋น„ํ•ด์„œ ๋Š๋ฆฐ ํŽธ์ด๋‹ค. (๊ฑฐ์˜ 2๋ฐฐ ์ฐจ์ด)
    ๋ฌผ๋ก  ์ด๋Š” ๊ณ„์†ํ•ด์„œ ๊ฐœ์„ ํ•˜๊ณ  ์žˆ๊ธดํ•˜๋‹ค. 2021๋…„ ๊ตฌ๊ธ€์—์„œ ๋นŒ๋“œํƒ€์ž„์„ 2๋ฐฐ ์ด์ƒ ํ–ฅ์ƒ์‹œํ‚ค๊ฒ ๋‹ค๊ณ  ๋ฐœํ‘œํ–ˆ๋‹ค. 

  • ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹Œ, ๊ธฐ์กด ์ž๋ฐ”ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ์—๋Š” ์–ด๋ ค์›€์ด ๋งŽ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด Kotlin์€ final class๊ฐ€ ๊ธฐ๋ณธ ๊ฐ’์ด๋‹ค. ์ƒ์†์„ ๋”ฐ๋กœ ํ—ˆ์šฉํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์Šคํ”„๋ง์˜ CGLIB๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋‚˜์˜จ์ง€ ์–ผ๋งˆ ์•ˆ๋œ ์–ธ์–ด๋ผ์„œ, ์ปค๋ฎค๋‹ˆํ‹ฐ๋‚˜ ๋„๊ตฌ๊ฐ€ Java์— ๋น„ํ•ด ์••๋„์ ์œผ๋กœ ๋ถ€์กฑํ•˜๋‹ค.
    ๊ณ„์† ๊ฐœ์„ ์„ ํ•˜๊ณ ๋Š” ์žˆ์ง€๋งŒ.. FindBugs, PMD, Checkstyles, Lombok ๋“ฑ ๊ธฐ์กด ๋„๊ตฌ๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜์ด ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

  • ๋‚˜์˜จ์ง€ ์–ผ๋งˆ ์•ˆ๋œ ์–ธ์–ด๋ผ์„œ, ์‹ค๋ฌด์—์„œ (์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์ƒ๊ธด ๋ฌธ์ œ,  Best Practice) ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.

์•ž์—์„œ [์ž๋ฐ” โžก ์ฝ”ํ‹€๋ฆฐ]๋Š” ์‰ฝ๋‹ค๊ณ  ๋งํ–ˆ์ง€๋งŒ ๋ฐ˜๋Œ€๋กœ [์ฝ”ํ‹€๋ฆฐ โžก ์ž๋ฐ”]๋กœ ๋Œ์•„๊ฐ€๊ธฐ๋Š” ์ •๋ง ๋งค์šฐ ์–ด๋ ต๋‹ค.

๊ทธ๋ž˜์„œ ๋Œ€๊ธฐ์—…, ์Šคํƒ€ํŠธ์—… ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ๋กœ ์ฝ”ํ‹€๋ฆฐ์„ ์ข…์ข… ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์•„์ง๊นŒ์ง„ ์ž๋ฐ” ์‚ฌ์šฉ๋ฅ ์ด ์••๋„์ ์œผ๋กœ ๋†’์€ํŽธ์ด๋‹ค.

 

๋ฌด์—‡๋ณด๋‹ค ์ž๋ฐ”๋„ JDK๋ฅผ 6๊ฐœ์›”๋งˆ๋‹ค ์—…๋ฐ์ดํŠธํ•˜๋ฉฐ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ณ ์žˆ๋‹ค.

์˜ค๋ผํด์ด ์ž๋ฐ”๋ฅผ ์ธ์ˆ˜ํ•˜๋ฉฐ ์•ˆ์ข‹์€ ์†Œ๋ฌธ(?)์ด ๋Œ์•˜์ง€๋งŒ, Java EE๋ฅผ Jakarta๋กœ ๋ณ€๊ฒฝํ•˜๋ฉฐ ์˜คํ”ˆ์†Œ์Šค ์žฌ๋‹จ์— ๋ฌด๋ฃŒ๋กœ ํ’€์—ˆ๋‹ค.

์Šคํ”„๋ง6๋ถ€ํ„ฐ๋Š” JDK17์ด ๊ธฐ๋ณธ์ด ๋œ๋‹ค๊ณ ํ•˜๋‹ˆ, ์ ์–ด๋„ ์ฝ”ํ‹€๋ฆฐ์ด ๋œฌ๋‹ค๊ณ  ํ•ด์„œ ์ž๋ฐ”๊ฐ€ ๋งํ•  ์ผ์€ ์—†์„ ๋“ฏํ•˜๋‹ค.

 

 

๐Ÿ’ญ ์ฝ”ํ‹€๋ฆฐ ํ›‘์–ด๋ณด๊ธฐ

์ฐธ๊ณ ๋กœ IntelliJ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, Convert Java <-> Kotlin ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. (* show bytecode ๊ธฐ๋Šฅ๋„ ์žˆ๋‹ค.)

 

๐Ÿ“Œ Person ๊ฐ์ฒด ์ •์˜ํ•˜๊ธฐ

// Person.java
public final class Person {

    private final String name;
    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

 

์ด๋Š” ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

// Person.kt
class Person(val name: String, val age: Int) // ์ด๊ฒŒ ๋์ด๋‹ค. ์ง„์งœ๋ฃจ!

 

์•ž์— data ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

???? ์‹คํ™”์ธ๊ฐ€

 

๐Ÿ“Œ ๋ฉ”์„œ๋“œ

์ž๋ฐ”์™€ ์ฝ”ํ‹€๋ฆฐ์„ ๋น„๊ตํ•ด๋ณด๋ฉด, ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ฐธ๊ณ ๋กœ ์ฝ”ํ‹€๋ฆฐ์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ผ๊ธ‰-์‹œ๋ฏผ์ด๋‹ค. ์ฆ‰ Class๋กœ ๊ฐ์‹ธ์ง€ ์•Š๊ณ  ํ˜ผ์ž ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

// JAVA
// <ReturnType> <FunctionName>(<Parameter Type> <Parameter Name>) 
int sum(int a, int b){
    return a+b;
}
// Kotlin
// fun <FunctionName>(<Parameter Name> : <Parameter Type>):<Return Type>
fun sum(a :Int, b :Int) : a + b

 

๐Ÿ“Œ ๊ฐ์ฒด ์‚ฌ์šฉํ•˜๊ธฐ

// Java
public final class MainClass {

    public static void main(String[] args) {
        Person person = new Person("name", 20);
        System.out.println(person);
    }
}

 

์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ผ๊ธ‰ ์‹œ๋ฏผ์ด๋‹ค. ํด๋ž˜์Šค์— ๊ฐ์‹ธ์ง€ ์•Š๊ณ ๋„, ํ˜ผ์ž ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋˜ํ•œ new ํ‚ค์›Œ๋“œ๋ฅผ ๋”ฐ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

fun main(args: Array<String>) {
    val person = Person("name", 20)
    println(person)
}

 

 

 

๐Ÿ“Œ ๊ทธ ์™ธ

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋งŽ์ด ๋ณด๋˜ ๋ฐฉ์‹์„, ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ๊ฑฐ์˜ ๋‹ค ์ง€์›ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
ํƒ€์ž…์ถ”๋ก ์„ ์‚ฌ์šฉํ•œ ์ƒ๋žต, ํž™-ํ•œ ๋ฌธ๋ฒ•๊ณผ ๋„๊ตฌ๋“ค์ด๋‹ค.

 

๋ฌผ๋ก  ์ž๋ฐ”์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ์‹์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
์‹ค์ œ๋กœ Convert Java to Kotlin ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ์กด ์ž๋ฐ” ๋ฌธ๋ฒ• ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ์ฑ„๋กœ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. 

Kotlin์œผ๋กœ ์ž‘์„ฑํ•œ if-else

 

์†Œ๊ฐœ๋Š” ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๊ณ , ๋‹ค์Œ ๊ธ€์—์„  ์ฝ”ํ‹€๋ฆฐ ๊ธฐ์ดˆ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด์ž 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ