23-06-13 TIL

more·2023년 6월 13일
0

문제

  • IoC, DI 에 대해서 인강을 들었는데 제대로 이해가 되지 않는다.
    • 의존성, 주입, 제어의 역전에 관해서 설명을 해주셨는데 정리해두신 자료를 읽어봐도 제대로 이해가 안감

시도

  • 우선은 설명해주신 영상과 정리 자료들을 계속 보면서 이해해보도록 노력하자
    • 코드가 변경 될 때에 Interface 다형성의 원리를 이용해서 결합을 약하게 만드는 것이 의존성을 약하게 하는 것이라고 함
      -> 그러니까 메인 메서드에서 코드를 수정할 때에 다른 클래스나 메서드들을 수정할 필요가 없게 (혹은 적게) 만드는 것이 의존성을 약하게 하는 것??
    • 주입은 단순히 필요로 하는 객체를 해당 객체에 전달하는 것이라고 함
      -> 필드에 직접 주입 : 필드에 객체를 지정하고 그것을 해당 객체 안에서 사용
      -> 메서드를 통한 주입 : set 메서드를 사용하여 필요한 객체를 주입받아 사용
      -> 생성자를 통한 주입 : 생성자를 선언할 때에 매개변수로 넘겨주어서 사용
    • 왜 굳이 '주입', '의존성'이라는 단어를 사용하면서까지 정의를 하는 지 잘 모르겠음.
      -> 그냥 객체에서 다른 객체 사용 이라든지, 수정할 때 편리하도록 구현해두기 같은 걸로 하는 거랑 차이가 있나? 제대로 된 개념 정리가 좀 필요할 듯

해결

  • DI는 '객체를 직접 생성하는 것이 아니라 객체를 외부에서 생성한 후 주입하는 것' 이 포인트인 거 같다.
    • 그러니까 같은 객체 내에서 다른 객체를 사용할 경우, 안에서 new로 생성하는 것이 아니라 setter나 생성자를 통해서 생성한 후, 그 생성한 것을 객체가 가져다 쓰는 것으로 이해하면 될 거 같다.
  • IoC는 제어의 흐름을 바꾸는 것인데, 기존에는 객체 생성 > 클래스 내부에서 의존성 객체 생성 > 의존성 객체 호출 순이었다면 스프링에서는 객체 생성 > 의존성 객체 주입 (스스로 만드는 것이 아니라 스프링이 만들어 놓은 객체를 주입, 주도권이 스프링에게) > 의존성 객체 메서드 호출 순으로 되는 것
    • 즉, IoC와 DI는 다른 개념이 아니라 개념과 그것에 따른 디자인 패턴 이라고 생각 하면 될 거 같다.

알게 된 점

  • 자바를 배울 때에 왜 클래스를 이렇게 따로 따로 만들고, 이렇게 따로 따로 사용해야하는 것이며, 왜 메인 메서드 말고 다른 메서드들을 하나하나 만들어야하나 에 대한 질문에 있어서 내가 처음에 내린 결론은 이렇게 해야지 캡슐화가 잘 되어서 보안이 잘 유지된다 정도였다. 하지만 그것을 넘어서 좋은 코드, 보기 좋고 수정하기 편한 코드를 만드는 과정과 그에 따른 개념이 이렇게 많은 줄은 몰랐음...

0개의 댓글