핀수로그
  • Class | Object | Instance | IoC | DI
    2022년 07월 02일 23시 30분 05초에 업로드 된 글입니다.
    작성자: 핀수
    728x90
    반응형

    Class, Object, Instance

    👉🏻 Class : 설계도
    👉🏻 Object : 실체화가 가능한
    👉🏻 Instance : 실체화

     

    예를 들어 내가 집을 꾸미기 위해 가구를 사자! 라고 한다면

    이말을 들은 사람은 어떤 가구? 라고 되물을 것이다.

    가구는 추상적인 것으로 ‘개념'에 가깝다.

     

    그래서 나는 의자를 살것이라고 대답한다.

    의자를 주문하면 실제 의자가 집으로 배달되어 올테니..

    의자는 실체화가 가능한 Object 가 된다.

     

    그렇게 구입해 도착한 내 눈 앞의 의자는

    실제 세계에 존재하는 것이 된다.

    이때의 의자는 instance 가 된다.

     

     


     

    IoC (Inversion of Control), 제어의 역전

    집에 가구를 배치한다고 생각해보자.

    (위에서 의자를 예로 들었기 때문에 여기서도 의자를 예로 들겠습니다..

    예로 자주 나오는 자동차-엔진, 컴퓨터-CPU 정도로 이해해주시면 감사하겠습니다.)

    public class 안방(){
        의자 chair = new 의자();
    }
    public class 거실(){
        의자 chair = new 의자();
    }

     

    변경의 전이

    의자를 배치했다.

    그런데 안방의 의자를 안락의자로 바꾸고 싶다고 생각해보자.

    안락의자 클래스를 만드는 것은 어렵지 않다.

    의자를 의존하고 있던 안방 클래스에도 변화가 생기게 되어 수정이 일어난다.

    (의자를 의존하던 것이 안방 뿐 아니라 다른곳도 있다면 거기서도 수정이 일어날 것이다.)

    ⇒ 변경의 전이

    public class 안방(){
        안락의자 chair = new 안락의자();
    }

     

    이것을 해결하는 방법은 의자를 interface 로 만드는 것이다.

    public interface 의자{}
    
    public class 안락의자 implements 의자 {}
    
    public class 안방(){
        의자 chair = new 안락의자();
    }

    그러나 안락의자가 아닌 흔들의자를 놓고 싶다면..

    안방에서 의자를 생성하고 관리하고 있기 때문에 

    변경은 또 일어날 수 밖에 없다.

     

     

    IoC (Inversion of Control), 제어의 역전

    이를 해결하기 위한 것이 IoC, 제어의 역전이다.

    제어의 역전은 어떠한 일을 수행하도록 만들어진 프레임워크에 제어권을 위임함으로써 관심사를 분리하는 것을 의미한다.

    → 말이 참 어렵다..예시로 살펴보자

     

    public static void main(Strings[] args){
        // 1. 생성자
        의자 chair = new 흔들의자();
        거실 room = new 거실(chair);
        // 2. 메서드의 매개변수
        거실 room = new 거실();
        room.set의자(chair);
    }

    거실 클래스에서 의자 객체를 만들고 관리하는 것이 아니라

    외부에서 의자 객체를 만들어 거실의 생성자나 매개변수로 제공하는 것을 의미한다.

    ⇒ 의존성 주입

     

    기존에는 각 방에서 의자를 생성하고 관리했겠지만

    현재는 의자의 생성 및 관리를 외부에 위임한 것이다.

    이제는 흔들의자 말고 다른 의자를 놓는다고 해서 안방 클래스를 건들지 않아도 된다.

     

     

    DI (Dependency Injection), 의존성 주입

    위에서 말했듯 

    의존 관계에 있는 클래스의 객체를 외부에서 생성하여 주입받는 것을 의미한다.

     

     


    References 

    아키텍처를 알아야 앱 개발이 보인다 by 옥수환 

    https://youtu.be/XBG6CUtVCIg

    728x90
    반응형

    '배경지식 > 배경지식' 카테고리의 다른 글

    SQL문 완전 정복  (0) 2022.04.17
    포인터  (0) 2022.04.17
    환경변수  (0) 2021.11.07
    IO  (0) 2021.11.05
    다다익램  (0) 2021.11.05
    댓글