본문 바로가기
개발노트/암기필수!

JAVA : Thread 와 Singletone

by 전지적진영시점 2023. 2. 18.
반응형

이번 포스팅은 Thread 와 Singletone에 관해서 입니다.

 

 

Thread

지금 공부하고 있는 자바스크립트 언어는 싱글 스레드 기반이며
코어가 여러개 있어도 메인 스레드라고 하는 단일 스레드에서만 작업이 가능하다

 

따라서 자바스크립트 코드는 동시에 실행될 수 없다 -> 노드가 싱글 스레드 기반이기때문 ㅇㅇ

 

먼저 스레드를 알기전에 프로세스(Process)를 알아보자

 

프로세스(Process)란
  • 운영체제에서 할당하는 작업의 단위
  • 프로세스 간에는 메모리 등의 자원을 공유하지 않는다
  • 프로세스는 스레드를 여러개 생성해 여러 작업을 동시에 처리할 수 있다

 

스레드(Thread)란
  • 프로세스 내에서 실행되는 흐름의 단위
  • 스레드들은 부모 프로세스의 자원을 공유하고 같은 주소의 메모리에 접근 가능하므로 데이터 공유가 가능하다

 

싱글 스레드(Single Thread)
  • 하나의 프로그램에서 동시에 하나의 코드만 실행할 수 있다
  • 코드가 실행되서 끝나는 지점과 다음 코드의 시작 지점이 연결되어 있다
  • 각 스레드는 한번에 하나의 작업만 수행가능

 

멀티 스레드(Multi Thread)
  • 멀티스레드를 지원하는 프로그래밍 언어는 여러 코어를 사용하여 여러 작업을 동시에 완료할 수 있다
  • 동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 갯수로 제한된다

 

그림을 넣어봤는데,, 

싱글 스레드

 

멀티 스레드

 

 

 

Singletone

 

 

JAVA에서 Singletone 패턴이란?

 

Singletone이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 이름이다.

이는 생성자의 호출이 반복적으로 이루어져도 실제론 생성되는 객체는 최초 생성된 객체를 반환함을 의미한다.

 

public class Animals {
    private static Animals animals = null;

    private Animals(){}

    public static Animals getInstance() {
        if(animals == null) {
            animals = new Animals();
        }
        return animals;
    }

    public void print(String input) {
        System.out.println(input);
    }
}

 

위 코드는 간단한 싱글톤 예제이다.

Animals라는 클래스가 있고 private static을 사용하여 최초로 메모리를 한번만 할당한다.

 

이는 getInstance를 통해서만 생성이 가능하다.

기존에 생성된 값이 존재한다면 생성된 인스턴스를 반환한다.

프로그램 전반에 걸쳐 하나의 인스턴스를 유지한다.

getInstance()는 최초에 할당된 하나의 메모리를 계속 쓰는 방식이다.

 

싱글톤 패턴 사용 시 주의할 점 및 알아야할 점

  • 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야함
  • Private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야함
  • 스프링 컨테이너를 사용하면 컨테이너에 등록되는 빈들을 알아서 싱글톤으로 관리
  • 하나의 인스턴스를 생성해서 공유하는 형식이므로 객체의 상태를 유지하게 설계하면 안됨
  • 가급적 읽기만 가능해야함
  • 특정 클라이언트에 의존적이거나 값을 변경할 수 있는 필드가 있으면 안됨
  • 필드 대신 공유되지 않는 지역변수, 파라미터, ThreadLocal  쓰자

위와 같은 특징들이 있으니 한번 읽어보면 좋을 듯 합니다.

 

오늘은 여기까지 ~

반응형

댓글