스프링의 특징과 의존성 주입(DI)

Kim Dong Kyun·2022년 12월 12일
3

Today I learned

목록 보기
15/43

질문과 답변들

1] 스프링 프레임워크는 어떤 특징 혹은 장점을 가지고 있나요? (3가지 이상)

내 답변

1. 스프링 프레임워크는 자바를 통한 객체지향적 코드의 더 편리한 구현을 위해 설계된 것 같습니다. 클래스 간의 명확한 역할 분리와 책임 관계의 구성(의존성~)을 조금 더 편하게 하기 위해서 설계되었다고 생각합니다.

2. 더해서 데이터 베이스의 관리를 편하게 만듭니다.

  • 사용자는 컨트롤러 계층에서는 RESTAPI의 구현을 했는지와 Service단과의 소통이 잘됐는지
  • 데이터 베이스 계층에서는 Service 계층에서 사용될 데이터를 명확한 책임관계(의존성)에 따라 제공했는지를 검증하면 됩니다.

이 말은, Service 단계에서 사용자가 해야 할 일은 많아지고, DB와 Controller 계층에서는 할 일이 줄었다는 뜻이므로 프로젝트에 존재하는 클래스간의 연관 관계를 조금 더 객체 지향적으로 만들 수 있습니다. (단일 책임, 변경에는 닫혀있고 확장에는 열려있는. 즉 변경에 대한 비용이 최소화하는 방향)

찾은 답변

  • 스프링은 기업용 애플리케이션의 요구 사항에 초점을 맞춘 앱입니다. 신뢰성, 서버의 안정성, 데이터 관리의 용이성을 이유로 사용합니다

2] 스프링에서 DI (의존성 주입) 를 사용하는 이유가 무엇인가요? 예를 통해 설명 해 보세요. (본인이 경험한 예를 기록으로 남겨봐도 좋겠음)

나의 답변

  1. 강한 결속을 피하기 위해서입니다. 강한 결속의 단점은 한 클래스의 변경(프로퍼티 등의~)이 다른 레이어의 객체나 매서드들에게 변경을 강요한다는 것입니다.
  2. 예를 들어 Repository계층에 있는 클래스의 변경으로 인해 이 클래스를 사용하는 Service, Controller 계층의 매서드를 모두 변경해야 되는 경우가 생깁니다.
  3. 따라서 이 결합을 최대한 느슨하게 하기 위해, Bean을 이용해서 객체의 데이터를 넘겨주는 식으로 활용합니다.(이 방식은 싱글톤 패턴의 사용과도 유사합니다)

위와 같이 final로 선언한 memoRepository 라는 Bean을 이용해서 값의 변경이 실제 객체를 손상하지 않으며, repository 계층에서의 변화가 있어도 repository 부분에서 변경하면 됩니다.


위와 같이 싱글톤 패턴을 사용한 모습. 매번 객체를 새로 생성했을 때 클래스마다 값이 초기화 되는 문제를 해결했습니다.

찾은 답변

  1. 의존성이 줄어든다.

주입받는 대상이 변하더라도 그 구현 자체를 수정할 일이 없거나 줄어들게됨.

  1. 재사용성이 높은 코드가 된다.

다른 클래스에서 재사용할 수가 있다.

  1. 테스트하기 좋은 코드가 된다.
  1. 가독성이 높아진다.

다음 시간에는(아마 내일)

. 스프링 시큐리티를 사용해 회원관리하는 방법을 순서도를 통해 정리해 보세요.

. 현재는 allinone 에서 방식의 변화를통해 스프링의 어떤 기능 처리로 코드의 구성이 어떻게 변화해서 사용하고 있으며 이때 코드의 흐름은 어떻게 흘러갈지 등도 공부해 보면 앞으로 스프링 프레임 워크를 이해하는데 도움이 되지 않을까 싶습니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 4일

강한 결속을 피한다 -> 객체의 생성을 통한 참조 (new 객체를 필드, 생성자 등에 두는 것)을 피하고, 스프링이 객체의 생성과 관리를 담당한다. 이것이 IoC의 기본 개념이며, DI는 이 생성된 객체를 느슨하게 주입받는 것이다.

답글 달기