본문 바로가기
TIL

추상적인 개념에 한 걸음 다가가기 (22.08.30 TIL)

by winteringg 2022. 8. 30.

 요즘 '객체지향의 사실과 오해' 라는 책을 읽고 있다. 아직 초반을 읽고 있지만 막연하고 추상적으로만 생각했던 객체지향을 새로운 시선으로 바라볼 수 있게 되어서 정리하고자 글을 쓴다!

 객체의 의인화 라는 챕터였다. 적어도 내가 그동안 읽었던 개념서에서는 객체는 현실세계를 그대로 소프트웨어 세계로 모방해오는 다소 추상적인 개념이였다. 현실세계를 어떻게 소프트웨어 세계로 가져온다는거지? 둘은 너무나도 다른데 이름만 같다고 이걸 비슷하다고 억지로 생각해야 하는건가? 라는 생각. 그런데 오늘 읽은 책에서는 그동안 내가 알던 사실과는 다른 개념으로 객체를 설명한 부분이 있었다. 현실 속의 객체와 소프트웨어 객체 사이의 가장 큰 차이점은, 현실 속에서는 수동적인 존재가 소프트웨어 객체로 구현될 때는 능동적으로 변한다는 것이다.

 소프트웨어 세계에서 계좌는 스스로 금액을 계산해서 이체 내역을 기록한다. 현실에서는 전혀 있을 수 없는 일이다. 심지어 현실 속에서는 눈에 보이지도 않는 공기나 바람도 소프트웨어 세계에서는 시각적 형태를 가지도록 만들 수 있다. 이러한 차이점이 명확한데도 나는 그동안 현실세계를 그대로 모방한 것이 객체다! 라고 오해하고 있었고, 그래서 더 뭐가 뭔지 모르겠는 추상적인 개념으로 다가왔다. 그냥 억지로, 객체는 현실세계를 그대로 옮겨온 것이다, 라고 머릿속에 박아넣었다. 그런데 오늘 책을 읽고 나서 객체를 '현실 세계의 은유를 통한 새로운 소프트웨어 세계의 창조' 라는 새로운 개념으로 받아들이게 되었다. 현실세계의 은유이기 때문에 현실 세계인 도메인에서 사용되는 이름을 (예를 들어 Account) 객체에 부여하는 사실을 다시금 떠올리니까 도메인 객체를 사용하는 이유도 훨씬 받아들이는 느낌이 편했다. 아직 많은 페이지수가 남아있지만 또 새롭게 다가오는 사실이 있으면 이렇게 정리해야겠다.

아직도 객체 지향 프로그래밍은 너무 어렵고 뭐든게 다 뒤죽박죽인 느낌이지만 이렇게 개념 바로잡기부터 천천히 시작하기로!

댓글