본문 바로가기
Spring Boot

스프링부트+JPA - 1편 ( IoC, DI )

by SICDev 2021. 4. 8.
반응형

스프링은 프레임워크이다.

Frame(틀)Work(동작하다) -> 정해진 (🦷틀딱말고🦷)안에서 동작하도록 하는것이다.

그렇다면 프레임워크는 왜 나왔을까???

주어진 틀(Frame)을 벗어나지 말라고 만들어준거다!!

어이! 니 마음대로 만들지말고!😨 짐이 틀을 하나 줄것이니라 이 틀에 맞춰서 개발을하거라!🤴🏻
그럼 좋은👍🏻 프로그램을 만들수 있을것이니라~ 하는것이 프레임워크이다.


스프링은 오픈소스이다.

오픈소스란?

소스코드가 공개🔓 되어있다는것이다!우리는 스프링이 어떻게 만들어져있는지 내부를 샅샅이 볼수있고👀, 그것을 뜯어고칠수 있다!!🔧


스프링은 IoC 컨테이너를 가진다. ( 💡핵심💡 )

IoC ( Inversion of Controll )
          제어     의     역전    ->   주도권이 스프링에게 있다(?)🤔🤔

 

IoC에 대해 더 알아보기전에 설명할것들이있다!!!

  1. Class 란?? - 설계도!💶📐📏
  2. Object 란?? - 현실에 실체화가 가능한 것(?)🤔 이건또 뭔말🐴이야?
    • Class에는 일반적인 Class가 있지만 abstract Class 라는 추상클래스도 있다.
      • 롤에서 야스오🔪(야필패)라는 클래스가 있다.
      • Class 야스오{   변수 a;   변수 b;} -> 야스오를 만들기 위한 클래스니까 얘는 야스오를 만들기위한 설계도이다!
      • 야스오는 실제로 게임할때 행동하고, 움직이고, 조작할수 있는 실체화가 가능한것이기 때문에야스오는 Object이다!
      • 롤에서 챔프🧍🏻‍♂️라는 것은 아주 추상적인 의미이다. 챔프에는 티모😕가 올수도 있고, 마스터 이🤮가 올수도 있고, 블리츠크랭크😱가 올수도 있다.챔프는 추상적이기 때문에 실체화가 불가능하다! 이런것들은 Object가 아니다.
  3. Instance 란?? - 실체화 된 것!
    • 협곡에서 티모가 돌아다니면서 버섯을 깔고 은신을 하고있다....( 세상 끔찍....🙈 )면게임속에 티모가 존재하기 때문에 티모는 Instance이다!
    • 더 쉽게 이야기 해보자! 롤을 모르시는 분들을 위해...가구 라는 것은 Object일까?? 여기 어디 가구보신분~~~👀 가구는 추상적인 개념이다!그렇다면..의자는?? 침대는?? 의자와 침대는 실체화가 가능하기때문에 Object이다.의자가 침대가 실제 세상에 띠용!! 하고 튀어나온다면 Instace가 된다.

우리는 JAVA에서 오브젝트를 생성할때 new 라는 생성자를 이용해 heap메모리에 올린다!

예를 들어 의자라는 오브젝트를 만들려면
의자 s = new 의자( ); 요딴 식으로 생성한다.

그렇다면, 내가 생성한 이 Object는 누가 관리를 하는것인가??

 

Object를 생성한 메서드에서 관리를 한다(?) 이건 또 무슨...말🐴..? (얼룩말? ㅈㅅ🤣)

public void make( ) { 
    의자 s = new 의자( );
}
-> Object를 생성한 메서드가 관리한다! 생명주기를 같이한다!
-> make라는 메서드가 실행될때만 의자라는 Object가 메모리에 올라간다!

public void use( ){
    의자 s = new 의자( );
}
-> make( )에서 생성한 s와 use( )에서 생성한 s는 같을까???
-> 당연히 놉!! new를 통해 Object를 만들면 heap메모리에 새롭게 의자라는 Object가 올라가게 된다!   

나는 use( )에서 make( )가 만든 s를 쓰고싶은데...쓸려면 넘나 복잡해....ㅠㅠㅠ😥

그.래.서 스프링이 우리가 만든 모든 Object를 읽고 heap메모리 공간에 자동으로 띄워준다..!( 나닛..!! )
우리가 생성하지 않았는데 new를 통해서 만들지 않았는데...!!
스프링이 알아서 찾아서 제어해서 Object를 메모리에 올린다! 이것이 바로 IoC( 제어의 역전 ) 이다!


스프링은 DI 를 지원한다. ( 💡핵심💡 )

DI ( Dependency Injection )
         의존성         주입

 

DI는 언제 쓰이는 걸까???

이전에는 개발자가 new를 통해서 개발자가 Object를 관리를 했다면,이제는 스프링이 모든 Object를 스캔해서 메모리에 띄워 스프링이 관리한다 ( IoC )이 스프링이 관리하는 객체를 내가 원하는 모든 곳에서 사용을 할 수 있다. ( DI )

 

만약에 스프링이 IoC를 통해 의자 Object를 메모리에 올렸다고 가정하자..!Class A에서도 의자 Object를 사용하고, Class B에서도 의자 Object를 사용한다면...A에서 사용하는 의자 Object와 B에서 사용하는 의자 Object는 같은것일까..?!맞다!!👏 같은것이다! 한마디로 싱글톤🙍🏻‍♂️으로 관리가 된다.

 

스프링이 스캔을 하면 heap메모리에 딱 한번만 Object가 올라가게되고,heap메모리에 올라간 Object들을 우리가 원하는 어떤곳에서 가져다 쓸수 있도록 해주는것이바.로.바.로.바.로 DI ( Dependency Injection ) 라고 한다.

 

 

 

 

 

 

 

 

출처

https://www.youtube.com/watch?v=XBG6CUtVCIg&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg
반응형