일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- jvm
- 클래스
- inversion of control
- class
- 객체
- 회고록
- jwt
- 항해99솔직후기
- bean
- 프로세스
- 스레드
- 항해99장점
- API
- Instance
- DI
- 인스턴스
- 객체지향 프로그래밍
- 인스턴스화
- object
- process
- 항해99단점
- 쓰레드
- IoC
- 소셜로그인
- 부트캠프추천
- 소셜
- social login
- Dependency Injection
- 오브젝트
- Thread
- Today
- Total
로운's 기술노트
[항해 5기] 3주차 Week I Learned (DI/IoC/Bean) 본문
[이번 주차의 테마는 '숙련']
이번 일주일(1/21~1/27)은 2주차에 비해 더 힘들다고 느끼지 못했음에도 불구하고, 지금까지의 항해 기간 중 체감상 가장 짧았다. 아마 주특기 입문으로 해야 할 일이 많아서 그렇지 않았나 추측한다.
아직 만족할 만한 성장을 이루진 못했지만, 조급해하지 않고 내 페이스대로 항해에 참여하고자 한다.
■ DI(Dependency Injection)란?
: 의존성 주입(or 의존관계 주입)은 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 필요한 객체를 받아서 사용하는 것이다. 아래의 경우, 'A2객체인 부품(Dependency)에 B객체인 부품을 조립(Injection)한다'라고 해석 하면 좀 더 이해가 쉬울 수 있다.
ㅇ 예제
- A1은 객체가 생성될 때 B객체도 같이 직접 생성
- A2는 객체가 생성되어도 외부 B객체(Dependency)를 주입(Injection)하는 형식
- A2같은 방식이 DI라고 볼 수 있음
ㅇ DI의 장점
1) 의존성이 줄어든다.
: 의존한다는 것은 그 의존대상의 변화에 취약하다는 것이다.(대상이 변화하였을 때, 이에 맞게 수정해야함) DI로
구현하게 되었을 때, 주입받는 대상이 변하더라도 그 구현 자체를 수정할 일이 없거나 줄어들게됨.
2) 재사용성이 높은 코드가 된다.
: 기존에 BurgerChef 내부에서만 사용되었던 BurgerRecipe을 별도로 구분하여 구현하면, 다른 클래스에서 재사용할
수가 있다.
3) 테스트하기 좋은 코드가 된다.
: BurgerRecipe의 테스트를 BurgerChef 테스트와 분리하여 진행할 수 있다.
4) 가독성이 높아진다.
: BurgerRecipe의 기능들을 별도로 분리하게 되어 자연스레 가동성이 높아진다.
■ IoC(Inversion of Control)란?
: '제어의 역전'이라고도 하며, 기존 사용자가 모든 작업을 제어하던 것을 컨테이너에게 위임하여 객체의 생성부터 생명주기 등 모든 객체에 대한 제어권이 넘어간 것을 의미한다. 이때 제어권을 위임받은 컨테이너가 IoC컨테이너이다.
ㅇ IoC 컨테이너
1) IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
2) POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
3) 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
■ Bean이란?
: IoC컨테이너에 등록되어 관리되는 객체를 빈(Bean)이라고 한다.
스프링에서는 스프링이 제어권을 갖고 직접 생성하고, 의존관계를 부여하는 오브젝트를 의미하며, 이러한 경우 빈의
등록은 XML, 자바 코드(애너테이션)을 통해 할 수 있다.
ㅇ 주요 속성
1) class(필수): 정규화된 자바 클래스 이름
2) id: bean의 고유 식별자
3) scope: 객체의 범위 (sigleton, prototype)
4) constructor-arg: 생성 시 생성자에 전달할 인수
5) property: 생성 시 bean setter에 전달할 인수
6) init method와 destroy method
[출처]
https://cjw-awdsd.tistory.com/10
https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/
https://dog-developers.tistory.com/12
https://developer-pi.tistory.com/83
https://gmlwjd9405.github.io/2018/11/10/spring-beans.html
'항해99_'22.01~04' 카테고리의 다른 글
[항해 5기] 5주차 Week I Learned (CORS) (0) | 2022.02.13 |
---|---|
[항해 5기] 4주차 Week I Learned (ORM, SQL, MVC) (0) | 2022.02.06 |
[항해 5기] 2주차 Week I Learned (객체지향 프로그래밍/JVM) (0) | 2022.01.14 |
[항해 5기] 1주차 Week I Learned (API란?) (0) | 2022.01.14 |
[항해 5기] Mini Project_11조 완성 (0) | 2022.01.14 |