일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- InteliJ
- maven
- javascript error
- flutter mac 설치
- DART
- node.js
- datagrip 한글깨짐
- class-transformer
- 코어자바스크립트
- Stream
- 봤어요처리
- Spring
- db
- @RequestBody
- eqauls-hashcode
- 인텔리제이
- JavaScript
- ojdbc6
- svn
- oracle
- Aspect
- MySQL
- Java
- TypeScript
- 프로젝트 여러 개
- tecoble
- REST
- SQL
- 프로그래머스
- Mac
- Today
- Total
개발자가 되고 싶은 개발자
[Spring] IoC, DI 본문
안녕하세요, 이번 포스팅에선 스프링의 주요 개념인, IoC와 DI에 대해서 알아보도록 하겠습니다.
💡우선, DI란 무엇인지 알아보겠습니다.
Dependency Injection. 해석하면 의존성 주입, 의존 주입이라는 뜻이 됩니다.
의존성을 갖는다는 것은 어떤 뜻인지 알아보도록 하겠습니다.
class Command {
public static void run() {
System.out.println("Running");
}
}
class Robot {
public static void basic() {
System.out.println("Walking");
}
}
public class test {
public static void main(String args[]) {
Robot.basic();
}
}
명령어를 담는 Command 클래스, Robot클래스, main메소드가 담긴 test클래스가 있습니다.
(편의상 static으로 작성했습니다.)
Command에는 뛸 수 있는 메소드가 담겨있습니다.
Robot의 기본 기능은 것는 것입니다.
지금은 아무 의존관계가 없는 각각의 클래스입니다.
class Command {
public static void run() {
System.out.println("Running");
}
}
class Robot {
public static void basic() {
System.out.println("Walking");
}
public static void upgrade() {
Command.run();
}
}
public class test {
public static void main(String args[]) {
Robot.upgrade();
}
}
위와 같이 걷기만 하던 로봇을 업그레이드시켜 뛸 수 있도록 만들었습니다.
upgrade의 메소드는 Command클래스의 함수를 실행시킵니다.
이제 Robot의 upgrade 기능은 Command클래스를 의존하게 된 것이고, 의존성을 갖게 된 것입니다.
SPRING에서의 DI는 Robot의 업그레이드를 Robot 클래스의 코드 안에서 하드코딩하는 것이 아닌,
외부(컨테이너)에서 의존성을 주입하는 것을 말하고, IoC의 한 종류입니다.
💡IoC에 대해서 알아보겠습니다.
그런데, 로봇의 구매자가 로봇이 뛰는 것은 성에 차지 않는다며, 날아가도록 업그레이드를 요청합니다.
위 클래스 파일들이 3개로 나눠져있다고 생각해봅시다.
Command 클래스로 들어가서 날아가는 기능을 추가하고,
다시 Robot 클래스로 들어가 upgrade 메소드를 수정해야 합니다.
실무에서 이러한 방식은 규모가 커지면 커질수록 에러를 유발하고, 유발하기 전에 분석하는데도 시간이
걸릴 것 같습니다.
그래서 나온 디자인 패턴이 IoC, Inversion of Control 제어의 역전, 역 제어입니다.
프레임워크를 사용하는 이유는 복잡하고 반복적인 일들을 어느 정도 맡기기 위해서입니다.
제어의 역전. 모듈(객체)의 제어(권한)를 넘겨주는 것. 이것은 프레임워크의 기본적인 기능이라 볼 수 있습니다.
(모든 프레임워크가 그런 것은 아니겠지만요?!)
💡IoC Container
DI 마지막 부분에서 외부에서 주입하는 것이라 하였고, 괄호 안에 컨테이너라고 적어두었습니다.
여기서 말씀드린 컨테이너는 IoC컨테이너입니다.
객체를 생성하고, 객체 간의 의존성을 이어주는 역할을 합니다.
IoC의 개념을 실제로 구현하도록 하는 프레임워크이고, 설정 정보에 따라 객체를 생성하여 돌려줍니다.
여기서 말하는 설정 정보는 기본적으로 XML형태로 작성되고, 추가적으로 Java Annotation을
이용해서도 설정이 가능합니다.
Spring Ioc Container의 기능을 확인하고 싶으시다면 아래 링크를,
사용하실 때의 방법이 궁금하시다면 아래 링크의 관련 자료를 참고하시면 됩니다.
차후에 예제에 대해서도 작성해봐야겠습니다.
💡Reference
이 글을 전자정부 프레임워크의 교육 자료를 참고하여 작성하였습니다.
많은 개념들을 한 번에, 그것도 직역된 단어로 접하다 보니, 아직도 헷갈리는 개념들이 있습니다.
전자정부 프레임워크를 공부하던 중, 마침 교육자료에
스프링에 대한 기본 개념도 잘 정리되어 있어 정리해보는 중입니다.
스프링을 처음 접하시는 분들도 이참에 같이 참고해보시는 것도 추천드립니다.
잘못된 부분은 알려주시면 수정하도록 하겠습니다. 감사합니다.
'Dev > Java & Spring' 카테고리의 다른 글
[Java] 클래스 변수/인스턴스 변수 · 클래스 메소드/인스턴스 메소드 (0) | 2021.01.12 |
---|---|
[Java] NullPointerException Case1 (0) | 2020.09.07 |
[Spring] 전자정부 프레임워크 공통 컴포넌트 db설정 (0) | 2020.03.24 |
[Spring] AOP 용어 및 예제 (0) | 2020.03.18 |
[SpringBoot] DB 연결 (0) | 2020.03.06 |