AutoValue

AutoValue 적용해보기

AutoValue는 코드 자동 생성 라이브러리로 자바 코드를 줄일 수 있으며, AutoValue는 Reflection을 이용한 런타임 방식이 아닌 apt를 이용하여 컴파일 타임에 코드를 생성해주기 때문에 성능상에 불이익은 없다.

google AutoValue에서 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 github 주소를 알려주고 있다.

가이드라인을 기준으로 클래스 한개를 생성해 볼 것이다.

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

Was this helpful?