스프링과 IoC, 그리고 싱글톤

늘숲·2022년 10월 19일
0

스프링을 쓰는 이유는 기능을 담당하는 bean을 만들어놓고 불러다가 쓰기가 좋기 때문.
개발자에게 기능을 만들고 관리하게 맡기면, 개발자는 실수를 할 수도 있다.
하지만 스프링에게 IoC를 통해 관리하게 하면, 오브젝트의 생명주기를 스프링이 관리하게 된다.
다만 장점이자 단점은 하나의 기능을 생성하면 모든 Bean을 완전하게 Bean을 로딩해서 훨씬 유용하게 쓸 수 있다.
그럼 IoC란 무엇이냐?
IoC는 제어의 역전이라고 말하며, 간단히 말해 "제어의 흐름을 바꾼다"라고 한다.

객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.

기존에는 다음과 순서로 객체가 만들어지고 실행되었다.

  1. 객체 생성
  2. 의존성 객체 생성
  3. 클래스 내부에서 생성
  4. 의존성 객체 메소드 호출

하지만, 스프링에서는 다음과 같은 순서로 객체가 만들어지고 실행된다.

  1. 객체 생성
  2. 의존성 객체 주입
  3. 스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.
  4. 의존성 객체 메소드 호출

싱글톤패턴이란?
한개의 기능에는 한개의 인스턴스 객체만 생성하면 되게끔 기능을 잘게 나눠 놓고 기능에 직접 접근을 막고, 간접접근을 하는 것이다.
고정된 heap메모리를 사용하고 생성된 인스턴스를 활용하므로 메모리적 이점있음.
또다른 이점은 서로 다른 클래스간 데이터의 공유가 용이하다는 점.
싱글톤인스턴스는 전역으로 사용되는 인스턴스이므로 다른 클래스의 인스턴스들이 접근해서 사용가능.
다만 단점으로는 구현하는 코드가 다수 필요하다.
또한 동시성문제가 있으므로 싱크로나이즈드로 임계영역을 설정해야 한다.
또 두번째 단점으로는 자원을 공유하고 있기 때문에 테스트하려면 매번 인스턴스를 초기화해야 한다.
세번째 단점으로는 클라이언트가 구체클래스에 의존하게 된다.
new키워드를 직접사용해 클래스에서 객체생성하므로 이는 솔리드 원칙중 DIP위반과 OCP원칙도 위반할 가능성이 높다.
또 자식클래스를 만들기 어렵고 내부 상태 변경이 어렵다는 여러 문제가 있다.
즉 유연성이 좋지 않다.

profile
발전, 그리고 숲

0개의 댓글