Back-end/JAVA,Spring

Spring- Singleton pattern 싱글톤 패턴이란?

cheersHena 2018. 11. 7. 01:20
반응형

싱글턴 패턴 Singleton pattern이란?


클래스가 오직 하나의 인스턴스만 생성한다는것을 보장하는 패턴.

보통 데이터베이스나 웹 서비스 같은 여러 서드파티에서 해당 인스턴스에 접근가능한 유일한 지점을 만드는데 사용.



소프트웨어 디자인 패턴
에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 


Spring도 스프링 빈에서 한번 객체를 생성 해놓은 뒤, 필요시 스프링이 생성해놓은 객체를 호출해서 쓰기때문에 싱글턴 패턴을 따른다고 할 수 있다. 


ex)싱글톤 패턴을 적용한 DAO클래스.

public class UserDao{

private static UserDao instance; //인스턴스 저장할 멤버변수

public static UserDao getInstance(){

//인스턴스가 null이면 새 인스턴스 생성.(최초1번 생성)
if(instance == null) instance = new UserDao();
return instance; //인스턴스 반환
}
}

static변수에 인스턴스를 저장하고, 이를 반환한다.

처음 호출 시 인스턴스를 최초1번 생성하고, 그 이후에는 생성한 인스턴스를 반환하기만 한다.


public class UserService{

private UserDao dao; //기능 수행 위해 필요 Dao선언.

public int inserUser(UserDto u){
dao = UserDao.getInstance(); //Dao객체 가져오기.(new대신 get메서드 호출)

return dao.insertUserByDto(u); //dao메서드 실행.
}
}

이제 service 에서 직접 객체생성해 변수에 저장하지 않고, 싱글톤 패턴에 따라 의존관계가 있는 클래스의 메서드를 호출 해 인스턴스를 가져오기만 하면 된다.--> getInstance()

하지만 이렇게 하더라도 인스턴스를 가져오기 위한 메서드 호출을 매번 해줘야하는것은 변함이 없다. 


싱글톤 패턴을 적용한다 하더라도 객체 생성을 하지 않는것이 아니라, 생성횟수를 1회로 한정시킨 것에 불과하다. 또한 실행할 메서드에는 사용하고자 하는 인스턴스가 null인지 모르기 때문에 메서드를 매번 호출 해야한다. 

이러한 의존관계가 있는 인스턴스를 가지게(has-a)하는 작업을 개발자에게서 분리하는 것이 

Spring DI (의존적 주입) 의 목적이다. 







반응형