해결된 질문
작성
·
179
0
강의에서 이해하기로는, 생성자를 private으로 두어서 최초 생성된 생성자 외에는 static 매소드로 객체를 호출해서 같은 객체이다! 로 이해를 했습니다.
그런데
System.out.println(instance1.toString());
System.out.println(instance2.toString());
로 두 객체의 위치값을 확인하면 왜 다른것일까요? 같은 객체가 호출된 것이라면 위치값이 같은것이 아닌지 궁금합니다!
package com.hi.core.singleton;
public class SingletonService {
// 1. static 영역에 객체를 딱 1개만 생성한다
private static final SingletonService instance = new SingletonService();
// 2. public 으로 열어서 객체 인스터스가 필요하면 이 static 매서드를 통해서만 조회하도록 허용한다
public static SingletonService getInstance() {
return instance;
}
// 3. 생성자를 private으로 선언해서 외부에서 new 키워드를 사용한 객체 생성을 못하게 막는다
private SingletonService(){
}
public void logic(){
System.out.println("싱글톤 객체 로직 호출");
}
}
package com.hi.core.singleton;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class singletonServiceTest {
@Test
@DisplayName("싱글톤 패턴을 적용한 객체 생성")
public void singletonServiceTest() {
SingletonService instance1 = SingletonService.getInstance();
SingletonService instance2 = SingletonService.getInstance();
System.out.println(instance1.toString());
System.out.println(instance2.toString());
assertThat(instance2).isSameAs(instance2);
instance1.logic();
}
테스트 결과(콘솔)
com.hi.core.member.MemberServiceImpl@1176dcec // 두 객체의 위치값이 다름???
com.hi.core.member.MemberServiceImpl@120d6fe6
Process finished with exit code 0