Setter를 사용했을 때와 사용하지 않았을 때 예시

seheeee_97·2024년 1월 20일
0

개인 공부

목록 보기
22/44

Setter 사용했을 때

// Setter를 사용한 예시
//UserWithSetter 클래스는 Setter 메서드를 통해 객체의 필드를 변경할 수 있음
public class UserWithSetter {
    private String username;
    private String email;

    public UserWithSetter() {
        // 기본 생성자
    }

    // Setter 메서드
    public void setUsername(String username) {
        this.username = username;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "UserWithSetter{" +
                "username='" + username + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

//MainWithSetter 클래스에서는 객체를 생성한 후 Setter를 사용하여 값을 변경하고 출력
public class MainWithSetter {
    public static void main(String[] args) {
        UserWithSetter user = new UserWithSetter();
        user.setUsername("john_doe");
        user.setEmail("john@example.com");

        System.out.println(user.toString());
    }
}



Setter 사용 않았을 때(불변)

// Setter를 사용하지 않은 (불변) 예시
//ImmutableUser 클래스는 불변 객체로서, 생성자에서 필드를 초기화한 후에는 Setter를 제공하지 않음
public class ImmutableUser {
    private final String username;
    private final String email;

    // 생성자로 초기화
    public ImmutableUser(String username, String email) {
        this.username = username;
        this.email = email;
    }

    // Getter 메서드만 존재
    public String getUsername() {
        return username;
    }

    public String getEmail() {
        return email;
    }

    @Override
    public String toString() {
        return "ImmutableUser{" +
                "username='" + username + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

//객체를 생성할 때 초기값을 설정하고, 이후에는 값을 변경할 수 없음
public class MainImmutable {
    public static void main(String[] args) {
        ImmutableUser user = new ImmutableUser("john_doe", "john@example.com");

        // 불변 객체이기 때문에 Setter를 사용할 수 없고, 생성자를 통해 초기화된 값을 변경할 수 없음
        // user.setUsername("new_username"); // 컴파일 에러

        System.out.println(user.toString());
    }
}



불변 객체의 장점

  • 상태 변경이 불가능하므로 예측 가능하고 안정적
  • 멀티스레드 환경에서 더욱 안전하게 사용할 수 있음
  • 객체의 무결성이 유지되며, 예기치 않은 상태 변화를 방지할 수 있음

0개의 댓글