본문 바로가기

IT 모음/자바 코딩 실수 모음

실수 : While 문 안에서 객체를 생성하면?

결론

: 객체가 계속 생성된다.

 

배경

: 해쉬 맵 HashMap<> 을 이용해 오브젝트를 값으로 저장할 일이 생겼다.

즉 HashMap<String, Class> 형으로 저장해놓고, Class 클래스 안에는 또 여러개의 멤버가 있는 상황.

이 때, 키 값이 맵에 이미 존재하면 get() 으로 호출된 객체를 사용하고

만약 존재하지 않으면 새로운 Class 인스턴스를 만들어 객체변수들의 값을 초기화해야 했다.

 

결과적으로 코드는 대충 이랬다.

 

HashMap<String, Class> map = new HashMap<>();

 

while(true)

{

 File file = new File(파일경로);

 String oneLine = file.readLine();

 

 if(String에 담긴 키 값이 이미 존재했을 때)

  map.get(존재하는 키값).setAge(10)

  ...

  

 if(키 값이 존재하지 않았을 때)

 ▶ Class clas = new Class(); 

  clas.setAge(12);

  clas.setName("흑우");

  map.put(String, clas);

}

 

(회사컴에 쓴 내용을 기억나는대로 적었음..)

 

암튼 여기서 내가 오해한 건 '▶' 부분이다.

while 문 안에서 선언된 new 는 실행될때마다 새로운 객체를 생성한다.

이름은 똑같이 clas지만 맵에 저장된 clas 들의 메모리를 찍어보면 값이 다르다.

난 이게 왜 똑같은 거라고 생각했던 걸까.

분명 예전에 싱글톤 패턴 배울 때 숙지했던 내용인데...

 

...더 공부해야갰다.