Java 11일차 2-1(싱글톤)

2022. 11. 24. 11:02코딩배움일지/JAVA

싱글톤

 

애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴

 

즉, 싱글톤 패턴은 '하나'의 인스턴스만 생성하여 사용하는 디자인 패턴이다.

 

인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용하는 것!

생성자가 여러번 호출되도, 실제로 생성되는 객체는 하나이며 최초로 생성된 이후에 호출된 생성자는 이미 생성한 객체를 반환시키도록 만드는 것이다

(java에서는 생성자를 private으로 선언해 다른 곳에서 생성하지 못하도록 만들고, getInstance() 메소드를 통해 받아서 사용하도록 구현한다)

 

왜 쓰는가?

먼저, 객체를 생성할 때마다 메모리 영역을 할당받아야 한다. 하지만 한번의 new를 통해 객체를 생성한다면 메모리 낭비를 방지할 수 있다.

또한 싱글톤으로 구현한 인스턴스는 '전역'이므로, 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능한 장점이 있다

 

디자인 패턴(Design Pattern)이란?

디자인 패턴이란 기존 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션 같은 것입니다. 디자인 패턴 계의 교과서로 불리는 [GoF의 디자인패턴]에서는 객체지향적 디자인 패턴의 카테고리를 "생성 패턴(Creational Pattern)", "구조 패턴(Structural Pattern)""행동 패턴(Behavioral Pattern)" 3가

생성(Creational) 패턴 구조(Structural) 패턴 행동(Behavioral) 패턴
Singleton Adapter Command
Abstract Factory Composite Interpreter
Factory Method Decorator Iterator
Builder Facade Mediator
Prototype Flyweight Memento
  Proxy Observer
    State
    Strategy
    Template Method

지로 구분하고 있습니다.

 


import lombok.Getter;

import java.util.Scanner;

public class ScannerSingleton {
    private static ScannerSingleton instance = null;


    @Getter
    private Scanner scanner;

    private ScannerSingleton() {
        scanner = new Scanner(System.in);

    }

    public static ScannerSingleton getInstance() {
        if (instance == null) {
            instance = new ScannerSingleton();
        }
        return instance;
    }
}

/

import java.util.Scanner;

public class Scanner1 {
    public void inputName(){
        String name = null;
        Scanner scanner = ScannerSingleton.getInstance().getScanner();


        System.out.println("이름을 입력하세요");
        name = scanner.nextLine();

        System.out.println("이름:" + name);
        System.out.println();
    }
}

\

import java.util.Scanner;

public class Scanner2 {

    public void inputAge(){
        int age = 0;
        Scanner scanner = ScannerSingleton.getInstance().getScanner();


        System.out.println("나이를 입력하세요");
        age = scanner.nextInt();

        System.out.println("나이:" + age);
    }
}

/

public class ScannerMain {
    public static void main(String[] args) {
        Scanner1 s1 = new Scanner1();
        Scanner2 s2 = new Scanner2();

        s1.inputName();
        s2.inputAge();

    }
}

 

'코딩배움일지 > JAVA' 카테고리의 다른 글

Java 11일차 3(빌더)  (0) 2022.11.24
Java 11일차 2-2(싱글톤)  (0) 2022.11.24
Java 11일차 2(스테틱)  (0) 2022.11.24
Java 11일차 1(static)  (0) 2022.11.24
Java 10일차 2(Entity)  (0) 2022.11.23