μ•ˆλ…•ν•˜μ„Έμš” Mambo μž…λ‹ˆλ‹€.

μ˜€λŠ˜μ€ μΈν…”λ¦¬μ œμ΄μ—μ„œ 둬볡 라이브러리λ₯Ό μ μš©ν•˜λŠ” 방법을 μ•Œμ•„κ°€κΈ° μœ„ν•œ λ‚΄μš©μ„ κ³΅μœ ν•˜κ³ μž ν•©λ‹ˆλ‹€.

Lombok

둬볡 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μžλ°” ν”„λ‘œμ νŠΈμ—μ„œ ν•„μˆ˜μ μœΌλ‘œ μ‚¬μš©λ λ§ŒνΌ νŽΈλ¦¬ν•˜κ³  μœ μš©ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. 둬볡 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” APT(Annotation Processing Tool)λ₯Ό 톡해 μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œ(Annotation Processor)둜 컴파일 λ‹¨κ³„μ—μ„œ μˆ˜ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€. λ”°λΌμ„œ, 둬볡 라이브러리λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν”„λ‘œμ νŠΈμ—μ„œ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œλ₯Ό λ™μž‘μ‹œν‚€κΈ° μœ„ν•œ 섀정을 ν•΄μ•Όν•©λ‹ˆλ‹€.

μΈν…”λ¦¬μ œμ΄ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œ

μΈν…”λ¦¬μ œμ΄μ—μ„œλŠ” ν΄λž˜μŠ€νŒ¨μŠ€μ— μžˆλŠ” μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œλ₯Ό κ΅¬μ„±ν•˜κΈ° μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± κΈ°λŠ₯을 μ§€μ›ν•©λ‹ˆλ‹€. 이 μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± κΈ°λŠ₯이 ν™œμ„±ν™”λ˜λ©΄ ν΄λž˜μŠ€νŒ¨μŠ€μ— μžˆλŠ” μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œλ₯Ό μžλ™μœΌλ‘œ λ“±λ‘ν•˜κ²Œ λ©λ‹ˆλ‹€.

κ·Έλž˜λ“€ ν”„λ‘œμ νŠΈ

μΈν…”λ¦¬μ œμ΄λŠ” κ·Έλž˜λ“€ ν”„λ‘œμ νŠΈμ— μžˆλŠ” κΈ°λ³Έ κ·Έλž˜λ“€ 래퍼λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό λΉŒλ“œν•˜κ³  μ‹€ν–‰ν•˜λ„λ‘ μ„€μ •λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€. Build Tools > Gradle λ©”λ‰΄μ—μ„œ κΈ°λ³Έ κ·Έλž˜λ“€ λž˜νΌκ°€ μ•„λ‹Œ μΈν…”λ¦¬μ œμ΄ 자체둜 λΉŒλ“œν•˜κ³  μ‹€ν–‰λ˜λ„λ‘ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μΈν…”λ¦¬μ œμ΄ μžμ²΄μ μœΌλ‘œλŠ” 둬볡 ν”ŒλŸ¬κ·ΈμΈμ„ λ²ˆλ“€μ— ν¬ν•¨ν•˜κ³  μžˆμœΌλ―€λ‘œ 둬볡 μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œκ°€ ν΄λž˜μŠ€νŒ¨μŠ€μ— μœ„μΉ˜ν•˜κΈ° λ•Œλ¬Έμ— μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± κΈ°λŠ₯이 ν™œμ„±ν™”λ˜μ–΄μžˆλ‹€λ©΄ 둬볡에 λŒ€ν•œ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œκ°€ μžλ™μœΌλ‘œ λ“±λ‘λ˜κ²Œ λ©λ‹ˆλ‹€.

dependencies {
    compileOnly 'org.projectlombok:lombok'
}

μΈν…”λ¦¬μ œμ΄λŠ” μΉœμ ˆν•˜κ²Œλ„ 둬볡 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν΄λž˜μŠ€νŒ¨μŠ€μ— μžˆμ§€λ§Œ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± κΈ°λŠ₯이 λΉ„ν™œμ„±ν™”λ˜μ–΄μžˆμœΌλ©΄ 이벀트 λ‘œκ·Έμ— κΈ°λŠ₯ ν™œμ„±ν™”λ₯Ό λ¬»λŠ” μ•Œλ¦Όμ„ μ œκ³΅ν•©λ‹ˆλ‹€.
λ˜ν•œ, μΈν…”λ¦¬μ œμ΄λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ„ νƒν•œ ν™˜κ²½μ—μ„œλŠ” 별닀λ₯Έ 섀정없이도 ν΄λž˜μŠ€νŒ¨μŠ€μ— 둬볡 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ 있으면 μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œκ°€ λ™μž‘ν•¨μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλž˜λ“€ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œ ꡬ성

