개발학생
183
2019-07-14 14:34:06 작성 2019-07-14 14:36:00 수정됨
4
556

자바 Math 클래스는 싱글톤 패턴이 적용된것인가요?


class Singleton {
	private static Singleton instance;

	private Singleton() {}

	public static Singleton getInstance() {
		return (instance == null) ? new Singleton() : instance;
	}
}

위의 코드 처럼 싱글톤 패턴 전역접근이 가능한 오직 하나의 인스턴스를 생성하는 것이라고 알고 있습니다.

질문1)

자바의 Math 클래스를 보면 생성자가 private 이고 모든 메소드가 static 으로 제공되고 있습니다. 하지만 어디에도 new Math()를 통해 인스턴스를 생성하고 생성된 인스턴스를 반환하거나 하는 코드가 없는데 싱글톤 패턴이 적용되었다고 할 수 있는건가요?


질문2)

싱글톤은 오직 하나의 인스턴스를 생성한다고 하였는데 위의 코드대로 하면

Single s1 = Singleton.getInstance();
Single s2 = Singleton.getInstance();
Single s3 = Singleton.getInstance();

이런식으로 했을 경우 3개의 인스턴스가 생성되는것이 아닌가요?


0
0
  • 답변 4

  • KDH0110
    153
    2019-07-14 15:27:52

    1) 싱글톤은 하나의 객체만을 유지하기 위한 개념인데

    Math의 경우는 인스턴스를 생성해서 사용하는 것이 아닌 정적메소드를 활용하여 사용해서 싱글톤을 적용했다 하기에는 이상한것 같습니다.


    2) 위의 싱글톤 클래스를 보시면 static 으로 instance를 선언 해 놨습니다.

    이 경우에는 모든 Singleton 객체의 instance는 같은 주소를 바라보고 있고요

    그래서 1번째 s1에서 getInstance()를 할때 instance가 null에서 new Singleton()으로 변경되게 되고

    s2 s3에서는 instance는 null이 아닌 s1에서 생성한 class를 가리키고 있어 return값으로 s1의 singleton을 반환합니다.

    그로인해 s1,s2,s3은 모두 같은 객체를 가리키고 있고요

    1
  • 멘탈조각
    1k
    2019-07-14 17:45:55

    저 코드는 왜저렇게 썼죠?

    저건 싱글톤 패턴도 아니고 팩토리패턴도 아니고 그냥 병신짓인데요.

    instance라는 변수에 아무것도 안넣어주는데 왜 비교문을 쓰고있죠?

    지금 쓰는 IDE에서 린트 안제공하나요? Always true warning  띄울텐데요

    0
  • KDH0110
    153
    2019-07-14 17:51:22
    그걸 못봤네요 ㅋㅋ instance가 null이면 instance에 new Singleton() 넣고 instance 반환으로 수정하셔야되겠네요
    0
  • 개발학생
    183
    2019-07-14 23:56:30

    KDH0110

    멘탈조각

    무슨생각으로 저런 코드 올려놓고 싱글톤이라 했는지 모르겠네요;; instance에 대입을 하고 리턴해줘야 하는데 그냥 객체만 생성해서 리턴했으니 멘탈님 말씀대로 병신짓이 맞았습니다 ㅋㅋㅋㅋ 답변해주셔서 감사합니다~


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.