스프링프레임워크 기본 다지기
일을 하다가 가끔씩 명확하게 개념을 정리를 해둬야겠다고 마음먹었는데... 드디어 오늘 짧게나마 정리를 해보려 한다.
스프링 컨테이너와 빈
내 생각에는 용어와 개념이 꽤 중요하다고 생각하기는 하지만 활용하는 능력이 없다면 의미 없다고 본다. 결국 프로그래밍 100가지를 할 줄 알아도 사람들이 사용하는 서비스가 아니라면 의미가 없지 않을까 싶다.
스프링 프레임워크를 접하게 되면 자주 나오는 용어가 컨테이너, 빈, Ioc, DI 다.
최대한 간단하게 알아보자
Ioc (Inversion of Control)
대부분 제어의 역전 이라는 이해하기 힘든 말로 설명한다.
Ioc를 제대로 이해하기 위해서는 디자인패턴에 대해 약간의 공부가 필요하다. 또는 프로그래머로써 일을 해왔다면 더욱 쉽게 이해할 수 있다.
어렵지 않다. 자바 코드로 확인하자.
public class Car {
File file = new File();
}
정말 간단한 코드다. 자바 기본서들을 보면 객체를 생성하는 방법에 대해 위와 같이 설명한다. 거의 99%는...
참고로 객체를 생성하는 행위는 컴퓨터 램(메모리)에 인스턴스화 하는 것을 의미한다.
생성된 file 객체 안에 정의된 (클래스 안의 메서드 같은 기능) 등을 사용할 수도 있고 저장할 수도 있다.
정상적인 코드인데... 저게 문제가 될 수 있다.
문제란?
프로그램의 코드가 많아지고 복잡해진다면 유지보수 하기가 점점 힘들어지게 되며 추가 기능을 구현하거나 특정 기능을 변경할 때 많은 문제가 발생하게 된다.
왜 문제가 될 수 있는지를 알고 싶다면, 아래 추천하는 책을 읽어보면 어느 정도 감을 잡을 수 있다.
https://www.yes24.com/Product/Goods/108192370
어쨌든,
제어의 역전은 다른 객체를 위의 예제와 같이 직접 생성하거나 제어하는 것이 아니라 외부에서 가져와 사용하는 것을 의미한다.
코드의 형태를 바꾸면 아래와 같다.
public class Car {
private File file;
}
이런 형태로 프로그램을 만드는 기법이 오래전부터 있어왔고 똑똑한 선배 프로그래머들이 사용한 방법이다. 이것이 바로 디자인 패턴에 집약되어 있는데 이런 패턴들을 스프링 프레임워크에 반 강제적으로 적용해 놓은 것이다.
그러면 DI에 대해 알아보자.
DI (Dependency Injection)
앞에서 설명한 것처럼 스프링 프레임워크에서는 객체즐을 관리하기 위해 제어의 역전이란 기법을 사용한다. 그리고 제어의 역전의 형태를 구현하기 위해 사용하는 방법이 DI 다.
직역하면 의존성 주입인데 어떤 클래스가 다른 클래스에 의존한다는 뜻이다.
코드를 보면 조금 더 쉽게 이해가 가능하다.
public class Car {
@Autowired <-- Car에서 File 객체를 주입받음
File file;
}
스프링 프레임워크 어딘가에 File이라는 객체가 정의되어 있고 그것을 주입받아서 사용하는 모습이다. 어딘가가 바로 xml 파일이며 스프링 부트에서는 property 파일이 될 수도 java class가 될 수도 있다. 이것을 빈(Bena)이라 말하기도 한다.
결국은 가변적(Flexible)으로 프로그램을 만들어가는 환경? 방법?으로 이해하면 좋다.
스프링 프레임워크 교육을 할 때 핵심 개념이라고 하며 꼭 이해를 해야 한다고들 한다.
'슬기로운 자바 개발자 생활 > 스프링 및 자바웹 서비스' 카테고리의 다른 글
spring boot soap wsdl 서비스 만들기 (0) | 2024.06.09 |
---|---|
Java map object value to integer Casting (0) | 2023.06.15 |
스프링부트 WebFlux 스트리밍 (1) | 2023.06.11 |
Mybatis에서 Oracle Procedure 사용 (0) | 2023.06.04 |
스프링에서 oracle declare 문 사용해보기 (0) | 2023.05.14 |
댓글