토마토바구니
600
2020-05-16 16:55:37
6
269

자바 인터페이스, 생성자 질문입니다~~~



public class InlineExamConsole implements 인터페이스1 {

    private 인터페이스2 변수;

    public 생성자(인터페이스2) {
        this.인터페이스2 = 인터페이스2;
    }


이런 코드가 있을 때요.


인터페이스2를 필드로 가지고 와서, 생성자의 매개변수로 초기화를 왜 하는건가요?

같은 클래스에서 인터페이스2를 사용하려고 하는건가요??


0
  • 답변 6

  • 으어어어어
    729
    2020-05-16 18:52:58

    의존성 주입 이라는 기법입니다.


    구글에 "의존성 주입" 이라고 검색하시면 더 많은 내용을 알아 보실 수 있어요.

  • 토마토바구니
    600
    2020-05-16 22:53:20

    으어어어어 /// 안그래도 스프링 공부하고 있어서 그런 것 같습니다ㅠㅠ근데 어떻게 쓰인건지 감이 잘 안옵니다.

  • 토마토바구니
    600
    2020-05-16 22:59:45

    으어어어어 /// 다시 공부해보니 인터페이스2가 생성자에서 할당되면서 값이 들어가고. 같은 클래스의 다른 메소드에서 사용되기 위함인건가요??

  • 으어어어어
    729
    2020-05-17 11:50:54 작성 2020-05-17 11:52:43 수정됨

    토마토바구니

    같은 클래스의 다른 메소드에서 사용되기 위함보다는 객체들 간의 느슨한 결합을 위해 사용됩니다.


    A 라는 클래스가 B 라는 클래스에 강한 의존을 할 경우 B 라는 클래스에 변경 사항이 생기면 A 라는 클래스 또한 다시 테스트를 해야하거나 예상치 못한 버그가 발생할 수 있습니다. 이 처럼 서로 강한 결합을 하게 되면 확장성이 떨어지고, 사이드 이펙트가 크다는 단점이 생기게 됩니다. 흔히 말하는 스파게티 코드가 이와 같은 경우를 많이 내제하고 있습니다. 서로 이곳저곳에서 클래스끼리 강한 결합을 하니 코드가 스파게티 처럼 꼬이는 거죠.


    하지만, 이를 의존성 주입을 통해 실제 알고리즘의 구현은 인터페이스로 분리하여 구현하게 하고 의존성을 받아 사용하면 변화에 대해 유연하게 대응할 수 있습니다. A 라는 클래스에서 인터페이스를 구현한 B 라는 클래스를 생성자를 통해 의존성 주입을 받으면, B 라는 클래스에서 변경 사항이 생겨도 A 라는 클래스는 변화가 없으니 사이드 이펙트를 걱정할 필요가 없는거죠.


    디자인 패턴을 공부하시면 더 많은 내용을 알아볼 수 있습니다.


  • 토마토바구니
    600
    2020-05-17 17:46:22

    으어어어어 /// 감사합니다! 스프링 배우면서 디자인 패턴도 같이 좀 공부해야 할 것 같습니다ㅠㅠ

  • yamanin
    2k
    2020-06-04 17:02:59
    private 인터페이스2 변수;

    해당 라인에서 인터페이스2 는 "그릇형태", 변수는 "빈그릇"

    public 생성자(인터페이스2) {
            this.인터페이스2 = 인터페이스2;

    생성자에서 arg로 넘어온 인터페이스2는 "밥이 들어있는 그릇",

    this.인터페이스2라고 적어서 스스로 헷깔릴수 있는데요. "this.변수"가 맞겠죠. 



  • 로그인을 하시면 답변 을 등록할 수 있습니다.