씨네
공부하는 개발자 강씨네
씨네
  • 분류 전체보기 (460)
    • Web (21)
      • HTML (11)
      • CSS (10)
    • JS 관련 (49)
      • JavaScript (27)
      • JQuery (22)
    • TS 관련 (15)
      • TypeScript (15)
    • NodeJS (7)
      • NodeJS (7)
    • 따라하며 배우는 시리즈 (23)
      • NodeJS & ReactJS Basic (23)
      • NodeJS & ReactJS Movie (0)
      • NodeJS & ReactJS Youtube (0)
      • NodeJS & ReactJS ChatBot (0)
    • SPA (14)
      • React (14)
      • Vue (0)
      • Anguler (0)
    • Java 관련 (118)
      • Java (52)
      • JDBC (6)
      • JSP & Servlet (18)
      • Spring Legecy (38)
      • SpringBoot (4)
    • Python (26)
      • Python (20)
      • PyMongo (1)
      • Django (5)
    • Git (24)
      • Github (24)
    • RDB (22)
      • Oracle (21)
      • MySQL (1)
    • NoSQL (5)
      • MongoDB (5)
    • OS (4)
      • Linux (4)
    • 빅데이터 (2)
      • hadoop (2)
    • IDE (20)
      • eclipse (11)
      • VSCODE (4)
      • VisualStudio (1)
      • IntelliJ (1)
      • PyCharm (1)
      • DBeaver (2)
    • Install (3)
      • Tomcat (1)
      • Docker (1)
      • Anaconda (1)
    • 오류&에러 (28)
      • TS (2)
      • NodeJS (7)
      • SQL (8)
      • Java (1)
      • Spring (4)
      • Git (6)
      • 기타 (0)
    • 알고리즘 (67)
      • 수열 (1)
      • 백준(backjoon) (39)
      • Programmers (27)
    • 자격증 (5)
      • SQLD (5)
    • 기타 (2)
    • IT유튜브로 지식쌓기 (2)

공지사항

인기 글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
씨네

공부하는 개발자 강씨네

[Java] 싱글톤 패턴(Singleton pattern)
Java 관련/Java

[Java] 싱글톤 패턴(Singleton pattern)

2021. 11. 9. 11:01
728x90

싱글톤 패턴(Singleton pattern)이란?

싱글톤 패턴이란 어떤 클래스가 생성자가 수차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 한 번만 메모리를 할당하며 그 메모리에 객체를 만들어 사용하는 패턴입니다.

생성자의 호출이 반복적으로 이루어져도 실제로 생성되는 객체는 최초 생성된 객체를 반환해 줍니다.

이런 싱글톤 패턴은 자바에서 많이 사용합니다.

​

1. Singleton.java

package com.singleton;

// singleton pattern : 메모리(heap)에 객체를 한번만 생성
public class Singleton {

	// 2. 객체를 확인할 주소(reference) 변수 선언
	private static Singleton singleton;
	
	// 1. 보통은 public으로 선언하지만  외부에서 사용할 수 없도록 private으로 선언해보았습니다.
	private Singleton() {
		System.out.println("singleton instance 생성");
	}
	
	// 3. 객체가 heap에 있는지 확인
	// 있으면 주소값 리턴, 없으면 새로운 객체 생성
	public static Singleton getInstance() {
		if(singleton == null) {
			singleton = new Singleton();
			System.out.println("new!");
		}else {
			System.out.println("exist!");
		}
		return singleton;
	}

}

​

2. MTest.java

package com.singleton;

public class MTest {

	public static void main(String[] args) {
		//Singleton singleton = new Singleton(); //생성자가 private로 선언되어있어 에러발생
		Singleton s1 = Singleton.getInstance();
		System.out.println(s1);
		System.out.println(s1.hashCode());
		
		Singleton s2 = Singleton.getInstance();
		System.out.println(s2);
		System.out.println(s2.hashCode());
	}
}

​

일반적으로 싱글톤 패턴이 사용되는 경우의 예제입니다.

위의 MTest의 실행 결과는 다음과 같습니다.

객체를 두 번 생성했지만 한 번만 생성이 된 걸 볼 수 있습니다.

처음 호출했을 때는 null값을 가지고 있었지만 두 번째 호출될 때는 이미 값이 있습니다.

​

이러한 싱글톤 패턴은 한 번의 객체 생성으로 재 사용이 가능하기에 메모리 낭비를 방지할 수 있습니다.

또한 무조건 한번 생성으로 전역성을 띠기 때문에 다른 객체와 공유 또한 용이합니다.

하지만 멀티쓰레드(Muti Thread) 환경에서 안전하지 않다는 단점이 있습니다.

728x90

'Java 관련 > Java' 카테고리의 다른 글

[Java] 컬렉션(Collection framework)  (0) 2021.11.11
[Java] 제네릭(Generic)  (0) 2021.11.10
[Java] 내부 클래스(inner class)  (0) 2021.11.08
[Java] 인터페이스(interface)를 이용한 도형의 넓이 구하기 & 캡슐화  (0) 2021.11.07
[Java] 추상클래스(abstract class)  (0) 2021.11.06
    'Java 관련/Java' 카테고리의 다른 글
    • [Java] 컬렉션(Collection framework)
    • [Java] 제네릭(Generic)
    • [Java] 내부 클래스(inner class)
    • [Java] 인터페이스(interface)를 이용한 도형의 넓이 구하기 & 캡슐화
    씨네
    씨네
    개발자 씨네가 공부하는 내용을 기록 겸 공유하는 블로그입니다!

    티스토리툴바