2020/05/30 - [🌎Web Application/Spring] - [Spring] Spring 이란
1. 스프링을 사용하기 전
우리는 지금까지 한 클래스 내에서 다른 클래스의 기능이 필요로 할 때, new연산자를 통해 그 클래스의 생성자를 호출해서 사용했었다.
예를 들어. 메인메소드 내에서 외부 클래스 MessageBean의 메소드 SayHello 을 쓰기위해서는,
public class MessageBean {
public void sayHello(String name){
System.out.println("안녕, "+name);
}
}
MessgeBean bean = new MessageBean();
bean.sayHello("Spring");
와 같이, 우리(주체)가 사용 할 클래스(메인 클래스)내에서 사용 될 클래스(MessageBean)를 만들고 (new연산자) 사용(.method())했다.
==> 즉, 우리가 사용 할 클래스와 사용 될 클래스의 관계는 개발자(우리)에 의해 직접 코드에서 부여했다.
==> 이제까지는 클래스를 사용하려면 자바코드에서 클래스 생성자를 호출해 객체를 생성했다.
메인 클래스는 MessageBean의 sayHello() 기능을 사용 하려면 MessageBean 클래스가 필요하다.
즉 메인 클래스는 MessageBean에 <<의존>>하고 있다.
< "의존하다"의 의미 >
어떤 기능을 실행시키기 위해 다른 클래스가 필요로 할 때. 즉, A가 B에 의존한다는 것은 A가 B객체를 사용한다는 것. )
이러한 방식(매번 개발자가 직접 클래스사이의 관계를 부여하는 방식)은 아래와 같은 문제점이 있다.
만약 의존하는 클래스(MessageBean)에 변경사항이 생기면 해당 클래스를 의존하고 있던 모든 클래스들의 소스코드를 수정해 줄 필요가 생긴다. ==> 서로 간의 의존관계가 높기 때문이다. == 결합도가 높다!
최종목표는 코드의 유연성을 위해 이 의존관계를 낮춰주는 것이다. 즉, 결합도를 낮춰야 한다!
* (cf) 강한결합 vs 약한결합
* 현실에서 우리는 자동차의 에어컨이 고장 나면 당연히 에어컨만 수리하거나 교체하면 된다.
* 하지만 만약 자동차 에어컨의 기능이 자동차 엔진과 관련있게 설계되었다고 (현실적이지 않지만) 가정해보자.
* 에어컨에 작은 문제라도 생기면 자동차 엔진까지 손을 봐야 하는 상황이 생길 것이다!.
*
* 자동차 부품과 에어컨 부품은 전혀 << "연관성"이 없음에도 >>
* 엔지니어가 자동차 부품과 에어컨 부품이 서로 관련 있게 설계를 했다면
* 이러한 문제가 생긴다.
* (에어컨이 고장났으니 에어컨 부품만 손보면 되는데 멍청한 엔지니어가 에어컨 부품과 자동차 부품을 연관지었다면 자동차 * 까지 손봐야 한다.)
*
* 다시말해, 컴퓨터의 그래픽 카드가 고장났다면 그래픽 카드만 교체하면 되는데,
* 컴퓨터와 그래픽카드의 기능을 서로 관련 있게 설계했다면
* 컴퓨터까지 교체할 상황이 온다는 의미이다.
*
* 즉, 엔지니어는 << 서로 관련이 없는 기능끼리는 서로 영향을 주지 않게 설계해야할 필요 >> 가 있다.
*
* 이때의 엔지니어를 개발자, 자동차를 프로그램이라고 생각하면,
*
* 프로그램도 각각의 독립적인 기능들로 구성되어 있다.
* 또 각 기능들은 또 세부기능을 하는 여러 클래스들로 이루어 진다.
*
* 그런데 부품 기능을 하는 클래스에 변경 사항이 발생(ex. 에어컨 부품)했을 때
* 그 클래스의 기능과 관련 없는 다른 클래스(ex. 자동차 부품)까지 손봐야 한다면
* 위의 예처럼 여러가지 문제가 발생할 수 있다.
*
* 그러므로 서로 관련이 있는 기능들은 강하게 결합하고 관련이 없는 기능들은 약하게 결합해야 좋은 프로그램 이다.
이러한 문제점을 해결(의존관계가 높다는 문제점)하기 위해 나온 것이
DI(Dependency Injection) 의존성 주입
각 클래스 사이의 의존관계를 낮추는 것을 도와준다.
'⚙️Backend > Spring' 카테고리의 다른 글
[Spring] DI (Dependency Injection) part 5 (0) | 2020.05.30 |
---|---|
[Spring] DI (Dependency Injection) part 4 (0) | 2020.05.30 |
[Spring] DI (Dependency Injection) part 3 (0) | 2020.05.30 |
[Spring] DI (Dependency Injection) part 2 (0) | 2020.05.30 |
[Spring] Spring 이란 (0) | 2020.05.30 |