자바(Java)를 사용해서 애플리케이션을 개발할 때, 대부분의 개발자는 객체를 사용합니다. 그 객체 안에는 여러 가지 메서드가 존재하지만 대표적으로 Getter와 Setter가 있습니다. Getter는 값을 얻기 위해서 필수적이지만 Setter는 필수적이지는 않습니다. 그 이유는 생성자가 있기 때문입니다. 하지만 많은 개발자들이 Setter의 편리함 때문에 많이 사용하곤 합니다. 이번 포스팅에서는 Setter를 사용할 때 주의할 점에 대해 알아보도록 하겠습니다.
기본형 vs 참조형
자바에는 대표적으로 두가지 변수가 존재합니다. 바로 기본형과 참조형입니다.
기본형과 참조형의 가장 큰 차이점은 변수를 저장하는 방법에 차이가 있습니다.
2021.01.05 - [Programming/Java] - 자바 기본형과 참조형 차이, 형변환
기본형은 값 자체를 저장하고 있지만, 참조형은 그 값을 참조할 수 있는 주소를 가지고 있습니다.
따라서 기본형을 비교할 때는 true가 나오지만, 참조형을 비교할때는 주소가 다르므로 false가 나옵니다.
public static void main(String[] args) {
int a = 10;
int b = 10;
System.out.println("a == b :: " + (a==b)); // true
}
public static void main(String[] args) {
Member member1 = new Member(1L, "KIM");
Member member2 = new Member(1L, "KIM");
System.out.println("member1 == member2 :: " + (member1==member2)); // false
}
Setter를 사용할 때 주의할 점
참조형은 주소를 저장하고 있기 때문에 새로운 변수에 참조값을 대입하면 그 변수들은 모두 같은 객체를 바라보고 있습니다. 이 뜻은 뒤쪽에서 객체의 필드 값이 변경되면 Side effect가 발생할 수 있습니다.
코드로 살펴보도록 하겠습니다.
member1에 address를 이미 넣었어도 그 이후에 city를 바꾸면 영향을 주게 됩니다. 위의 경우는 Address값을 새로운 변수에 받아서 사용해도 같은 결과가 나타납니다.
새로 변수를 초기화해도 어차피 같은 주소 값을 가지고 있기 때문입니다. 실무에서 이렇게 사용한다면 큰 문제가 발생하게 됩니다. 그렇다면 어떻게 사용해야 할까요?
불변 객체
불변 객체는 객체를 생성 후에 값이 변하지 않는 객체를 의미합니다. 객체를 사용할 때 Setter를 만들지 않고 오직 생성자만을 이용한다면 한번 만들어진 객체는 값이 변하지 않는 불변 객체가 됩니다. 새로운 값을 넣고 싶을 땐 완전히 새로운 객체를 생성해야 합니다.
'Programming > Java' 카테고리의 다른 글
[Java] 자바 내장 정렬 함수 - Arrays.sort() (0) | 2022.04.30 |
---|---|
[Java] 자바 Enum 클래스 사용법 정리 (0) | 2022.03.18 |
[Java] 자바 환경변수 설정하기 (0) | 2022.03.16 |
자바 다형성(Polymorphism) (1) | 2021.01.09 |
자바 instanceof 연산자 (0) | 2021.01.08 |
댓글