[์ธํ๋ฐ] ์ตํํ๋์ ์๋ฐ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ฝํ๋ฆฐ ์ ๋ฌธ ๊ฐ์ ์๊ฐ ์ค ๋ฐ์ํ ์๋ฌ์ ๊ดํ ๊ธ์ ๋๋ค.
Lombok๊ณผ ์ปดํ์ผ ์ค๋ฅ
Lombok์ ์ ๋ํ ์ด์ ์ ๊ธฐ๋ฐ์ผ๋ก constructor, getter, setter ๋ฑ ๋ฐ๋ณต์ ์ผ๋ก ์์ฑํด์ผ ํ๋ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋ง์ Java ๊ธฐ๋ฐ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๊ณ ์๋ค. ๋ค์ด๋ฒ ์์ฝ ์๋น์ค์๋ ์ ๋ฐ์ ์ผ๋ก Lombok์ ์ฌ์ฉํ๋ ์ํ์๋ค. ํ์ง๋ง Lombok์ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์ Kotlin์ ์ ์ฉํ์ ๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
ํ์
Kotlin์ผ๋ก ์์ฑํ ์ฝ๋์์ Lombok์ด ์์ฑํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์๋ ์ฝ๋๋ Java๋ก ๊ฐ๋จํ๊ฒ ์์ฑํ Person ํด๋์ค์ด๋ค.
package oop;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@AllArgsConstructor
@ToString
@Getter @Setter
public class JavaPerson {
private final String name;
private int age;
}
Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์๋ ํด๋์คํ์ผ๊ณผ ๊ฐ์ด ์ปดํ์ผ ๋๋ค.
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package oop;
public class JavaPerson {
private final String name;
private int age;
public JavaPerson(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
String var10000 = this.getName();
return "JavaPerson(name=" + var10000 + ", age=" + this.getAge() + ")";
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
}
๋ค์์ ์์ Lombok ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ Kotlin ์ฝ๋์ ์์ด๋ค. ์ด ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
package oop
fun main() {
val kotlinPerson = Person("์ฝํ๋ฆฐ์ด์ฌ๊ทผ", 100)
val javaPerson = JavaPerson("์๋ฐ์ด์ฌ๊ทผ", 50)
println("person.name = ${kotlinPerson.name}")
println("javaPerson.name = ${javaPerson.name}")
}
// Kotlin Person class
class Person(val name: String, var age: Int)
์๋จ ์ฝ๋ JavaPerson ์์ฑ ๋ถ๋ถ์์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์.
val javaPerson = JavaPerson("์๋ฐ์ด์ฌ๊ทผ", 50)
Kotlin: Too many arguments for public constructor JavaPerson() defined in oop.JavaPerson
์์ธ
๋ฌธ์ ์ ์์ธ์ ์ดํดํ๋ ค๋ฉด Java ์ฝ๋์ Kotlin ์ฝ๋๊ฐ ์์ฌ ์๋ ํ๋ก์ ํธ์ ๋น๋ ๊ณผ์ ์ ์ดํด๋ด์ผ ํ๋ค.
Java ์ฝ๋์ Kotlin ์ฝ๋์ ๋น๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์ด๋ฃจ์ด์ง๋ค.
- Kotlin ์ปดํ์ผ๋ฌ๊ฐ Kotlin ์ฝ๋๋ฅผ ์ปดํ์ผํด .class ํ์ผ์ ์์ฑํ๋ค. ์ด ๊ณผ์ ์์ Kotlin ์ฝ๋๊ฐ ์ฐธ์กฐํ๋ Java ์ฝ๋๊ฐ ํจ๊ป ๋ก๋ฉ๋์ด ์ฌ์ฉ๋๋ค.
- Java ์ปดํ์ผ๋ฌ๊ฐ Java ์ฝ๋๋ฅผ ์ปดํ์ผํด .class ํ์ผ์ ์์ฑํ๋ค. ์ด๋ ์ด๋ฏธ Kotlin์ด ์ปดํ์ผํ .class ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ํด๋์ค ํจ์ค์ ์ถ๊ฐํด ์ปดํ์ผํ๋ค.
๋ ๋ฒ์งธ ๊ณผ์ ์ ๋ค์ ์ธ ๋จ๊ณ๋ก ๋๋ ์ ์๋๋ฐ, Lombok์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๋จ๊ณ๋ ์ธ ๋จ๊ณ ์ค Annotation Processing ๋จ๊ณ์ด๋ค. ํ์ง๋ง ์ด ๋จ๊ณ๋ Kotlin ์ฝ๋๊ฐ ์ปดํ์ผ๋ ์ดํ์ด๊ธฐ ๋๋ฌธ์ Kotlin ์ฝ๋๋ Lombok์ด ์์ฑํ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ ์์๋์ด ์์ฑํ์ [NaverD2] Kotlin ๋์ ๊ณผ์ ์์ ๋ง๋ ๋ฌธ์ ์ ํด๊ฒฐ๋ฐฉ๋ฒ ์ ๊ธ์ ์ธ์ฉํ๋ค.
Lombok๊ณผ Kotlin์ ์ปดํ์ผ ์์๊ฐ ๋ฌธ์ ์ ์์ธ์์ ์ดํดํ๊ณ ๋ค์๊ณผ ๊ฐ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก๋ Lombok์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ์ ํํ๋ค.
๋น๋ ์์ ์กฐ์
Kotlin ์ฝ๋๋ณด๋ค Java ์ฝ๋๋ฅผ ๋จผ์ ์ปดํ์ผํ๋๋ก ๋น๋ ์์๋ฅผ ์กฐ์ ํ๋ฉด Lombok ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์๋ค. ํ์ง๋ง Java ์ฝ๋์์ Kotlin ์ฝ๋๋ฅผ ํธ์ถํ ์ ์๊ฒ ๋๋ค.
Java์ Kotlin์ ๋ณ๋ ๋ชจ๋๋ก ๋ถ๋ฆฌ
Java์ Kotlin์ ๋ณ๋ ๋ชจ๋๋ก ๋ถ๋ฆฌํด์ ์ปดํ์ผํ๋ฉด Lombok ๋ฌธ์ ๋ ํด๊ฒฐ๋๋ค. ํ์ง๋ง ๋ชจ๋ ๊ฐ ์์กด์ฑ์ ๋ฐฉํฅ์ ๋ฐ๋ผ Java ์ฝ๋์์ Kotlin ์ฝ๋๋ฅผ ํธ์ถํ๊ฑฐ๋ Kotlin ์ฝ๋์์ Java ์ฝ๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํด์ง๋ค.
๋น๋ ์ ์ฒ๋ฆฌ ๊ณผ์ ์์ Delombok ์คํ
ํ๋ก์ ํธ ๋น๋ ์ ์ Lombok์ด ์ ๊ณตํ๋ Delombok ๊ธฐ๋ฅ์ ํ์ฉํด Lombok์ด ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ๊ฒ ํ๋ค. Delombok์ด Gradle ํ๋ฌ๊ทธ์ธ์ ๊ณต์์ผ๋ก ์ง์ํ์ง ์์ ๋น๋ ๊ตฌ์ฑ์ด ๋ณต์กํด์ง๋ ๋จ์ ์ด ์๋ค.
Lombok์ด ์ ์ฉ๋ ์ฝ๋๋ฅผ Kotlin์ผ๋ก ๋ณํ
Lombok์ด ์ ์ฉ๋ Java ํด๋์ค๋ ๋๋ถ๋ถ JPA ์ํฐํฐ, DTO ๋ฑ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ์ฉ๋์ ํด๋์ค์ด๋ค. ์ด๋ฐ ์ ํ์ ํด๋์ค๋ฅผ Kotlin์ data class๋ก ๋ณํํ๋ฉด Lombok์์ ์ฃผ๋ก ์ ๊ณตํ๋ constructor, getter, setter, equals(), hashCode(), toString() ๋ฉ์๋ ๋ฑ์ ๋ณ๋๋ก ๊ตฌํํ์ง ์์๋ ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ๋ค๋ง ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ํด ๋์๋ ์ผ๊ด ๋ณํ์ด ์์ ์ฑ ์ธก๋ฉด์์ ๋ถ๋ด์ด ๋ ์ ์๋ค. Kotlin ์ฝ๋์์ ์ฌ์ฉํ๋ ์ฝ๋๋ถํฐ ์ ์ง์ ์ผ๋ก ๋ณํํ๋ ๊ฒ์ด ์ข ๋ ์ค์ฉ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
Lombok ์ ๊ฑฐ
Delombok์ ์คํํด Lombok์ด ์ฝ๋๋ฅผ ์์ฑํ ๋ค์ ์์ฑ๋ ์ฝ๋๋ฅผ ์ ์ฅ์์ ๋ฐ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. "Lombok์ด ์ ์ฉ๋ ์ฝ๋๋ฅผ Kotlin์ผ๋ก ๋ณํ"์์ ์ฌ์ฉํ ๋ฐฉ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Lombok์ ํ๋ก์ ํธ์์ ์ ๊ฑฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด ๋ฐฉ๋ฒ์๋ Java ์ฝ๋๊ฐ Lombok ์ ๋ํ
์ด์
์ ์ ์ฉํ๊ธฐ ์ ์ํ๋ก ๋์๊ฐ๋ฏ๋ก ์ฝ๋์ ๊ฐ๊ฒฐํจ์ ์๋๋ค๋ ๋จ์ ์ด ์๋ค. ํ์ง๋ง Lombok์ ์ผ๊ด๋ก ์ ๊ฑฐํด ๋ฐ์ํ ํ ์ ์ง์ ์ผ๋ก Kotlin์ผ๋ก ๋ณํํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์์ง ์์์๋ ๋ถ๊ตฌํ๊ณ ์ผ๊ด ์ ๊ฑฐ๋ฅผ ์ ํํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ ์ง์ ์ธ ์ ๊ฑฐ๊ฐ ์์ ์ ์ด๊ธฐ๋ ํ์ง๋ง Kotlin ๋์ ์ ๋๋๊ฒ ๋ง๋๋ ์์๊ฐ ๋ ์ ์๋ค.
- ์์ผ๋ก Kotlin์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ ์์ ์ด๋ฏ๋ก Kotlin ์ฌ์ฉ์ ์ ์ฝ์ด ์๋ ํ๊ฒฝ์ ๋ง๋ค์๋ ํ์ ๊ณต๊ฐ๋๊ฐ ์์๋ค.
- Lombok์ด ์ ๊ฑฐ๋์ด ๊ฐ๊ฒฐํจ์ ์์ ์ฝ๋๋ ์ ์ง์ ์ผ๋ก Kotlin์ผ๋ก ๋ณํํด์ ์ ๋ฆฌํ๋ ๊ฒ์ด ์์ ์ ์ผ ๊ฒ์ด๋ค.
์ด๋ฒ์ ์ ํํ ๋ฐฉ๋ฒ์ด ๋ชจ๋ ์ํฉ์์ ๋ง๋ ์ ๋ต์ ์๋๋ค. ํ๋ก์ ํธ์ ๊ท๋ชจ์ ์งํ ์ํฉ์ ๋ฐ๋ผ ์๋ง์ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ํํ๊ธธ ๋ฐ๋๋ค.