ν”„λ‘œμ νŠΈμ˜ κΈ°λ³Έ 섀정은 ν”„λ‘œμ νŠΈμ˜ κ·Έλž˜λ“€ 래퍼둜 μ‹€ν–‰ν•˜λŠ” ν™˜κ²½μ΄λΌκ³  ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이 κ²½μš°μ—λŠ” 둬볡 λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œλ₯Ό κ·Έλž˜λ“€ ꡬ성 νŒŒμΌμ— μ •μ˜ν•΄μ•Όν•©λ‹ˆλ‹€.

dependencies {
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

κ·Έλž˜λ“€μ˜ annotationProcessorλ₯Ό 톡해 둬볡 라이브러리의 μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œκ°€ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œκ°€ μœ„μΉ˜ν•˜λŠ” ν΄λž˜μŠ€νŒ¨μŠ€μ— 등둝됨에 따라 μΈν…”λ¦¬μ œμ΄λŠ” μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± κΈ°λŠ₯ ν™œμ„±ν™” μ—¬λΆ€λ₯Ό ν™•μΈν•˜κ³  ν™œμ„±ν™”μ— λŒ€ν•œ μ•Œλ¦Όμ„ μ œκ³΅ν•©λ‹ˆλ‹€.

configurations {
   compileOnly {
       extendsFrom annotationProcessor
   }
}

κ·Έλž˜λ“€ 기반의 μŠ€ν”„λ§ λΆ€νŠΈ ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•  λ•Œ 둬볡을 μΆ”κ°€ν•˜λ©΄ μœ„ ꡬ문이 ν¬ν•¨λ˜λŠ” 것을 ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 ꡬ문의 역할이 무엇인지 κΆκΈˆν•˜μ§€ μ•ŠμœΌμ‹ κ°€μš”? μΈν…”λ¦¬μ œμ΄λŠ” κ·Έλž˜λ“€ μ„€μ • νŒ‘λ¦¬μ— μœ„ ꡬ문이 ν¬ν•¨λ˜λŠ” 경우 Gradle ImportedλΌλŠ” μ΄λ¦„μ˜ ν”„λ‘œνŒŒμΌλ‘œμ¨ 둬볡 라이브러리λ₯Ό μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œλ‘œ λ“±λ‘ν•˜κΈ° μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± κΈ°λŠ₯을 ν™œμ„±ν™”ν•˜λŠ” 것을 μžλ™μœΌλ‘œ κ΅¬μ„±ν•˜κ²Œ λ©λ‹ˆλ‹€.

μΈν…”λ¦¬μ œμ΄λŠ” κΈ°λ³Έ ν”„λ‘œνŒŒμΌμ— λŒ€ν•΄ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± κΈ°λŠ₯이 ν™œμ„±ν™”λ˜μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ 이벀트 둜그λ₯Ό 톡해 둬볡을 μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± κΈ°λŠ₯ ν™œμ„±ν™”λ₯Ό μ•ˆλ‚΄ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

둬볡 μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œ

λ‹€μ‹œ λ‚΄μš©μ„ μ •λ¦¬ν•΄λ³΄μžλ©΄, 둬볡 라이브러리λ₯Ό μ μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 둬볡 라이브러리의 μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œλ₯Ό λ“±λ‘ν•˜κΈ° μœ„ν•œ 섀정을 μˆ˜ν–‰ν•΄μ•Όν•©λ‹ˆλ‹€.

  • μΈν…”λ¦¬μ œμ΄ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± ν™œμ„±ν™”(Enable annotation processing)
  • κ·Έλž˜λ“€ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œ ꡬ성

κ·Έλž˜λ“€ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œ ꡬ성

μΈν…”λ¦¬μ œμ΄λ₯Ό μ‚¬μš©ν•˜λŠ” 개발 ν™˜κ²½μ—μ„œλŠ” μΈν…”λ¦¬μ œμ΄ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± ν™œμ„±ν™” κΈ°λŠ₯을 톡해 ν΄λž˜μŠ€νŒ¨μŠ€μ— μžˆλŠ” μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œλ₯Ό μžλ™μœΌλ‘œ 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€λ§Œ, μ  ν‚¨μŠ€μ™€ 같은 λΉŒλ“œ ν™˜κ²½μ—μ„œ κ·Έλž˜λ“€λ‘œ μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œλ₯Ό λ“±λ‘ν•˜κΈ° μœ„ν•΄μ„œλŠ” 이λ₯Ό μœ„ν•œ ꡬ성을 ν•΄μ•Όν•©λ‹ˆλ‹€.

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}
dependencies {
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testCompileOnly 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
}

그리고 μœ„ ꡬ성은 κ°„λ‹¨ν•˜κ²Œ κ·Έλž˜λ“€ 둬볡 ν”ŒλŸ¬κ·ΈμΈ 으둜 λŒ€μ²΄ν•  수 μžˆλŠ”λ° λΉŒλ“œ λ„κ΅¬μ˜ ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜λŠ” 것은 곡식 ν™ˆνŽ˜μ΄μ§€μ—μ„œλ„ μΆ”μ²œν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

plugins {
   id "io.freefair.lombok" version "6.3.0"
}

κ°μ‚¬ν•©λ‹ˆλ‹€.