Setter 사용했을 때
public class UserWithSetter {
private String username;
private String email;
public UserWithSetter() {
}
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 + '\'' +
'}';
}
}
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 사용 않았을 때(불변)
public class ImmutableUser {
private final String username;
private final String email;
public ImmutableUser(String username, String email) {
this.username = username;
this.email = email;
}
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");
System.out.println(user.toString());
}
}
불변 객체의 장점
- 상태 변경이 불가능하므로 예측 가능하고 안정적
- 멀티스레드 환경에서 더욱 안전하게 사용할 수 있음
- 객체의 무결성이 유지되며, 예기치 않은 상태 변화를 방지할 수 있음