싱글톤 패턴이란 클래스의 인스턴스가 딱 1개만 생성되는 디자인 패턴이다.
private 생성자로 객체의 생성을 단 1번만 할 수 있도록 제한한다.
public class SingletonService {
//1. static 영역에 객체를 딱 1개만 생성해둔다.
private static final SingletonService instance = new SingletonService();
//2. public으로 열어서 객체 인스턴스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용한다.
public static SingletonService getInstance() {
return instance;
}
//3. 생성자를 private으로 선언해서 외부에서 new 키워드를 사용한 객체 생성을 못하게 막는다.
private SingletonService() {
}
public void logic() {
System.out.println("싱글톤 객체 로직 호출");
}
}
여러 가지 어노테이션을 통해 Bean을 스프링에 등록할 수 있다.

스프링에서는 사용자가 직접 의존성 주입하던 것을 특정한 매개체를 통해 진행한다.
이 과정에서 제어의 역전이 발생한다고 표현한다.

우리가 Container라고 칭하는 것은 사실은 ApplicationContext 인터페이스로 구현된 것이다. 이는 다음과 같은 구현 단계를 거치고 있다.
