일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- AWS
- helm
- CSV
- Network
- Python
- Spring
- java
- log
- CVAT
- kubectl
- jvm
- ip
- kubernetes
- grafana
- airflow
- EC2
- AWS Redshift
- MAC address
- JavaScript
- docker
- kubeadm
- aws s3
- OS
- Packet
- Operating System
- tcp
- Vision
- PostgreSQL
- zookeeper
- Kafka
Archives
- Today
- Total
JUST WRITE
Immutable Objects 본문
이 글은 baeldung 사이트 'Immutable Objects in Java'를 해석, 정리한 글입니다.
Immutable Objects
Immutable 객체란 생성 후 내부 상태에 변함이 없는 객체를 말한다.
다르게 해석하면 Immutable 객체를 이용하는 API에서는 같은 동작을 한다는 것이 보장된다는 점이다.
반대로 Mutable 객체는 내부 상태에 변경이 가능한 객체를 말한다.
String Class는 mutable 한 것처럼 보이지만 immutable 성질을 가진 Class이다.
값을 변경하는 것이 아닌 새로운 객체를 재할당하는 것이다.
String name = "baeldung";
String newName = name.replace("dung", "----");
assertEquals("baeldung", name); // true
assertEquals("bael----", newName); // false
final 키워드 활용
final 키워드를 활용해서 immutable한 성질을 정의할 수 있다.final 키워드를 변수에 사용하면 Java Complier에서 해당 변수 값 변경을 허용하지 않는다.해당 변수를 변경하려 할 시 Error가 발생된다.
final String name = "baeldung";
name = "bael..."; // Error 발생!!!
그렇지만 Public API를 통한 객체 내부 상태 변경은 막을 수 없다.
final List<String> strings = new ArrayList<>();
strings.add("baeldung"); // possible (strings.size() : 1->2)
Make Immutable Class
- 모든 변수에 final 키워드를 사용 -> (생성자를 이용해) 변수 초기화
- read-only Methods만 생성
class Money {
// 모든 변수 final 키워드 사용
private final double amount;
private final Currency currency;
// 생성자를 통해 변수 초기화
public Money(double amount, Currency currency) {
this.amount = amount;
this.currency = currency;
}
// read-only methods
public Currency getCurrency() {
return currency;
}
public double getAmount() {
return amount;
}
}
Immutable Objects 장점
- Immutable Object를 사용하면 Multi-Thread에서 안전하게 사용 가능
- 불변의 속성때문에 side-effects에 자유롭다
728x90
반응형
'Programing > Java' 카테고리의 다른 글
Java SE vs Java EE (0) | 2021.10.03 |
---|---|
StringBuilder vs StringBuffer (0) | 2021.09.30 |
Wrapper Class (0) | 2021.09.24 |
Static (0) | 2021.09.24 |
접근 제어자 (0) | 2021.08.26 |
Comments