들어가는 글: 객체지향이 어려운 이유
'객체지향'
어딘가의 면접장에서 주니어들을 고통스럽게 만들고 있을 개념 중 하나다
요즘이야 '기술면접 질문리스트' 같이 잘 정리된 곳도 많다 보니
외워서 답변할 수는 있지만, 개인적으로는 뭔가 찝찝했다
이걸 내가 진짜 잘 이해하고 있는건지, 아님 그냥 앵무새마냥 녹음해서 답변하는건지 확신이 없었기 때문이다
회사를 다니면서 몇번이나 다시 찾아보고 개발하며 느낀 점이 있는데
객체지향이 어려웠던 이유는 내가 너무 어렵게 공부했기 때문이다
객체지향이 맵긴 맵지만 사실은 까르보불닭정도인데
내가 공부를 잘못해서 틈새라면마냥 매워진 것이다
내가 공부하면서 잘못한 첫번째는
객체지향의 정의, 속성, 원칙을 정처기 외우듯이 달달달 외운 것이었다
CS 지식들이 그렇듯이 객체지향이라는 놈도 굉장히 추상적이고 철학적인 내용이라
실제 구현체 없이 말로만 들어서는 이해하기 어려운 것이 당연했다
내가 머리라도 좋으면 모르지만
머리도 좋은 편도 아닌데 이런 식으로 추상적인 개념 설명만 들으면
'그래서 이걸 어떻게 써먹으라는 건데?' 라는 생각이 들 수 밖에 없었다
그리고 또 한가지 잘못은
객체지향이 지켜지지 않은 코드를 고쳐보지 않은 것이다
원래 사람이 맞춘 문제보다 틀린 문제가 더 기억에 남고
학창시절에 오답노트 쓰라고 그렇게 닥달하는 이유가
틀린문제 고치면서 배우는게 더 많기 때문이다
처음부터 '여러분~ 이 코드는 객체지향이 잘 적용된 코드에요~'하고
정답만 가져다 놓고 보면
당연히 내가 짠 코드도 아닌데 한귀로 듣고 한귀로 흘리게 되는 것이다
그래서, 오늘도 객체지향으로 고통받을 수많은 나와 같은 주니어들을 위해
코드를 설계하는 과정에서 어떻게 객체지향이 녹아드는지를 하나하나 짚어보고자 한다
이해를 돕기 위해 최대한 어렵지 않은 말로, 편안하게 적어볼 텐데
사실 글쓴이도 2년 채 안된 주니어라서
진짜 객체지향 고수분들이 보시기에는 틀렸다고 생각되는 부분이 있을 수 있다
부디 너그럽게 양해를 부탁드리고 잘못된 것은 지적해 주시면 빠르게 고치겠다😅😅
객체지향을 지키는 설계
객체지향을 지키는 설계를 하는 것은 어떤 것일까?
아마 객체지향의 4가지 속성, 객체지향 SOLID 원칙 등이 떠오를 것이다.
물론 원칙들이 다 맞는 말이긴 하다
근데 공부를 해보면 알겠지만 단순히 원칙들을 줄줄히 나열하면서 암기하는 것으로는
실제 설계에 써먹기 너무나도 어렵다
언제 어떻게 위 원칙을 적용해야 할 지 모르기 때문이다.
실제 설계에서 객체지향을 써먹기 위해서는 아래의 세 가지를 명심하면 된다
1. 객체지향 프로그래밍은, 객체를 통해 모든 동작을 수행한다
2. 객체지향을 위해 지켜야 할 속성(추상화,캡슐화,다형성,상속성, 직렬화)과 5가지 원칙(SOLID)이 있다.
3. 2번의 속성과 원칙들 중에서는
(1). 언어 문법에 의해 강제로 지켜지는 부분이 있고
(2). 내가 신경쓰면서 설계해 줘야 하는 부분이 있다
언어에 의해 강제로 지켜지는 부분은, 내가 고민할 필요가 없다.
지키지 않으면 컴파일 에러가 나를 괴롭혀 줄 것이기 때문이다.
대체 이 에러가 왜 뜨는지 이유만 이해하면 된다
내가 신경쓰면서 설계해야하는 부분은, 고민이 필요하다.
컴파일도 되고 실행도 잘 되지만 구조적으로는 엉망이고
나중에 다른 사람이 와서 보고 시원하게 욕먹는 코드가 될수 있기 때문이다
다음 장에서, 국민 객체지향 언어 ⭐Java☕를 이용해 객체지향을 지키는 설계가 어떤 것인지
위의 세가지 부분들을 차근차근 알아보도록 하자
-