'객체 지향과 디자인 패턴'을 읽고

eora21·2022년 12월 22일
0

객체지향이 어떠한 개념인지는 아셨나요? 그렇다면 이 책으로 좀 더 감을 잡아봅시다.

왜 읽게 되었나요?

객체지향의 사실과 오해를 읽은 후, 현실적인 코드와 그에 관련한 디자인 패턴을 공부하고 싶어서 읽게 되었어요.

어떤 책인가요?

디자인 패턴은 마지막장에 조금만 나옵니다! 오히려 객체지향의 개념과 지켜야 할 것들에 대해 말해주는 책이에요.
어떠한 현실적인 이유로 객체를 지향해야 하는지, 객체를 지향한다면 어떠한 방향성을 지녀야 하는지 차분히 알아갈 수 있습니다.

누구에게 추천하나요?

객체지향의 개념은 알고 있으나 왜 지켜야하는지 아직 모르시는 분들, 어떠한 코드를 객체지향이라 하는지 아직 확신이 서지 않으신 분들은 읽어보시면 좋을 것 같습니다. 경험 많은 분들보다는 이제 시작하는데, 감이 잘 안오시는 분들께 추천드릴게요.

객체지향에 대해 더 깊은 내용을 들여다보고 싶으신 분들은 이 책보다 조영호님의 오브젝트를 추천드립니다! 목차만 봐도 이 책보다 훨씬 넓고 자세한 개념을 탑재하고 있습니다. 저도 추후에 읽을 생각이에요!

훨씬 더 많은 디자인 패턴에 대해서 깊게 공부하고 싶은 분들은 헤드 퍼스트 디자인 패턴이 다양하고 좋아 보입니다.

어떤 것을 배울 수 있나요?

들어가기

프로그램은 시간이 흐를수록 유지, 보수, 새로운 시스템 추가 등이 이루어집니다.
처음엔 정말 빠릿빠릿하고, 손쉽게 프로그램이 만들어질 수 있지만 나중에는 버튼 하나 추가하는 데에도 영겁의 시간이 걸릴 수 있어요. 왜일까요?

이는 순차지향적인 코드를 작성했기 때문입니다. 실제로 저는 학부생 시절 산학협력 프로젝트를 다수 진행했었는데, 처음엔 회사분들이 굉장히 좋아하실 정도로 빠른 개발이 진행되었어요. 그러나 후반으로 흘러갈수록 작업시간이 늘어났고 혹여나 해당 단계에서 회사의 요구사항이 바뀐다면.. 네, 밤샘의 연속이었습니다.

당시의 저는 개발을 모르는 사람들이랑 같이 일하니, 내가 얼마나 어려운 작업중인지 아무도 몰라주는구만!이라 생각했어요. 그러나 이는 어디까지나 제 잘못이었습니다. 비효율적인 프로그래밍을 반복하면서도 깨닫지 못 하고, 생각 없이 코드만 짜내려갔던 코더의 모습이었죠.

프로그래밍 경험이 없는 분들일지라도, 왜 순차지향적인 코드를 작성하면 안되는지 손쉽게 이해할 수 있는 부분입니다. 얼마나 제가 형편없는 프로그래머였는지 확인하시고, 반면교사 삼으며 책을 읽으셨으면 좋겠어요.

객체 지향

절차지향과 객체지향이 어떻게 다른지, 객체는 무엇인지, 코드의 방향성을 어떻게 잡아야 할 지, 메시지를 주고받는다는 것이 무엇인지에 대해 다루고 있습니다.

다향성과 추상 타입

클래스와 인터페이스를 통해 다향성과 추상 타입에 대해 배우고, 이것을 지켜나가면 어떠한 장점이 있을지 살짝 엿볼 수 있어요. 변화의 가능성을 지닌 곳을 찾고, 해당 부분을 정리하여 추상화하면 좋은 코드를 작성하실 수 있으실 겁니다.

재사용: 상속보단 조립

다향성을 얘기하며 상속에 대해 설명했었는데, 여기서는 상속만으로 다향성을 지켜 나갈 경우 생기는 문제점들에 대해 알아볼 수 있습니다.

상속은 의외로 까다롭습니다. A를 상속받은 B는 A의 규칙에 맞게 움직여야 합니다.
이 때, A의 규칙이 바뀐다면 B도 바뀌어야 합니다. 즉, B는 A의 확장 형태여야만 코드가 아름다워질 수 있습니다.
그러나 문제를 해결할 때, 무언가를 확장하는 방식만으로는 힘든 경우가 많습니다.

따라서 해당 부분에서는 조립을 통한 코드 구성으로, 좀 더 깔끔하고 효율적인 코드를 구성할 수 있음을 배웁니다.

설계 원칙: SOLID

면접을 준비하시면서 SOLID에 대해 들어본 분들 많으시죠? 해당 부분에서는 SOLID가 각각 무엇인지, 어떠한 개념을 들고 있는지를 확인하실 수 있습니다.

그러나 이것들을 왜 지켜나아가야 할지, 지키지 않으면 어떠한 문제가 발생할지에 대해서는 의외로 많은 분들이 생각하지 못하셨을 것 같아요. 저만 해도 면접준비할 때 각각의 개념에 대해서만 암기하는 식으로 준비했었는데, 이는 옳지 않은 공부법이라 생각합니다.

이 책을 통해 각각의 규칙들이 왜 생성되었을지 고민할 수 있는 시간을 가져보면 좋을 것 같아요!

DI와 서비스 로케이터

의존 주입 방법과 서비스 로케이터 방법에 대해 비교하며, 어떤 장단점들이 있는지 확인하실 수 있습니다!

저는 개인적으로 의존 주입을 상당히 좋아하는데, 종종 그럴 수 없는 구조를 맞닥뜨리곤 했습니다. 해당 상황에서는 서비스 로케이터를 쓰는것도 하나의 방법이겠구나 싶더라구요. 하지만 주입이 가능하다면 되도록 주입을 쓰는걸로!

주요 디자인 패턴

초심자가 알고 있으면 좋을 전략패턴, 템플릿 메서드 패턴, 상태 패턴 등을 배우며, 해당 패턴들을 지킨다면 얻을 수 있는 장점들에 대해 배울 수 있습니다!

개인적으로는 옵저버 패턴부터 살짝 어려움을 느꼈는데, 우선 쭉 읽은 후 전체적인 상황을 머리에 그려가며 다시 읽다보면 괜찮은 것 같더라구요. 물론 저도 완벽히 숙지하기까지는 조금 걸릴 것 같습니다만, 적어도 어떤 상황에 쓰이면 좋은지를 알게 된다면 추후 필요한 순간에 찾아서 적용하게 될 수 있을 것 같아요!

무엇을 느꼈나요?

객체지향에 대해 조금 더 확고한 개념을 확립하게 되었으며, 어떠한 방향성을 지닌 채 코드를 작성해야 할 지 알게 되었습니다.
또한 여러 패턴을 가볍게나마 훑게 된 것도 나름 만족스럽네요.

프로젝트를 진행하며 여러 고민에 대해 정리해보고, 그 후 오브젝트를 읽으며 해당 고민들에 대한 답을 찾아나가 보려고 합니다.

profile
나누며 타오르는 프로그래머, 타프입니다.

1개의 댓글

comment-user-thumbnail
2023년 5월 20일

좋은 책 추천 감사드립니다 ㅎㅎ 고민하고 있었는데, 당장 읽으러 가야겠어요!

답글 달기