[Spring] Getter와 Setter 대신 Builder 사용하기

원모어깨찰빵·2024년 2월 1일

트러블 슈팅

목록 보기
4/7
post-thumbnail

Getter와 Setter는 편리함을 주지만, 객체지향의 장점인 캡슐화를 방해하여 보안에 문제를 주거나 데이터가 예상치 못하게 바뀌어 지속성에 문제를 줄 수 있습니다.
따라서 최대한 Getter와 Setter를 지양하고자 기존에 사용하던 Getter와 Setter를 사용하는 대신 Builder패턴으로 최대한 변경해 보고자 합니다.
앞으로 프로젝트들을 진행하며 Getter과 Setter 대신 Builder를 사용하게 될 경우 이곳에 정리할 예정입니다.

1. 엔티티와 DTO

기존 코드

@Builder
public class ResponseMainPageDto {
    private String nickname;
    private int location;
    private int level;
    private int exp;
    public static ResponseMainPageDto from(User user){
        return ResponseMainPageDto.builder()
                .nickname(user.getNickname())
                .location(user.getLocation())
                .level(user.getLevel())
                .exp(user.getExp())
                .build();
    }
}

User객체의 정보중 일부를 DTO로 반환하기 위하여 User 엔티티에 Getter를 사용하였습니다.
Getter를 사용하지 않기 위하여 해당 DTO에서 from메소드를 삭제하고, User객체에 다음의 코드를 추가하였습니다.

User객체에 코드 추가

@Entity
@Builder
public class User {
   ...
    public static ResponseMainPageDto to(User user){
        return ResponseMainPageDto.builder()
                .nickname(user.nickname)
                .location(user.location)
                .level(user.level)
                .exp(user.exp)
                .build();
    }
}

이제 User 엔티티에서 Getter를 사용하지 않고, DTO를 User 엔티티를 통하여 생성하도록 하였습니다.

profile
https://fuzzy-hose-356.notion.site/1ee34212ee2d42bdbb3c4a258a672612

0개의 댓글