AutoValue

AutoValue ์ ์šฉํ•ด๋ณด๊ธฐ

AutoValue๋Š” ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, AutoValue๋Š” Reflection์„ ์ด์šฉํ•œ ๋Ÿฐํƒ€์ž„ ๋ฐฉ์‹์ด ์•„๋‹Œ apt๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ƒ์— ๋ถˆ์ด์ต์€ ์—†๋‹ค.

google AutoValuearrow-up-right์—์„œ jarํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ maven์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” pom.xml์— dependency๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

<dependencies>
    <dependency>
        <groupId>com.google.auto.value</groupId>
        <artifactId>auto-value</artifactId>
        <version>1.3</version>
    </dependency>
</dependencies>
image-20210202224222521

๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ jarํŒŒ์ผ์€ intellij project settings > Libraries์— ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์šฐ์„  @AutoValue ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ๋‚ด๋ถ€์— ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ AutoValue githubarrow-up-right ์ฃผ์†Œ๋ฅผ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ๋‹ค.

๊ฐ€์ด๋“œ๋ผ์ธ์„ ๊ธฐ์ค€์œผ๋กœ ํด๋ž˜์Šค ํ•œ๊ฐœ๋ฅผ ์ƒ์„ฑํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.

image-20210202225517078

AutoValue ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

image-20210202225749535

Compiler > Annotation Processors์—์„œ Enable annotation processing์„ ์ฒดํฌํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  modules์˜ dependencies์— auto-value ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋ณ„๋„๋กœ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•œ๋‹ค.

image-20210202230221276

๋ชจ๋‘ ์ถ”๊ฐ€ํ•œ ๋’ค์— project rebuild๋ฅผ ํ•˜๋ฉด AutoValue_Product๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

image-20210202231607412

๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ง‘์–ด๋ณผ ๊ฒƒ์ด๋‹ค.

  • @AutoValue ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋Š” abstract(์ถ”์ƒ) ํด๋ž˜์Šค์ด๋ฉฐ, ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” builder() ๋ถ€๋ถ„์˜ AutoValue_Product ์ด๋‹ค.

  • ์•ˆ์˜ ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋„ abstract ์ถ”์ƒํ•จ์ˆ˜๋กœ ์„ ์–ธ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธํ•ด์ฃผ๋ฉด AutoValue_Product ํด๋ž˜์Šค์— ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

image-20210202232027493

๋‹ค์Œ๊ณผ ๊ฐ™์ด Product ํด๋ž˜์Šค๋ฅผ builder๋กœ ์ƒ์„ฑํ•˜๋ฉด, AutoValue_Product ์ธ์Šคํ„ด์Šค๋กœ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. AutoValue๋Š” ๋ถˆ๋ณ€์ •๋ณด(Immutable)๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ• ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. AutoValue_Product๋ฅผ ๋ณด๋ฉด final ํด๋ž˜์Šค์ด๋ฉด์„œ ๋ณ€์ˆ˜๋„ final ์ธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, AutoValue๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ๊ฐ’์ด ํ•ญ์ƒ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์—์„œ๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

์ฐธ์กฐ

Last updated