Programming Language/JAVA

[JAVA] list에 객체 add시 주의할 점

DEV_HEO 2023. 8. 3. 10:10
320x100

개발하다가 반복문을 사용하여 list에 객체를 추가해야 하는 코드가 있었는데,

출력해보니 모든 객체가 같은 값을 가지고 있었다.

 

다음과 비슷한 코드인데,

List<Person> pList = new ArrayList<>();

Person p = new Person();

for(int i = 0; i < 3; i++) {
	p.setAge(30+i);
    
    pList.add(p);
}

for(int i = 0; i < 3; i++) {
	System.out.println(pList.get(i).getAge());
}

이 코드를 실행해 보면

30

31

32

로 찍히지 않고

 

모두 32로 찍히는 것을 볼 수 있다.

 

이유는 같은 메모리 주소값을 사용하기 때문이다.

JAVA 소스 내에서 new Person(); 를 수행하는 순간 하나의 객체가 메모리 상에 생성된다.

이 객체의 데이터를 여러번 바꾼다 하여도 결국엔 같은 메모리 주소의 값만 변경되고 마지막에 적용된 데이터가 최종 데이터가 된다.

 

 

 

 

 

 

참고: https://its21c.net/248

 

[JAVA] 반복문 내에서 List 객체에 add 할 때 메모리 참조 오류

사실 이 부분은 엄밀히 개발자의 무지(無知, Call by Value / Reference)에서 오는 오류로 JAVA 프로그램 내부의 문제라고 보기는 애매하다. 하지만 여러 프로젝트를 수행하며 지켜와 본 바에 따르면 생

its21c.net

 

320x100