인프런 커뮤니티 질문&답변
DI 제가 이해한게 맞는지 궁금해요
작성
·
50
1
강의에선 되게 단순하게 큰 틀 위주로 알려주시는 것 같아서 개인적으로 더 자세한 의미나 추가적인 개념이 궁금할 때 검색해보는 편인데, DI라는 것이 클래스 간의 결합도를 낮추고 객체의 유연성을 높이기 위해 빈 객체를 만들어 주입하는 것을 의미한다고 정리했습니다. 이게 맞게 정리한건지 궁금합니다. 또 추상 클래스와 인터페이스 간의 차이점은 찾아봐도 이해가 어렵길래 선생님의 친절한 설명이 필요할 것 같아서 추가로 여쭤봅니다!
답변 2
2
안녕하세요, 인프런 AI 인턴입니다. 김진호님, 질문해주셔서 감사합니다!
우선, DI(Dependency Injection)에 대한 이해를 체크해보겠습니다. 김진호님께서 말씀하신 대로 DI는 클래스 간의 결합도를 낮추고 객체의 유연성을 높이는 기법입니다. 구체적으로는 객체가 직접 다른 객체를 생성하는 대신 외부에서 생성된 객체를 주입받음으로써, 클래스 간의 의존성을 줄이고, 코드의 재사용성과 테스트 용이성을 확보할 수 있습니다. 이렇게 DI를 통해 객체와 객체 간의 결합도를 낮추면, 시스템은 더 유연하고 확장 가능하게 됩니다.
추상 클래스와 인터페이스의 차이점에 대해 간단히 설명드리면:
추상 클래스:
- 공통적인 속성이나 메서드를 구현할 때 사용하며, 일부 메서드는 구현이 없이 추상 메서드로 정의됩니다.
- 여러 개의 클래스를 상속받을 수 없지만, 상속받으면서 기본적인 구현을 제공할 수 있습니다.
- 상태를 가질 수 있는 필드가 존재할 수 있습니다.
- 공통적인 속성이나 메서드를 구현할 때 사용하며, 일부 메서드는 구현이 없이 추상 메서드로 정의됩니다.
인터페이스:
- 구현 없이 메서드의 시그니처만 정의하여 구현체가 반드시 구현해야 할 메서드를 명시합니다.
- 다중 상속이 가능합니다. 이는 한 클래스가 여러 인터페이스를 구현할 수 있다는 뜻입니다.
- 필드를 가질 수 없으며, 상수만 선언할 수 있습니다.
- 구현 없이 메서드의 시그니처만 정의하여 구현체가 반드시 구현해야 할 메서드를 명시합니다.
추가적인 이해를 돕기 위해 Spring DI에 대한 문서와 자바 인터페이스와 추상 클래스에 대한 문서를 참고하시면 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
0
진호님~! 멋진 학습 노하우를 갖고 계시군요!!
저도 관심 있는 용어와 분야에서 디깅(digging) 하는 것이 최고의 학습법이라 생각하는 1인이거든요..❤
(증거 : https://songacoding.tistory.com/185 )
DI 를 다음과 같이 정리해주셨군요.
'클래스 간의 결합도를 낮추고 객체의 유연성을 높이기 위해 빈 객체를 만들어 주입하는 것'
만약 면접에서 이렇게 답변하신다면 면접관 입장으로 저는 합격 드립니다!
나만의 방식으로 정리를 잘 하신걸요?
그렇다면 진호님! 혹시 추상 클래스와 인터페이스를 비교하기 위해 여러가지 찾아보셨을 것 같은데
이 두가지도 진호님의 생각을 먼저 정리해서 말씀주시고
제가 함께 문장을 완성할 수 있다면 완벽할 것 같습니다..🥹
혹시 가능하실까요?! 시간이 조금 걸려도 괜찮습니다! 블로그 써보시면 더 좋고....
생각해보시고 편히 답변주세요! 원하신다면 제가 바로 설명드려도 좋습니다~
귀한 질문 주셔서 다시 한번 감사합니다 진호님!! ㅎㅎ
이런 질문과 생각은 언제든 환영이에요,,🍀
제가 블로그를 안써봐서 블로그 글로 멋들어지게 적어보고 싶었는데 필력이 부족하네요,,
일단 제가 이해한 바로는 크게는
인터페이스:형용사
추상 클래스:명사의 느낌이 강했습니다.
인터페이스는 멤버 변수를 지닐 수 없고 기능만을 모아놓은 것과 같아서 조금 더 가볍게? 사용이 가능하고 하나의 대상이 여러 인터페이스를 상속 받을 수 있습니다. '피해를 입을 수 있다'라는 특징은 사람이든 식물이든 받을 수 있는 것 처럼요.
하지만 추상 클래스는 동물의 종과 같이 해당 클래스를 지닌 대상들의 공통 상태와 기본 동작을 모두 표현해야합니다. 한 개체가 여러 종으로 구분될 수는 없는 것처럼 추상 클래스 또한 하나만 상속 받을 수 있습니다.
정리하자면 추상 클래스는 공통적인 요소를 상속하고, 추가적인 요소만 적으면 되도록 한거고, 인터페이스는 ‘이 메서드가 있다’라는 약속을 재사용하도록 해서 같은 기능을 여러 군데에서 다른 이름으로 사용하면서 혼동이 생기는 걸 미연에 방지하는 용도로, 추상 클래스의 수직적인 상속과 다르게 수평적으로 기능을 추가로 '붙인다'라는 느낌이 강했습니다.
혹시 제가 잘못 알고 있거나 한 부분 있으면 편하게 지적해주시면 감사하겠습니다!!





설명 감사합니다!!