본문 바로가기
Programming/Java

[Java] Setter를 사용할 때 주의할 점(Feat. 불변객체)

by hyunipad 2022. 3. 17.
반응형

자바(Java)를 사용해서 애플리케이션을 개발할 때, 대부분의 개발자는 객체를 사용합니다. 그 객체 안에는 여러 가지 메서드가 존재하지만 대표적으로 Getter와 Setter가 있습니다. Getter는 값을 얻기 위해서 필수적이지만 Setter는 필수적이지는 않습니다. 그 이유는 생성자가 있기 때문입니다. 하지만 많은 개발자들이 Setter의 편리함 때문에 많이 사용하곤 합니다. 이번 포스팅에서는 Setter를 사용할 때 주의할 점에 대해 알아보도록 하겠습니다.

 

 

기본형 vs 참조형

자바에는 대표적으로 두가지 변수가 존재합니다. 바로 기본형과 참조형입니다.

기본형과 참조형의 가장 큰 차이점은 변수를 저장하는 방법에 차이가 있습니다.

2021.01.05 - [Programming/Java] - 자바 기본형과 참조형 차이, 형변환

 

자바 기본형과 참조형 차이, 형변환

기본형 구분 자료형 예시 문자 char char exAlpha = 'A'; char gender = '남'; 숫자 정수형 byte, short, int, long int age = 20 long l = 450000000L; 실수형 float, double float f = 180.5f; double d = 80.9;..

hyunipad.tistory.com

기본형은 값 자체를 저장하고 있지만, 참조형은 그 값을 참조할 수 있는 주소를 가지고 있습니다.

따라서 기본형을 비교할 때는 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를 만들지 않고 오직 생성자만을 이용한다면 한번 만들어진 객체는 값이 변하지 않는 불변 객체가 됩니다. 새로운 값을 넣고 싶을 땐 완전히 새로운 객체를 생성해야 합니다.

 

반응형

댓글