클래스로 여러 인스턴스들을 만들 수 있는 것을 배웠다.
그런데 인스턴스가 딱 하나만 필요하고 또 다른 인스턴스를 만들지 말아야할 때는 어떻게 할 수 있을까?
Java에서는 이를 싱글톤 패턴이라고 한다. 싱글톤 패턴에 대해서 알아보자.
객체의 인스턴스가 오직 1개만 생성되는 패턴이다.
🤔고민해보기
private
를 이용해 생성자 접근을 제한함) //외부에서 생성자를 통해 인스턴스를 생성할 수 없도록 private를 붙인다.
private Singclass() {}
private
가 있는 생성자를 어디서 만들어야할까?private
는 해당 클래스에서만 접근할 수 있다. 따라서 그 클래스내에서만 생성자를 통해 만들 수 있게된다. //인스턴스가 생성되지 않아도 객체가 생성되도록 static을 붙인다.
//외부에서 이 인스턴스에 접근하지 못하도록 private를 붙인다.
private static Singclass singl = new Singclass();
//인스턴스가 생성되지 않아도 다른 클래스에서 메소드를 사용할 수 있도록 static을 붙인다.
static Singclass getSingclass() {
return singl;
}
➕ return에 this를 쓸 수 없는 이유 : static메소드에는 인스턴스 변수가 올 수 없다.
✍️ 예시코드
package test;
class Singclass {
//외부에서 생성자를 통해 인스턴스를 생성할 수 없도록 private를 붙인다.
private Singclass() {}
//인스턴스가 생성되지 않아도 객체가 생성되도록 static을 붙인다.
//외부에서 이 인스턴스에 접근하지 못하도록 private를 붙인다.
private static Singclass singl = new Singclass();
//인스턴스가 생성되지 않아도 다른 클래스에서 메소드를 사용할 수 있도록 static을 붙인다.
static Singclass getSingclass() {
return singl;
}
}
public class SingletonTest {
public static void main(String[] args) {
Singclass n1 = Singclass.getSingclass();
Singclass n2 = Singclass.getSingclass();
System.out.println(n1); //test.Singclass@7c30a502
System.out.println(n2); //test.Singclass@7c30a502
}
}
👉 실행화면
: 인스턴스는 딱 하나만 생성되므로 n1과 n2모두 같은 값을 가진다.
test.Singclass@7c30a502
test.Singclass@7c30a502
주제에서 벗어난 이야기지만 요즘 my stupid heart이란 노래에 빠졌다...❤️🔥
되게 좋은 노래니까 다들 한번씩 들어봤으면 좋겠다 (●'◡'●)
특히 애기가 부르는 버전이 있는데 나까지 천진난만한 어린이가 되는 기분이 엄청 좋다..ㅎ
그리고 어제 처음으로 내 벨로그에 댓글이 달렸다...!! 공부에 의욕이 더 생긴다.ㅎ
아주 유용한 정보네요!