day67 πŸŒ•

μž₯λ―ΈΒ·2022λ…„ 8μ›” 20일
0

였늘의 μ„±κ³Ό

λͺ©λ‘ 보기
67/129

μŠ€ν”„λ§ DB 1편 - 데이터 μ ‘κ·Ό 핡심 원리 μ„Ήμ…˜ 2 μˆ˜κ°•


ν† ν”½ 1개 - 싱글톀 νŒ¨ν„΄

+) 22. 08. 23. μΆ”κ°€

싱글톀 νŒ¨ν„΄μ΄λž€, 객체의 μΈμŠ€ν„΄μŠ€κ°€ 였직 1개만 μƒμ„±λ˜λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

싱글톀 νŒ¨ν„΄μ€ ν΄λž˜μŠ€κ°€ 였직 ν•˜λ‚˜μ—¬μ•Ό 함을 보μž₯ν•˜λŠ” κ³³, λ˜λŠ” λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ— ν™œμš©ν•  수 μžˆλ‹€.

public class Singleton {
	//객체λ₯Ό 미리 생성해두고 κ°€μ Έμ˜€λŠ” 방법.
	private static Singleton instance = new Singleton();

	private Singleton() {
		//μƒμ„±μžλŠ” μ™ΈλΆ€μ—μ„œ ν˜ΈμΆœν•˜μ§€ λͺ»ν•˜κ²Œ private으둜 지정해야 ν•œλ‹€.
	}

	public static Singleton getInstance() {
		return instance;
	}
}
싱글톀 νŒ¨ν„΄ κ΅¬ν˜„ μ˜ˆμ‹œ1

public class Speaker {
	//μ›λž˜λŠ” private. getter, setter ν•„μš”ν•˜μ§€λ§Œ νŽΈμ˜μƒ public으둜 함.
	public int volume = 5;
	
	//2. private static μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
	private static Speaker instance;

	//3. public static getInstance() method κ΅¬ν˜„
	public static getInstance() {
		if(instance == null) {
			instance = new Speaker();
		}
		return instance;
	}	

	//1. private μƒμ„±μž
	private Speaker() {}
}
싱글톀 νŒ¨ν„΄ κ΅¬ν˜„ μ˜ˆμ‹œ2
public static void main(String[] args) {
	//객체1 생성
	Speaker speaker1 = Speaker.getInstance();

	//객체2 생성
	Speaker speaker2 = Speaker.getInstance();

	//객체의 μ£Όμ†Œ 비ꡐ (λ˜‘κ°™μ€ μ£Όμ†Œκ°’μ΄ λ‚˜μ˜¨λ‹€. -> 같은 μΈμŠ€ν„΄μŠ€λ₯Ό 가리킀고 μžˆλ‹€.)
	System.out.println(speaker1);
	System.out.println(speaker2);

	//객체의 attributeκ°’ μ½μ–΄μ˜€κΈ° (λ‘˜ λ‹€ 5κ°€ λ‚˜μ˜¨λ‹€.)
	System.out.println(speaker1.volume);
	System.out.println(speaker2.volume);
}
싱글톀 νŒ¨ν„΄ κ΅¬ν˜„ μ˜ˆμ‹œ2

class Singleton {
	/* static + 쀑첩 클래슀(홀더): μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‹Ή 단 ν•˜λ‚˜ + singleInstanceHolderλ₯Ό μ‹€μ œλ‘œ μ‚¬μš©ν•  λ•ŒκΉŒμ§€ λ―Έλ£Έ. 정적 μ΄ˆκΈ°ν™”λ‘œ μƒμ„±λ˜λ―€λ‘œ μŠ€λ ˆλ“œ μ„Έμ΄ν”„ν•˜λ‹€. */

	/* final: λ‹€μ‹œ 값이 ν• λ‹Ήλ˜μ§€ μ•Šκ²Œ(read only) / λŒ€λ¬Έμžλ‘œ λ³€μˆ˜ μ„ μ–Έ */

	private static class singleInstanceHolder {
		private static final Singleton INSTANCE = new Singleton();
	}

	private static Singleton getInstance() {
		return singleInstanceHolder.INSTANCE;
	}
}
싱글톀 νŒ¨ν„΄ κ΅¬ν˜„ μ˜ˆμ‹œ3

싱글톀 νŒ¨ν„΄ μ‚¬μš© μ‹œ 이점

  • κ³ μ •λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ 가지고 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό 방지할 수 μžˆλ‹€.

  • 싱글톀 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” 전역이기 λ•Œλ¬Έμ— λ‹€λ₯Έ 클래슀의 μΈμŠ€ν„΄μŠ€λ“€μ΄ 데이터λ₯Ό κ³΅μœ ν•˜κΈ°κ°€ 쉽닀.

