※ 주의 : 뇌피셜 有
1. 싱글톤 패턴이란?
싱글톤 패턴이란,
프로그램이 실행될 때 객체가 필요 이상으로 많이 생성되지 않고 최초에 한 번 생성된 후,
필요 시 계속 그 객체만 호출하는 형태로 디자인된 구조를 말하는 것 같다.
2. 어떻게?
보통 get instance() 라는 메서드를 만드는 게 일반적인 것 같다. 구글링 해도 같은 이름이 많이 나오는 것 같다.
어떤 관리 프로그램을 만든다고 생각해보자.
먼저, 관리할 객체를 생성할 수 있는 class를 여러개 생성할 것이다.
지금 과제로 하고있는 Movie 클래스도 그런 경우이다.
Movie의 하위 클래스인 SeriesMovie 클래스도 생성할 수 있었다.
그래서, 지금 있는 Movie와 SeriesMovie를 깡깡 찍어내서, 뭘로 관리할까... 했더니
MovieManager 클래스를 만들어서 이걸 통해서 관리해보자. 라는 아이디어이다.
처음엔 MovieManager 클래스를 만들었고, 그 안에 여러 관리 기능이 담긴 메서드들을 만들었다.
그리고 MovieTest클래스에 main문을 만들어서 이 안에서 MovieManager를 호출하고 관리하는 형식이었다.
그 다음은, 인터페이스를 배웠으니 이걸 써먹어서,
인터페이스인 IMovieManager 를 만들고, 관리 기능 담당 메서드의 목록을 나열했다.
그리곤 MovieManager 클래스를 MovieManagerImpl 로 정정하고, IMovieManager 인터페이스를 구현하도록 했다.
이 상태에서 싱글톤 패턴을 적용하자면...
관리자 격인 클래스(: 여기선 MovieManagerImpl 클래스)에서 작업한다.
먼저... private으로 instance를 변수처럼 선언한다. (표현이 이게 맞나?)
(private: 해야 외부에서 객체 생성이 안되니까!)
(static: 밑에서 설명)
private static IMovieManager instance = new MovieManagerImpl();
그 다음은... getInstance 메서드를 작성한다.
(public: 반대로 얘라도 public 해야 기존 생성했던 걸 호출 가능하니까)
(static: 더 밑에서)
public static IMovieManager getInstance() {
return instance;
}
내 생각에... 앞서 언급한 싱글톤 패턴의 핵심이었던: 불필요한 객체의 생성 방지
이걸 구현하는 포인트는 static인 것 같다.
그러니까, IMovieManager(인터페이스)를 "instance"로 선언해놓고,
getInstance() 메서드를 호출하면 "instance"라는 인스턴스가 생성이 되는데,
또 getInstance() 메서드를 호출해봐야 어차피 static으로 선언한 똑같은 "instance"만 반환되기 때문에,
새로 생성은 안되는 원리인 것 같다.
(※ 0127 - 코드 살짝 수정)
'코딩 > Java' 카테고리의 다른 글
Java - Static에 대하여... (0) | 2023.06.11 |
---|---|
Java - Interface에 Abstract가 아닌 메서드를 작성할 수 있다?? (0) | 2022.02.05 |
java - 왜 인터페이스? (0) | 2022.01.26 |
java - 다형성에 대한 이해 (0) | 2022.01.23 |
java - 기본 자료형 정리 (0) | 2022.01.19 |