[코드스쿼드 코코아 과정_자바] getInstance() 메소드

Kyu·2020년 11월 17일
2

getInstance()는 이름에서처럼 인스턴스를 만드는 것이다. 근데 우리가 알고 있는 인스턴스 생성하는 방법은 다음과 같을 것이다. new연산자를 이용해서 클래스를 새로운 메모리에 할당하는 것이다.

getInstance()는 최초에 할당된 하나의 메모리를 계속 쓰는 방식이다.

getInstance()메소드를 알기 위해서 일반적으로 사용하는 클래스와 비교해보자.

A클래스

public class A {
	//전역 객체변수로 사용하기 위해 static 객체변수로 생성
	static A instance;
	
	//생성자를 priavte로 만들어 접근을 막는다
	private A(){}
	
	//getInstance 메소드를 통해 한번만 생성된 객체를 가져온다.
	public static A getInstance(){
		if(instance == null){ //최초 한번만 new 연산자를 통하여 메모리에 할당한다.
			instance = new A();
		}		
		return instance;
	}
}

B클래스

public class B {
	public B() {}
    }

A클래스 VS B클래스

public class Main {

	public static void main(String[] args) {
    
   // getInstance() 메소드를 이용하여 변수를 달리하여, 3개의 객체를 불러옴
		A a1 = A.getInstance();
		A a2 = A.getInstance();
		A a3 = A.getInstance();

		System.out.println(a1);
		System.out.println(a2);
		System.out.println(a3);

		// 일반적으로 new 생성자를 이용하는 방법을 사용하여, 3개의 객체를 불러옴
		B b1 = new B();
		B b2 = new B();
		B b3 = new B();

		System.out.println(b1);
		System.out.println(b2);
		System.out.println(b3);

	}
}

결과는 다음과 같다

위에 getInstance()를 이용해서 먼저 출력한 a1, a2, a3 의 메모리 주소값을 보면 모두 같다. 이와 대비하여, new 생성자를 이용한 b1, b2, b3는 모두 주소값이 다른 것을 확인 할 수 있다.

profile
TIL 남기는 공간입니다

0개의 댓글