티스토리 뷰
요즘 내가 자주 시도하는 객체지향적 사고는 어떻게 하면 공통된 부분을 뽑아내 여러 곳에서 재사용할 수 있을 지다
작성한 지 꽤 지났는데 어떻게 공통된 부분을 뽑아냈고 이를 재사용할 수 있는지 고민했던 글이다
고수가 보면 콧방귀를 뀔 코드일 수 있으나 초보라면 참고해보면 괜찮을 거라 생각해 첨부한다
저 코드도 아쉬운 부분이 많다
switch 난사로 더러워진 코드를 정리하는 것까진 좋았으나 들어오는 인자와 함수를 매핑할 자료구조가 따로 필요하다
객체지향적 코드라 할 수 없는 게 저것은 타입으로 묶은 게 아니고 자료구조를 이용해 묶은 것이기 때문이다
따라서 또 다른 OAuth2 Provider를 지원하기 위해서는 자료구조에 추가해줘야 한다는 단점이 있다
이 부분을 개선하기 위해서는 Provider 별로 다른 클래스를 만들고 얘네를 같은 인터페이스로 묶으면 될 것 같긴 하다만
당시에는 오버 엔지니어링 같아서 내버려두었다, 언젠가 다시 개인 프로젝트를 진행할 때의 도전 거리가 생겼구나
어설프지만 리팩토링을 거치면서 느낀 점이 있었다
객체지향을 제대로 사용하기 위해 인터페이스, 추상 클래스를 적절히 사용해야 하고
제대로 사용했다면 쓸데없는 if, switch문 등이 필요 없다
코드 가독성이 향상될 뿐만 아니라 기존 코드를 수정할 때 다른 코드에 미치는 파급력이 줄어든다
책에서 말한 것처럼 boolean flag, enum flag를 사용해 클래스를 나눠둔 것은 객체지향의 아류다
내 코드 또한 Map으로 객체지향을 흉내 낸 것이고
자바 공부한 지 1년이 돼가는데 이제야 객체지향이 뭔지 슬슬 보이기 시작한다
돌이켜 보면 캡상추다 달달 외우고 SOLID 달달 외우는 것보다 자신이 진행한 프로젝트에
흩뿌려져 있을 수많은 if, switch를 어떻게 없앨지 고민하다 보면 객체지향을 더 빠르게 이해할 수 있었을 것 같다
'Java > Effective Java' 카테고리의 다른 글
[Item25] 자바에는 왜 top-level function이 없을까? (0) | 2022.03.01 |
---|---|
[Item24] Nested Class (0) | 2022.03.01 |
[Item22] 규칙 준수 (0) | 2022.02.28 |
[Item21] 인터페이스 default method는 만능이 아니다 (0) | 2022.02.28 |
[Item20] 항상 인터페이스로 (0) | 2022.02.26 |