[Spring] 실전! 스프링 부트와 JPA 활용 # Entity Setter 제거

김상현·2022년 11월 1일
0

Spring

목록 보기
3/13
post-thumbnail

📒 [실전! 스프링 부트와 JPA 활용 - 김영한] 학습 후 정리자료입니다.


📍 Entity의 Setter를 사용하지 않는 이유

  • Setter 가 사용된 시점에서 Setter 가 사용된 의도 즉, 새로운 객체를 생성한 후 멤버 변수를 초기화(생성)하기 위한 것인지, 기존의 객체의 멤버변수의 값을 갱신(업데이트)하는 것인지, 아니면 다른 의도가 있었는지를 파악하기 어렵다.
  • 만약 객체 내에 접근 제어자가 publicSetter 가 존재한다면 특정 메서드가 아닌 모든영역에서 접근이 가능하기 때문에 객체의 일관성을 유지하기 어렵다.

📍 Setter 없이 객체를 생성하고 업데이트 하는 방법

  • 만약 해당 객체 이외의 영역에서 객체를 새로 생성해야 하는 경우 객체 내부에 생성자 메서드를 만들면 Setter 없이 객체 이외의 영역에서 객체를 생성할 수 있다.
class Member {
	String name;
    int age;
    
    public static Member createMember(String name, int age){
    	Member meber = new Member();
        member.name = name;
        member.age = age;
        return member;
    }
}

Member member = Member.createMember("memberA", 26); // Setter 없이 생성자를 통해 객체 생성
  • 만약 해당 객체 이외의 영역에서 객체의 멤버변수 값을 갱신해야 하는 경우 객체 내부에 메서드를 만들면 Setter 없이 객체 이외의 영역에서 객체의 멤버변수 값을 갱신할 수 있다.
  • 코드 자체는 Setter 와 크게 다르지 않지만 메서드의 이름을 통해 어떤 상황이 발생했는지 유추할 수 있고, 변경되지 않아야 할 다른 멤버 변수의 값이 변경되는 것을 방지할 수 있다.
class Member {
	String name;
    int age;
    
    public static Member createMember(String name, int age){
    	Member meber = new Member();
        member.name = name;
        member.age = age;
        return member;
    }
    
    public void changeName(String name){
    	this.name = name;
    }
}

Member member = Member.createMember("memberA", 26); // 객체 생성
member.changeName("memberB"); // 객체의 멤버변수(name) 값 갱신
profile
목적 있는 글쓰기

0개의 댓글