#1 ์ฝํ๋ฆฐ(Kotlin) ์ด๋
by JiwonDev
๐ญ ์ฝํ๋ฆฐ(Kotlin)์ด ๋ญ์ฃ
JetBrain์์ ๋ง๋ JVM ์ธ์ด์ด๋ค.
์์ธ๋ก ์๋ฐ = JVM์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ปดํ์ผ ํ ๋ฐ์ดํธ์ฝ๋๊ฐ ์์ฑ๋๋ฉด ์ด๋ค ์ธ์ด๋ ์ง ์ฌ์ฉํ ์ ์๋ค.
- 2011๋ ํ์ํ๊ณ , 2017๋ ๊ตฌ๊ธ-์๋๋ก์ด๋์์ Kotlin์ ๊ณต์์ ์ธ ๊ธฐ๋ณธ์ธ์ด๋ก ์ง์ ํ๋ฉฐ ๋งค์ฐ ์ ๋ช ํด์ก๋ค.
- ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํด๋ธ๋ค. Java์ ์ํธ์ด์ฉ์ฑ์ ๊ณ ๋ คํด์ ๋ง๋ค์ด์ง ์ธ์ด๋ผ์, ์๋ฐ์ 100% ํธํ์ฑ์ ๋ณด์ฅํ๋ค.
๋ด๋ถ ๋์์ด ๋๊ฐ์์ ์๋ฐ ๊ฐ๋ฐ์๋ผ๋ฉด ์ฝํ๋ฆฐ์ ์ฝ๊ฒ ์ ๋ฌธํ ์ ์๋ค.
- ์ฐธ๊ณ ๋ก ์ฝํ๋ฆฐ ์ฌ๋จ์์๋ JVM๋ฟ๋ง ์๋๋ผ ๋ฉํฐํ๋ซํผ(ex Javascript) ์ธ์ด์ง์์ ๋ชฉํ๋ก ํ๊ณ ์๋ค.
- Java์ ๋ค๋ฅด๊ฒ ํ-ํ ์ธ์ด์ด๋ค. ํจ์ํ, ๋ถ๋ณ์ฑ๋ฑ ์ธ์ด ์ฐจ์์์ ๋ง์ ํธ์๊ธฐ๋ฅ๊ณผ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋ค.
๐ญ ๊ทธ๋ผ 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 ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด, ๊ธฐ์กด ์๋ฐ ๋ฌธ๋ฒ ๊ทธ๋๋ก ์ ์งํ์ฑ๋ก ์ฝํ๋ฆฐ์ผ๋ก ๋ณํํด์ค๋ค.
์๊ฐ๋ ์ฌ๊ธฐ๊น์ง ํ๊ณ , ๋ค์ ๊ธ์์ ์ฝํ๋ฆฐ ๊ธฐ์ด ๋ฌธ๋ฒ์ ๋ํด ํ๋์ฉ ์์๋ณด์
'๐ฑBackend > Kotiln' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
#3 Nullable Type๊ณผ ํจ์, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.02.13 |
---|---|
#2. ์ฝํ๋ฆฐ ๊ธฐ์ด๋ฌธ๋ฒ (0) | 2022.02.12 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev