디자인 패턴 - 싱글톤 패턴

라멘커비·2023년 9월 19일

CS

목록 보기
4/4
post-thumbnail

(허전하길래 썸네일용 이미지를 만들어봤는데 쑥스럽네요...)

디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용해 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것.

싱글톤 패턴

  • 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴.
  • 하나의 인스턴스를 만들어 놓고 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어드는 장점이 있다.
  • 하지만 의존성이 높아진다는 단점이 있다.
  • 보통 데이터베이스 연결 모듈에 많이 쓰인다고 한다.

개인적으로 클래스의 객체를 여러 개 생성해도 그냥 걔 하나!!! 라고 생각하니 이해가 쉬웠다.

자바스크립트에서의 싱글톤 패턴

자바스크립트를 잘 모르지만 직관적으로 이해가 가장 쉬워보인다.

class singleton {
   constructor() {
      if(!Singleton.instance) {
          Singleton.instance = this 
      }
     return Singleton.instance
   }
  getInstance() {
      return this.instance 
  }
}
const a = new Singleton()
const b = new Singleton()
console.log(a==b) //true

자바에서의 싱글톤 패턴

INSTANCE가 나중에 수정되지 않도록 정적이고 최종적이어야 한다. (private, static, final)
자바에서 static으로 선언하면 해당 클래스를 ClassLoader가 로딩할 때 객체를 생성해 준다고 한다.

class Singleton {
   private static class singleInstanceHolder {
      private static final Singleton INSTANCE = new Singleton();
   }
   public static Singleton getInstance() {
      return singleInstanceHolder.INSTANCE;
   }
}

public class HelloWorld {
   public static void main(String[] args) {
      Singleton a = Singleton.getInstance();
      Singleton b =Singleton.getInstance();
      System.out.println(a.hashCode());
      System.out.println(b.hashCode());
      if(a==b) {
         System.out.println(true);
      }
   }
}

/*
705927765
705927765
true
*/

kotlin으로 싱글톤 패턴

  • object 클래스는 별도의 객체 생성없이 바로 호출된다.
  • object 클래스는 접근 시점에 하나의 객체만 생성된다. object 클래스를 생성하면 그게 바로 싱글톤 패턴이 된다.
  • object 내에 선언된 속성과 함수는 클래스명.함수() 등으로 호출 가능
object MyDataObject {
    val x: Int = 3
}

fun main() {
    println(MyDataObject) // MyDataObject
}

그런데 예전 게시글에서 kotlin의 object 클래스에 대해 공부한 적이 있다. >> 해당 게시글
저번에는 object 키워드는 익명 클래스를 만드는 목적으로 사용한다고 학습했지만 싱글톤 패턴을 만드는 역할이 있었구나!!

참고

https://kotlinworld.com/166
(주홍철)면접을 위한 CS 전공지식노트
https://kotlinlang.org/docs/object-declarations.html#data-objects
https://junyoung-developer.tistory.com/192

profile
일단 시작해보자

0개의 댓글