일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- jsp
- IntelliJ
- ubuntu
- php
- devops
- springboot
- linux
- Design Patterns
- Git
- it
- Web Server
- Spring Batch
- elasticsearch
- MySQL
- 맛집
- 요리
- ReactJS
- Gradle
- laravel
- Oracle
- jenkins
- JVM
- Spring Boot
- redis
- AWS
- db
- java
- Spring
- javascript
- tool
Archives
- Today
- Total
아무거나
싱글턴 패턴(Singleton Pattern) 본문
반응형
[싱글턴 패턴]
싱글턴 패턴(Singleton Pattern)이란 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴
지금까지의 클래스를 잘 생각해 보면, 클래스를 하나 만들고, 만들어진 클래스로부터 객체를 여러 개 생성하여 사용하였습니다. 하지만 싱글턴 패턴을 이용하면,
클래스 하나에 객체를 유일하게 하나만 생성하여 모든 곳에서 하나의 객체에만 접근할 수 있습니다. 즉 전역의 개념으로 객체를 사용할 수 있다.
** static이나 클래스가 선언되는 위치를 데이터 영역이라하고 그 클래스들이 생성한 객체들이 위치하는 영역을 heap영역 이라한다.
예제로 소스파일을 실행시켜 확인하자.
[MainClass.java]
public class MainClass {
public static void main(String[] args) {
FirstClass firstClass = new FirstClass();
SecondClass secondClass = new SecondClass();
}
}
[SingletonClass.java]
public class SingletonClass {
// 내가 나를 생성하여 나한테 다시 할당해준다.
// SINGLETON_CLASS_INSTANCE : 데이터 영역
// new SingletonClass() : heap 영역
private static SingletonClass SINGLETON_CLASS_INSTANCE = new SingletonClass();
public int i = 10;
// private 접근제어자이므로 내부에서만 이 클래스를 생성할 수 있다.
// 생성자를 생성할 수 없다는것은 즉, 객체를 만들 수 없다는 것이다.
// 그러므로 객체가 생성되기 전에(클래스 단계) 바로 호출을해서 그 getSingletonClass에서
// 자기 자신을 생성해서 돌려줘야 한다.
private SingletonClass() {
// TODO Auto-generated constructor stub
}
// 해당 메소드는 싱글턴클래스를 반환한다(본인)
// 외부에서 public으로 접근해서 사용할 수 있는데 static이므로 객체가 생성되기전에도 바로 사용할 수 있다.
// 그러므로 getSingletonClass를 호출하면 바로 SingletonClass를 리턴받을 수 있다.
public static SingletonClass getSingletonClass() {
// 싱글톤 클래스가 null일때는 싱글톤 클래스 객체를 만들어서 그 객체가 갖고있는 메모리의 주소값을
// 클래스 영역에 있는 static변수 싱글톤클래스인스턴스에 할당
if(SINGLETON_CLASS_INSTANCE == null) {
SINGLETON_CLASS_INSTANCE = new SingletonClass();
}
// null이 아닐경우는 싱글톤클래스인스턴스를 바로 반환한다.
return SINGLETON_CLASS_INSTANCE;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
[FirstClass.java]
public class FirstClass {
public FirstClass() {
// SingletonClass singletonClass = new Single... 이런식으로는 사용이 불가능하다.
// 이유는 생성자 접근제어자가 private이기 때문이므로 아래처럼 사용하자
SingletonClass singletonClass = SingletonClass.getSingletonClass();
System.out.println("FirstClass");
System.out.println("i = " + singletonClass.getI());
singletonClass.setI(200);
System.out.println("i = " + singletonClass.getI());
}
}
[SecondClass.java]
public class SecondClass {
public SecondClass() {
SingletonClass singletonClass = SingletonClass.getSingletonClass();
System.out.println("SecondClass");
System.out.println("i = " + singletonClass.getI());
}
}
* 결과
FirstClass
i = 10
i = 200
SecondClass
i = 200
// 즉 외부에서 하나의 객체만 공유해서 쓸 수 있는것이 싱글턴 패턴이라고 한다.
반응형
'Java & Kotlin > Java' 카테고리의 다른 글
String의 이해 (0) | 2019.08.12 |
---|---|
스트레티지 패턴 (0) | 2019.08.12 |
인터페이스 (0) | 2019.08.08 |
추상클래스(abstract) (0) | 2019.08.08 |
super 키워드 (0) | 2019.07.04 |
Comments