싱글톤 패턴이란 Singleton Patten

DEV NAHYUN·2021년 10월 5일
0

Spring

목록 보기
4/8

출처: https://jeong-pro.tistory.com/86 [기본기를 쌓는 정아마추어 코딩블로그]

스프링 설정 파일의 < bean > 엘리먼트 중 scope를 학습하며...
< bean >의 여러 속성들

  • 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다.

  • 메모리 낭비를 방지 가능하다.

  • DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용.
    (쓰레드풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정, 로그 기록 객체등)

  • 싱글톤 패턴의 문제점
    싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇄 원칙" 을 위배하게 된다. (=객체 지향 설계 원칙에 어긋남)
    따라서 수정이 어려워지고 테스트하기 어려워진다.
    또한 멀티쓰레드환경에서 동기화처리를 안하면 인스턴스가 두개가 생성된다든지 하는 경우가 발생할 수 있음

  • ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 스프링 설정 파일 -->

<bean id="tv" class="polymorphism.SamsungTV" scope="singleton"/>

</beans>
  • TVUser.java
package polymorphism;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class TVUser {
	
	public static void main(String[] args)
	{
		// 1. Spring 컨테이너를 구동한다.
	    AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");

	    
	    // 2. Spring 컨테이너로부터 필요한 객체를 요청(Lookup)한다.
		TV tv1 = (TV) factory.getBean("tv");
		TV tv2 = (TV) factory.getBean("tv");
		TV tv3 = (TV) factory.getBean("tv");

		
		// 3. Spring 컨테이너를 종료한다.
		factory.close();

	}

}
  • 결과 : 객체를 한 번만 생성
		INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
		INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@41975e01: startup date [Tue Oct 05 14:26:56 KST 2021]; root of context hierarchy
		===> SamsungTV 객체 생성
		INFO : org.springframework.context.support.GenericXmlApplicationContext - Closing org.springframework.context.support.GenericXmlApplicationContext@41975e01: startup date [Tue Oct 05 14:26:56 KST 2021]; root of context hierarchy

반대로 scope 속성을 "prototype"으로 지정하면 매번 새로운 객체를 생성하여 반환한다.

<bean id="tv" class="polymorphism.SamsungTV" scope="prototype"/>```
profile
나만 알아보면 된다는 마음으로 작더라도 조금씩

0개의 댓글

관련 채용 정보