티스토리 뷰
Item64에서 객체는 인터페이스를 사용해 참조하라 말한다
프로그래밍 입문 단계에서도 흔히 접할 수 있는 말인데
그때 당시에는 왜 명확한 타입을 두고 상위 타입으로 뭉뚱그려 받을까라는 생각이 있었다
이제는 바로 그 점 때문에 사용한다는 걸 알지만 처음 들어서는 쉽게 이해할 수 없었다
인터페이스란 용어가 낯설어서 그러지 않았나 생각이 든다
좋은 책들을 보면 명확한 설명이 되어있긴 한데 확 와닿지는 않는다
이해하고 나면 그 책들만큼 정확하고 이해하기 쉬운 설명이 없는데 이해하기 까지가 어려운 게 문제다
이럴 땐 명확하지 않고, 올바르지 않은 의미더라도 자기만의 언어로 풀어서 생각해보는게 좋다
내가 쉽게 이해해보려 생각한 인터페이스란 최소의 기능을 담은 껍데기다
구현체의 표면에 인터페이스라는 껍데기를 덧씌우면 인터페이스만으로 어떤 구현체든 다룰 수 있게 된다
이 것이 다형성의 개념이고 좀 더 들어가보면 가장 추상화된 형태로 인터페이스를 만들고
여러 구현체를 만들어 새로운 기능 요구사항이 들어오더라도 유연하게 추가하거나 수정할 수 있다
이펙티브 자바의 조언처럼 인터페이스를 기반으로 코드를 작성해놓으면
어떤 요구사항이 들어와도 유연하게 대처할 수 있는 것이다
더 좋은 기능을 가진 새로운 구현체가 나오거나 특성이 다른 자료구조를 선택해야 할 때도 마찬가지다
컬렉션 프레임워크는 Collection이라는 인터페이스를 제공하고 무수한 구현체들이 있다
Map은 예외지만 얼마든지 List <-> Set 상호 대체가 가능하고
LinkedHashSet, HashSet, TreeSet 등등 특성이 다른 놈들도 존재한다
다만 추상화 될 수록 복잡성은 올라간다
트레이드오프를 고려해 유연한 API를 얻을지 명확한 API를 얻을지 선택해야 한다
스프링 프레임워크 정도의 복잡성을 가진 프로그램이 아니라면 실제로는 제일 추상화된 형태로 해놔도
이해하는데 아무 문제없고 눈치로 파악할 수 있으니 기본으로 interface-based programming으로 가자
객체지향을 이해하고 자바를 깊게 이해하기 시작하려면 다양한 상황을 겪어보고 많은 책을 읽어보는 수밖에 없는 것 같다
자바의 정석 책과 유튜브 강의를 통해 자바를 처음 접했고 오브젝트, 모던 자바 인 액션 등을 읽으면서 이해를 더해 나갔다
오브젝트 같이 추상적인 개념을 설명하는 책은 두고두고 곱씹어 보며 읽어야 한다
잘 모르는 분야였는데도 좋은 책들 위주로 찾아보고 여러 번 완독 한 게 학습에 도움이 많이 된 것 같다
내 생각에는 자바 입문서 떼고 객체지향의 사실과 오해와 같은 가벼운 책 하나 보고
바로 오브젝트로 넘어가서 2~3 회독하는 게 올바른 개념을 빠르게 탑재할 수 있는 테크 같다
'Java > Effective Java' 카테고리의 다른 글
[Item66] 자바 네이티브 인터페이스 (0) | 2022.08.03 |
---|---|
[Item65] 리플렉션 못 본 척 하기 (0) | 2022.08.02 |
[Item63] 문자열은 어떻게 다뤄야 하는가 (0) | 2022.07.24 |
[Item62] 타입 안전 제일 (0) | 2022.07.17 |
[Item61] 원시적일 수록 빠르다 (0) | 2022.07.11 |