Pa K'ode

[Spring] Lombok의 Data,Builder 유용한 Annotations 본문

개발노트

[Spring] Lombok의 Data,Builder 유용한 Annotations

Paku 2022. 1. 6. 10:40

Lombok의 Annotaions들을 살펴보면 코딩하는데 굉장히 유용한게 많은데  그중에서 두가지만을 간추려서 적어볼까한다.

@NonNull/@Nullable 도 자주 사용하고있지만 그닥 설명이 필요한기능이 아니니 패스

 

@Data

코틀린으로 따지면 data class 에 주로 선언되며 자동으로 getter와 setter를 생성해주는 Annotaion 이다.

getter/setter가 무슨말이냐면, 해당 클래스의 변수를 가져오거나, 값을 할당해주는 함수를 말한다.

data.class

 

with Annotaion

@Data
@EqualsAndHashCode
public final class BankUiModel {
    private final String bankCode;
    @NonNull
    private final String bankName;
    private final boolean isSelected;
}

 

without Annotaion

public final class BankUiModel {
    private  String bankCode;
    @NonNull
    private  String bankName;
    private  boolean isSelected;

    public String getBankCode() {
        return bankCode;
    }
    @NonNull
    public String getBankName() {
        return bankName;
    }
    public boolean isSelected() {
        return isSelected;
    }

    public void setBankCode(String bankCode) {
        this.bankCode = bankCode;
    }

    public void setBankName(@NonNull String bankName) {
        this.bankName = bankName;
    }

    public void setSelected(boolean selected) {
        isSelected = selected;
    }
}

 

같은코드이지만 훨씬 간결해진다. 사용해야할 변수가 많이질수록 차이가 심하다.

@Builder

마찬가지로 주로 data class에 주로 선언되며 클래스 내에 특정 값만을 수정하려고 할떄 사용된다.

예를들어 UI에 표시되고있는 아이템을 값을 변경해야 하는 상황이리고 하면

 

해당 아이템의 포지션을 가져와서 새로운 클래스를 생성후, 그 자리를 매꿔주는 방식이다. 이떄 Builder기능을 사용한다

새로운 클래스를 생성하는 과정에서 소수의 값들만 변경해야 한다면 아주 유용하게 사용할수 있다.

Activity.class

 

with Annotation

final TransactionCallUiModel oldItem = mADP_Transaction_Call.getCurrentList().get(mSelectedIndex);
final TransactionCallUiModel oldItemFix = oldItem.toBuilder()
        .isSelected(false)
        .build();

 

변경이 필요한 변수만을 수정후 새로운 클래스를 생성해 준다.

 

without Annotation

final TransactionCallUiModel oldItem = mADP_Transaction_Call.getCurrentList().get(mSelectedIndex);
final TransactionCallUiModel oldItemFix = new TransactionCallUiModel(
        oldItem.getId(),
        oldItem.getName(),
        oldItem.getBalance(),
        !oldItem.isSelected()
);

 

변경이 필요없는 변수들 까지도 가져와 새로운 클래스에 넣어줘야 한다.

마찬가지로 클래스 내에 선언된 변수가 많을수록 코드가 비대해진다.

Comments