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

작성자 없음

작성자 정보가 삭제된 글입니다.

스프링 핵심 원리 - 기본편

좋은 객체 지향 프로그래밍이란?

안녕하세요. 이해가 덜되서 질문 남깁니다.

작성

·

771

1

안녕하세요. 개발자님

무료강의 가볍게 수강하면서 아직은 이해 안된부분이

대부분이지만, 일단 기본편으로 넘어왔습니다.

기본편 강의도 일단은 가볍게 시작중입니다. 

근데, 무료 강의에서도 기본편에도 다형성을 엄청 강조

하시고 완전 멋진 기술? 기능?이라고 표현 하시는것처럼

느껴집니다. 무료 강의에서 그걸 코드로도 보여주시려고

하는것도 같았구요. 

하지만 제가 프로젝트를 안해봐서인지 모르겠지만 

클라이언트 -> 즉, 화면단 or controller or service or

이 모든과정 or 이 중 일부 과정을 지칭하는 것 같은데,

예를들어 repository를 인터페이스로 만들어 구현체를

붙인다고 하면 말씀하신 부분은 이해가 갑니다.

마치 동그란 모양을 가져다 놓고, 그안에 무엇이 들어가던

, 어떤 기능으로 바뀌던 상관 없이 연결된다는 것이

핵심 같습니다. 

그런데 제 생각에는 어짜피 구현체부터는 새로운 기능을

개발하는 것인데, 이걸 service에 직접 붙이나 

인터페이스가 있어서 붙여지나 뭐가 다른가? 이런 생각이

자꾸 듭니다.. 

이전 코드가 바뀌지 않는다는 부분도 어떤 메리트를 

갖는지 전혀 체감이 안되고..  얼만큼이 안바뀌고

그대로인건지.. 한두줄..? 이런 생각이 많이 듭니다.

클라이언트쪽 코드가 안바뀌는 것도 아닌것 같구요..

그러면 안바뀐다는게 한줄만 바뀌는게 다형성을

안쓰면 10줄 이렇게 바뀐다는건지.. 솔직히 이해가

안가네요.. 

일단은 가볍게 들으면서 공부를 더 해나가야 하는건지

, 경험이 많이 부족해서 그런 것인지 와닿지가 않네요..

그래서 이렇게 느낌상으로 질문글을 남깁니다..! 

좋은하루 되시고 미리 감사합니다!

ps) 여담으로 정리하자면 다형성이 뭔지 설명하시는

부분은 알겠는데, 저처럼 초보자는 다형성이 적용되지

않았을때의 예시 or 불편함을 한번 보여주셨으면 

이해가 될 것도 같은데, 스스로 생각을 해보니 이거나

저거나 같은것 같은데? 이런 생각이 든다는 질문

내용이였습니다.. 즉, 인터페이스 안붙이고 그냥 

붙이는거나 인터페이스로 붙이는 것이나 변경되는

코드는 비슷한거 같다는 생각도 들고.. 어짜피 연결

부는 클라이언트쪽에서도 변경해줘야 하는것 같고..

정리를 하려했는데 정리해서 질문이 안되네요..

답변 2

12

김영한님의 프로필 이미지
김영한
지식공유자

유진이님 개발 경험이 아직 많이 없다면, 이런 부분에서 충분히 고민이 되실 것 같아요.

이런 상황에서 유진이님께 추천하는 학습 방법은 강의를 꼭 2번 반복해서 복습하는 것입니다.

먼저 이 강의를 처음부터 끝까지 가볍게, 이해가 잘 안되는 부분이 있어도 모두 코드로 따라하세요.

이렇게 한번 듣고 나면 유진이 님이 궁금했던 것들도 완벽하지는 않지만 예제 코드로 어느정도 이해를 할 수 있습니다.

그리고 나서 복습을 하는데, 이번에는 진짜 집중해서 처음부터 끝까지 이해하려고 노력하면서 듣는 것입니다.

참고로 강의 한 쳅터씩 복습하는게 아니라 전체 강의를 다 듣고, 그 다음에 전체 강의를 복습하는 방식입니다.

특히 처음 개발하시는 분들은 이 방법이 많이 효과적이라고 남겨주시더라구요.

아무래도 앞 부분에 이론적인 내용들이 나오는데, 코드로 그 부분을 해보고 나면 구체적인 코드를 만져보고 난 다음이라서 다음에 그 이론들이 훨씬 더 쉽게 다가오거든요.

도움이 되셨길 바래요^^

6

현실에서 인터페이스의 예는 '자동차'를 비유할 수 있습니다.  '자동차'는 추상적인 개념이며 현실에 존재하는 실물(예를들면 티코나 아반떼)이 아닙니다. 자바에서의 인터페이스도 이런 추상적인 개념입니다. 자동차란 이러이러한 기능을 제공한다 라고 인터페이스에서 정의할 순 있으나 실체(구현체)가 없기에 인터페이스만으론 운전을 할 수 없습니다.

사용자는 자동차 운행에 대한 면허를 획득할 수 있습니다. 이 때 유의깊게 생각해보셔야 할것이 '티코 면허증', '아반떼 면허증'이 아니라 '자동차 면허증'을 획득한다는 것입니다. 사용자는 자동차를 다루는 법만 알고 있습니다. 그런데 티코도 몰 수 있고, 아반뗴도 몰 수 있습니다. 왜 그럴까요? 

그건 티코와 아반떼가 자동차라는 인터페이스를 지키고 있기 때문입니다. 모든 자동차는 제조사가 다르지만 자동차 인터페이스를 지키고 있습니다. 그래서 사용자는 다양한 자동차 구현체를 모두 동일한 방법으로 사용할 수 있습니다. 만약 자동차 회사마다 제각각으로 운전방식을 구현하면 사용자는 차를 바꿀 때마다 새롭게 운전법을 배워야만 합니다. 꽤 난감한 일이고 제대로 적응하지 못해 사고를 낼 위험도 높습니다. 이것이 인터페이스를 이용할때의 강점입니다.

그리고 다형성부분은 티코와 자동차의 관계를 생각해주세요. 자동차는 추상적이고 더 큰 개념입니다. 그래서 '티코는 자동차다' (티코 is a 자동차) 라고 얘기해도 참 입니다. 그렇죠? 그래서 티코는 티코이기도 하고 또, 자동차 이기도 합니다. 이런 특징을 다형성 이라고 합니다. 추측하고 계신 클라이언트의 일부와는 다른 개념입니다.

다형성과 관련해서는 강의를 시리즈로 계속 따라가다 보면 FrontController 버전업 하는 부분에서 유용하게 사용하는 사례가 있으니 쭈욱 훑어보시기 바랍니다

덧붙여서 말씀드리면,

지금 당장 수업 예제정도의 규모에서 다형성의 유용함을 알기는 쉽지 않을 수 있습니다.

그러나, 좀 더 큰 프로젝트에서는 중요하기에 수업시간에 강조하신것으로 생각하시면 됩니다.

김영한님의 프로필 이미지
김영한
지식공유자

codesweaver님 너무 고맙습니다^^!

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기