인프런 커뮤니티 질문&답변

Jaesang Yoon님의 프로필 이미지
Jaesang Yoon

작성한 질문수

스프링 핵심 원리 - 기본편

좋은 객체 지향 설계의 5가지 원칙의 적용

OCP와 DIP의 차이점

작성

·

955

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
DIP와 OCP가 상당히 비슷해보여서 구분이 잘 가질 않네요. 제가 정리한 바로는 이런데 혹시 맞나 해서 질문드립니다.

1. '클라이언트가 다형성을 사용하여 인터페이스에만 의존하게 DIP를 지켰다. AppConfig가 OCP를 이용해 확장에는 열려있고 변경에는 닫혀있게 수정했다.'

2.추가적으로 DIP, IoC, OCP 모두가 맞물려있는 것 같다는 생각이 듭니다... ㅜ

 

 

답변 2

1

안녕하세요, 인프런 AI 인턴이에요.
DIP와 OCP는 객체 지향 프로그래밍의 원칙 중에 하나로, 비슷한 개념이지만 다른 개념이에요.

DIP(Dependency Inversion Principle)는 의존성 역전 원칙으로, 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 되며, 둘 모두 추상화에 의존해야 한다는 원칙입니다. 간단히 말하면, 인터페이스에 의존하도록 설계하는 것입니다. 이런 방식으로 설계하면, 클라이언트 코드는 구체적인 구현이 아닌 인터페이스에 의존하여 유연하고 확장 가능한 코드를 작성할 수 있게 됩니다.

반면, OCP(Open-Closed Principle)는 개방-폐쇄 원칙으로, 확장에 열려 있고 변경에는 닫혀 있다는 원칙입니다. 코드의 변경 없이 기능을 확장할 수 있도록 설계하는 것이 목적입니다. 이는 인터페이스와 다형성을 통해 구현될 수 있습니다.

따라서, 제가 이해한 내용을 보면, 클라이언트가 다형성을 사용하여 인터페이스에만 의존하여 DIP를 지키고, AppConfig를 사용하여 OCP를 적용하는 예시로 이해할 수 있을 것 같아요. DIP와 OCP는 개념적으로 유사하지만 서로 다른 원칙이므로 명확하게 구분이 필요합니다.

또한, DIP, IoC, OCP는 서로 연관되어 있을 수 있습니다. IoC(Inversion of Control)는 제어의 역전을 의미하며, DIP를 실현하는 방법 중 하나입니다. IoC 컨테이너를 이용하여 객체의 생성과 의존성 주입을 관리하면 DIP를 쉽게 적용할 수 있습니다. 그리고 OCP 역시 DIP를 통해 인터페이스에 의존하도록 설계하므로, OCP를 지키면서 DIP를 적용하게 됩니다.

간단하게 정리하면, DIP는 인터페이스에 의존하도록 설계하고, OCP는 기능의 확장은 개방적이고 변경은 폐쇄적으로 관리하는 것을 목표로 합니다. 그리고 DIP와 OCP는 IoC와 연관되어 있을 수 있습니다.

더 자세한 내용이 필요하시다면, 참고 자료나 강의를 통해 좀 더 공부하시는 것을 추천드려요. 질문이 있다면 언제든지 물어보세요. 즐거운 학습되세요!

0

답변주신 내용을 추론해서 다시 정리해보면

OCP 를 지켰을 때 확장한다라는 의미는 인터페이스의 구현체를 변경한다로 볼 수 있을까요?

Jaesang Yoon님의 프로필 이미지
Jaesang Yoon

작성한 질문수

질문하기