싱글톀 νŒ¨ν„΄ μ‚¬μš© μ‹œ 문제점

  • 싱글톀 νŒ¨ν„΄μ„ κ΅¬ν˜„ν•˜λŠ” μ½”λ“œ μžμ²΄κ°€ 많이 ν•„μš”ν•˜λ‹€. λ©€ν‹°μŠ€λ ˆλ”© ν™˜κ²½μ—μ„œ λ°œμƒν•  수 μžˆλŠ” λ™μ‹œμ„± 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ synchronized ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

  • ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ ΅λ‹€. 싱글톀 μΈμŠ€ν„΄μŠ€λŠ” μžμ›μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— ν…ŒμŠ€νŠΈκ°€ κ²°μ •μ μœΌλ‘œ 격리된 ν™˜κ²½μ—μ„œ μˆ˜ν–‰λ˜λ €λ©΄ 맀번 μΈμŠ€ν„΄μŠ€μ˜ μƒνƒœλ₯Ό μ΄ˆκΈ°ν™”μ‹œμΌœ μ£Όμ–΄μ•Ό ν•œλ‹€.

  • 의쑴 관계 상 ν΄λΌμ΄μ–ΈνŠΈκ°€ ꡬ체 ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜κ²Œ λœλ‹€. new ν‚€μ›Œλ“œλ₯Ό 직접 μ‚¬μš©ν•˜μ—¬ 클래슀 μ•ˆμ—μ„œ 객체λ₯Ό μƒμ„±ν•˜κ³  μžˆμœΌλ―€λ‘œ, μ΄λŠ” SOLID 원칙 쀑 DIPλ₯Ό μœ„λ°˜ν•˜κ²Œ 되고, OCP λ˜ν•œ μœ„λ°˜ν•  κ°€λŠ₯성이 λ†’λ‹€.

싱글톀 νŒ¨ν„΄μ€ 였직 ν•œ 개의 μΈμŠ€ν„΄μŠ€ 생성을 λ³΄μ¦ν•˜μ—¬ νš¨μœ¨μ„ 높일 수 μžˆμ§€λ§Œ, 그에 λͺ»μ§€μ•Šκ²Œ λ¬Έμ œμ λ„ λ§Žλ‹€.
ν•˜μ§€λ§Œ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ 같은 ν”„λ ˆμž„μ›Œν¬μ˜ 도움을 λ°›μœΌλ©΄ 싱글톀 νŒ¨ν„΄μ˜ λ¬Έμ œμ μ„ λ³΄μ™„ν•˜λ©΄μ„œ 이점도 λˆ„λ¦΄ 수 μžˆλ‹€. μ‹€μ œλ‘œ μŠ€ν”„λ§ λΉˆμ€ μ»¨ν…Œμ΄λ„ˆμ˜ 도움을 λ°›μ•„ 싱글톀 μŠ€μ½”ν”„λ‘œ κ΄€λ¦¬λ˜κ³  μžˆλ‹€.
ν”„λ ˆμž„μ›Œν¬μ˜ 도움없이 싱글톀 νŒ¨ν„΄μ„ μ μš©ν•˜κ³  μ‹Άλ‹€λ©΄ μœ„μ—μ„œ μ‚΄νŽ΄λ³Έ μž₯λ‹¨μ μ˜ trade-offλ₯Ό κ³ λ €ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 쒋을 것이닀.


참고 자료

  1. Tecoble 2κΈ°_λ³΄μŠ€λ…, β€œμ‹±κΈ€ν†€(Singleton) νŒ¨ν„΄μ΄λž€?”, https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/

  2. 진쓰 μ½”λ”©, β€œκ°μ²΄μ§€ν–₯ μžλ°” 싱글톀 νŒ¨ν„΄ Singleton Pattern”, https://youtu.be/Cs3g44R9seo

  3. ν°λŒμ˜ν„°μ „, β€œμ‹±κΈ€ν†€νŒ¨ν„΄ | λ””μžμΈνŒ¨ν„΄β€, https://youtu.be/DHo8qRCtmGU

  4. μš°μ•„ν•œTech, β€œ[10λΆ„ ν…Œμ½”ν†‘] πŸ§‡ ν¬λ‘œν”Œμ˜ μ‹±κΈ€ν„΄κ³Ό μ •μ ν΄λž˜μŠ€β€, https://youtu.be/C6CczyrkYXU


ν•¨κ»˜ 보면 쒋은 자료

  • 이야기’s G, β€œ[μžλ°” λ””μžμΈ νŒ¨ν„΄ 이해] 5α„€α…‘α†Ό 싱글톀 νŒ¨ν„΄(Singleton Pattern)”, https://youtu.be/5jgpu9-ywtY

νˆ¬λ‘λ¦¬μŠ€νŠΈ


μ§€λ‚œ ν† ν”½ 정리

profile
김뉴비

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보