티스토리 뷰

Item64에서 객체는 인터페이스를 사용해 참조하라 말한다

프로그래밍 입문 단계에서도 흔히 접할 수 있는 말인데

그때 당시에는 왜 명확한 타입을 두고 상위 타입으로 뭉뚱그려 받을까라는 생각이 있었다

이제는 바로 그 점 때문에 사용한다는 걸 알지만 처음 들어서는 쉽게 이해할 수 없었다

 

인터페이스란 용어가 낯설어서 그러지 않았나 생각이 든다

좋은 책들을 보면 명확한 설명이 되어있긴 한데 확 와닿지는 않는다

이해하고 나면 그 책들만큼 정확하고 이해하기 쉬운 설명이 없는데 이해하기 까지가 어려운 게 문제다

이럴 땐 명확하지 않고, 올바르지 않은 의미더라도 자기만의 언어로 풀어서 생각해보는게 좋다

내가 쉽게 이해해보려 생각한 인터페이스란 최소의 기능을 담은 껍데기다

구현체의 표면에 인터페이스라는 껍데기를 덧씌우면 인터페이스만으로 어떤 구현체든 다룰 수 있게 된다

이 것이 다형성의 개념이고 좀 더 들어가보면 가장 추상화된 형태로 인터페이스를 만들고

여러 구현체를 만들어 새로운 기능 요구사항이 들어오더라도 유연하게 추가하거나 수정할 수 있다

 

이펙티브 자바의 조언처럼 인터페이스를 기반으로 코드를 작성해놓으면

어떤 요구사항이 들어와도 유연하게 대처할 수 있는 것이다

더 좋은 기능을 가진 새로운 구현체가 나오거나 특성이 다른 자료구조를 선택해야 할 때도 마찬가지다

컬렉션 프레임워크는 Collection이라는 인터페이스를 제공하고 무수한 구현체들이 있다

Map은 예외지만 얼마든지 List <-> Set 상호 대체가 가능하고

LinkedHashSet, HashSet, TreeSet 등등 특성이 다른 놈들도 존재한다

 

다만 추상화 될 수록 복잡성은 올라간다

트레이드오프를 고려해 유연한 API를 얻을지 명확한 API를 얻을지 선택해야 한다

스프링 프레임워크 정도의 복잡성을 가진 프로그램이 아니라면 실제로는 제일 추상화된 형태로 해놔도

이해하는데 아무 문제없고 눈치로 파악할 수 있으니 기본으로 interface-based programming으로 가자

 

객체지향을 이해하고 자바를 깊게 이해하기 시작하려면 다양한 상황을 겪어보고 많은 책을 읽어보는 수밖에 없는 것 같다

자바의 정석 책과 유튜브 강의를 통해 자바를 처음 접했고 오브젝트, 모던 자바 인 액션 등을 읽으면서 이해를 더해 나갔다

오브젝트 같이 추상적인 개념을 설명하는 책은 두고두고 곱씹어 보며 읽어야 한다

잘 모르는 분야였는데도 좋은 책들 위주로 찾아보고 여러 번 완독 한 게 학습에 도움이 많이 된 것 같다

내 생각에는 자바 입문서 떼고 객체지향의 사실과 오해와 같은 가벼운 책 하나 보고

바로 오브젝트로 넘어가서 2~3 회독하는 게 올바른 개념을 빠르게 탑재할 수 있는 테크 같다

댓글
링크
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday