(허전하길래 썸네일용 이미지를 만들어봤는데 쑥스럽네요...)
디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용해 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것.
개인적으로 클래스의 객체를 여러 개 생성해도 그냥 걔 하나!!! 라고 생각하니 이해가 쉬웠다.
자바스크립트를 잘 모르지만 직관적으로 이해가 가장 쉬워보인다.
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
*/
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