개발자로 취직까지 해놓고 아직도 객체지향이 뭔지 모른다고?

이로빈·2024년 5월 16일
108

talky-talky

목록 보기
1/1
post-thumbnail

서론

는 사실 내 얘기다. 어그로를 위한 제목은 아니었고, 저 공격적이고 사람을 괄시하는 생각이 스스로를 향한다면 어떨지 상상해보라. 어떤 면에선 남에게 들었을 때보다 더 날카롭게 나를 도려낸다.

당연히 소프트웨어를 객체 단위로 나뉘어서 어쩌구, 독립적인 단위 저쩌구, 캡슐화 블라블라 이런 건 취준 할 때 달달 외워서 툭 치면 나올 정도로 '외워놨다'. (지금은 툭 쳐도 안 나온다. 툭 치면 넘어진다.) 어렴풋이는 '알고'도 있었던 것 같다. 하지만 고민하지 못했고, 설명할 수 없었으며, 체감할 수 없었다.

근데 어느 날 갑자기 문득, 으레 그러하듯 깨달음은 갑자기 오더라. 누가 말 많은 애 아니랄까 봐 어쩌다 깨닫게 됐는지 주구장창 쓴 글이 1,000자가 넘어갔었는데 노잼이라 다 지웠다.

본론: 내가 깨달은 객체지향의 정의

(스포) 1. 프로그래밍은 절대 완벽할 수 없다. 하지만 내가 짠 프로그램은 완벽해야 한다.
(스포) 2. 이름이 '객체' 지향인데 난 왜 클래스에 집착했을까? 어쩌면 클래스가 잘 짜여야 하는 이유도 결국 클래스의 인스턴스를 잘 만들기 위함일지도 모른다.
(스포) 3. 플라톤 몰라도 됨. 프로그래밍 전문 용어도 거의 안 나옴.

미리 말하자면, 교과서적인 정의나 당장 도움이 될 수 있는 실용적인 지식이 될만한 이야기는 나오지 않을 예정이다. 난 그냥 내가 객체지향을 인식하게 된 이야기를 하고싶을 뿐이다. 같이 개발자로 일하고 있는 짝꿍 말에 따르면 '다들 말솜씨가 없어서 설명을 못할 뿐이지, 아는 개발자들은 다 그런 생각 하면서 개발 중일 것이다'. 그래서 어쩌면 시시하고 당연한 이야기가 될 수도 있겠다 싶다.

플라톤의 이데아론

계기는 플라톤이었다. 플라톤의 이데아론을 설명할 때도 맨날 쿠키틀 쿠키틀 하는 그 '틀' 비유를 많이 드는데, 아무리 요새 뒷방 늙은이 신세인 철학이라지만 그래도 역사로 따지자면 학문의 시초인데 틀 비유도 먼저 쓰지 않았을까. 아니 근데 웬 뜬금없이 플라톤 철학? 나도 그 생각 했다. 플라톤에 대해 생각해 내는 순간에 동시에 이게 웬 뜬금없는 소리야? 라는 의문도 같이 들었다.

나는 그 이유가 객체지향이든 플라톤의 이데아론이든 결국 현실 세계를 설명해내려 한 여러 시도 중 하나였기 때문이라고 생각한다. 나도 플라톤 잘 모른다. 내가 아는 선에서 최대한 간단하게 플라톤의 이데아론을 한 줄로 요약하면 이러하다(틀릴 수 있음 나 철학과 아님).

현실 세계는 존재하는 것의 원형이자 이상적인 형태인 이데아의 불완전한 모방이다.

즉슨 똑같은 쿠키틀에서 찍어내도 조금씩 모양이 다 다른 쿠키들을 다 같은 쿠키라고 인지할 수 있는 이유는 쿠키틀이라는 이데아가 존재하기 때문인 것이다. ArrayList든 List든 결국 Collection으로 찍어냈으니까 다 Collection인 거다. 아니 진짜 어디서 많이 들어본 이야기지 않아요 개발자 님들?? 플라톤 지금 태어났으면 제임스 고슬링 됐을 거다.

이쯤 되니까 그런 생각이 들었다. 아니 이거 아무리 봐도 이데아가 우리가 살고 있는 세상이고, 프로그램이 그 '이데아(=세상)의 불완전한 모방'이라고 하면 딱 맞아 떨어지는 걸?

완벽한 프로그래밍

그 완벽한 이데아를 베낀 현실 세계도 불완전한데, 그 불완전한 현실 세계를 모방해야 하는 프로그램은 태생적 한계로 인해 불완전할 수밖에 없다.

하지만 어차피 날 에러, 어차피 불완전할 코딩, 그렇다고 낙담한 채 프로그래밍을 대충 해야 할까? 아니다. 현실 세계에서도 존재하는 것 모든 게 하자가 있고 그러다가 아예 없어져 버리기도 하지만, 그 모든 것들이 구성하는 세계는 잘 유지되고 있다. 인간 중심적 사고에서 많이 벗어나 보면, 인류도 멸망한 지 오래인 아아아아아주 나중에, 지구도 폭발해서 사라진 뒤에도 그 자리에 또 다른 현실 세계가 있을 것이다. 구성물만 테세우스의 배 마냥 조금씩 바뀌다가 아예 갈아엎어졌을 뿐이지, 현실은 그때에 맞춘 새로운 진리로 잘 돌아갈 것이다.

자식 클래스가 부모 클래스의 성질을 그대로 물려받듯, 프로그램은 태생적 한계로 불완전하지만, 동시에 태생적으로 '잘 돌아가야 정상'이다. 가끔 하자도 있고 에러도 나서 코드도 수정하고, 때론 아예 다른 코드가 되기도 하지만, 결국 그 결과물인 프로그램은 그 새로운 로직 안에서 '잘 돌아가야 정상'이다. 불완전하지만 완벽해야 한다는 이야기이다.

개인적으로 나 뿐만 아니라 대부분의 사람이 그렇다고 생각하지만, 다들 '완벽'을 목표로 한 적이 있는가? 흔히 완벽주의자라는 단어 맥락에서 많이 쓰이는 미비한 '완벽' 말고, 정말 삶 전체에서, 나라는 인간 자체가 모든 곳에서 완전무결하길 추구한 적이 있는가? 난 단연코 없다. 그리고 앞으로도 그럴 생각이 없다. 다만 모든 곳에서 완벽할 수 없으니 내가 원하는 곳 한 두군데에서만큼은 완벽하고자 노력할 뿐이다.

사실 프로그램도 그렇지 않나. 모든 모든 맥락에서 사용하기에 완벽한 프로그램은 '당연히' 존재할 수 없다. 애초에 그런 걸 추구하는 멋진 개발자 분은 만난 적도 없다. 비꼬는 게 아니라, 결국 추락하는 이카로스가 예술의 뮤즈가 되고 아직까지도 구전되어 활자로까지 남은 걸 보면, 이상을 쫓는 건 결과야 어떻든 언제나 아름답기 마련이다.

하지만 그것과 별개로 이상은 이루어질 수 없다. 적어도 나 같은 평범한 인간은 모든 사용자가 모든 목적으로 사용할 수 있는 프로그램같은 거 못 만든다. 너무 아득한 목표라 말하는데 자존심도 안 상한다. 난 영어 학습 앱을 만들면 세상에 인간이라곤 영어 사용자밖에 없는 세상이라도 최대한 완벽하게 구현해 내려고 노력할 거고, 애견 커뮤니티 사이트를 만들면 온 세상에 애견인밖에 없는 세상이라도 완벽하게 구현하려고 노력할 거다.

'클래스' 지향이 아니라 '객체' 지향

프로그램은 사용자가 없으면 무의미하다. 결국 프로그램은 사람을 위한 것이다. 그러니 여기부터는 원활한 논의를 위해 현실 세계의 범위를 인간으로 좁혀보겠다.

프로그램 안에서도 작은 이데아와 작은 현실 세계를 구분하자면, 클래스가 이데아가 될 거고 객체가 현실 세계가 될 것이다. 더 익숙하게 표현하자면, 익숙한 쿠키틀과 그 틀에서 나온 쿠키. 그렇다면, 우리가 프로그래밍을 할 때도 한 사회를 구성하듯 해야하는 건 아닐까? 그렇게나 다양하고 개성이 가득하면서도 결국 '인간'이라는 틀 하나에 속하는 그들 모두를 포용하기 위한 사회 말이다. 그러니까, 각 객체를 존중하면서도 그걸 한데 묶으려 시도해야 하는 건 아닐까?

같은 인간이더라도 결국 다 다르니 따라서 객체지향 프로그램도 '다형성'이라는 성질을 갖게 되는 거고, 이 다 다른 인간들을 한데 묶자니 '추상화'를 해야겠고, 인간들끼리 서로 닮아 같아지기도 하니 '상속'도 해야겠고, 세상 모든 것이 내밀한 것은 감추기 마련이니까 '캡슐화'란 것도 해야 되지 않겠느냐 하는 것이다.

결국 조직이란 것도, 집단이란 것도, 사회란 것도 인간의 더 나은 삶을 위해 태동한 것처럼 클래스를 잘 만들어야 하는 이유는 결국 객체를 더 잘 만들기 위함은 아닐까?

아니 이름부터가 '객체' 지향인데, 이걸 만든 사람이 애초에 클래스가 아닌 객체를 중요하게 여겼던 건 아닐까? 파이썬으로 개발을 처음 공부하면서 '파이썬의 처음과 끝은 클래스다'라는 말을 들었는데 그 말에 너무 꽂혀있었던 게 아닌가 하는 생각이 이제와 든다.

결론은 아니고 여담

  1. 나름 꽤 신박한 깨달음이었다고 생각했는데 역시 세상은 요지경
    내가 첫 시작이겠지 하고 생각해 낸 사업 아이템이 이미 누가 먼저 시도한 것처럼, 플라톤의 이데아론과 객체지향을 비유한 글이 생각보다 몇 있더라. 논문도 있고.
    그래서 초고를 수정하지 않고 그대로 올리는 것도 없잖아 있다.
    약간 힘이 빠지긴 함.

  2. 그래도 아직 그래서 객체지향을 어떻게 하면 잘 구현할 수 있는가, 하는 문제에 대해서는 답을 내리기 힘들다.
    객체지향이 뭔지에 대해서 이제 겨우 한 걸음 다가갔는 걸.
    그래도 시작이 반이라고, 반은 왔다고 긍정적으로 생각하려 한다. 완전 럭키로빈이잖아

profile
In case I don't see ya, good afternoon, good evening, and good night.

30개의 댓글

comment-user-thumbnail
2024년 5월 17일

재미있게 잘 보고 갑니다. 말씀하신 인식하게 된 계기가 바로 좋음의 이데아 로 보이네요.

이데아라는 개념은 플라톤의 국가 에서 나오는데 어려운 책이 아니니 한번 읽어 보셔도 좋을 것 같습니다. 좋음의 이데아, 동굴의 비유, 선분의 비유, 태양의 비유 등등 교양으로 봐도 참 좋은 책입니다.

1개의 답글
comment-user-thumbnail
2024년 5월 17일

글을 정말 잘 쓰시네요!! 저도 객체지향을 어렴풋하게만 이해하고 코드를 짜내려가는 것 같아서 반성하며 읽게 되는 글이었습니다. 중학생에게 설명할 수 있어야 완벽히 이해한 것이라는 말이 있는데, 저는 한참 먼 것 같습니다 😂

1개의 답글
comment-user-thumbnail
2024년 5월 18일

좋은 글 감사합니다 ^^

1개의 답글
comment-user-thumbnail
2024년 5월 18일

서론이 너무 공감되어서 재밌게 읽었습니다~!
저의 경우에는 '객체지향의 사실과 오해 - 역할, 책임, 협력 관점에서 본 객체지향' 이라는 책을 읽고 객체지향의 본질(이라고 생각되는 것)에 가까워졌어요.
이 책에서는 '객체지향을 실세계의 모방' 으로 보는 관점이 오히려 객체지향을 이해하는데 큰 방해요소라고 이야기합니다. 이데아에 비유하신 것과 상당히 대비되는 주장이죠? ㅎㅎ 상식에 도전하는 것 같은 주장에 큰 자극을 받아 단숨에 읽고 큰 깨달음을 얻은 책이라 추천드립니다

1개의 답글
comment-user-thumbnail
2024년 5월 18일

비전공자인가요 전공자인가요 ??

2개의 답글
comment-user-thumbnail
2024년 5월 19일

객체지향의 창시자 앨런 케이가 생각한 객체 지향도 찾아보면 잼있을것 같아요!

1개의 답글
comment-user-thumbnail
2024년 5월 21일

글 너무 잘 읽고 갑니다. 다른 글들도 있으면 읽고 싶었는데, 하나라서 아쉬웠습니다. 다음 포스팅이 올라오길 기원합니다 :)

1개의 답글
comment-user-thumbnail
2024년 5월 21일

잘 읽었습니다. 새로운 시각에서 바라보는게 흥미롭네요.
저 같은 경우는 객체지향은 세포로부터 출발한다는 것이 와닿았습니다.
애초에 객체지향을 만든 앨런 케이가 세포에서 영감을 받아 만들었다고 하더라구요.
우리가 사용하는 방법론과 컴퓨터들이 생물을 모방해서 만들어졌다는게 흥미로웠습니다.

그리고 문득 깨닫게 되더라구요.
단순한 함수 안에도 마치 세포가 모여 장기나 근육을 이루듯이 변수 등의 세포들이 모여 계산이 되고, 그것이 반환되고(뼈, 근육 등의 장기), 또 그것들이 모여 컴포넌트(인체)를 이룬다는 것이 근본은 마치 생물과 같구나 싶었습니다.

1개의 답글
comment-user-thumbnail
2024년 5월 21일

매번 흔히 알고있는 붕어빵 틀, 자동차 이런 걸로 객체지향을 알고만 있었는데 새로운 시각으로 정의내린 클래스와 객체 관계 정말 재미있고 저도 다시 생각하게 되는 글이네요!

막연하게 여태 객체에 대해 공부해왔던 시간보다 이 글을 읽는 약 5~10분 남짓한 시간이 더 와닿지 않았나 싶네요.

좋은 글 감사합니다:)

1개의 답글
comment-user-thumbnail
2024년 5월 22일

어쩌면 객체주의가 아니라 지향이니 완벽한것은 없다는게 내포된 것은 아닐까요?
좋은 글 잘 읽고 갑니다. 철학에 대한 가르침도 얻어가네요 ㅎㅎ

1개의 답글
comment-user-thumbnail
2024년 5월 22일

잘보고 갑니다 다형성, 추상화, 상속, 캡슐화 를 현실과 인간의 관점에서 표현하신 스토리가 너무 좋네요🐸

1개의 답글
comment-user-thumbnail
2024년 5월 22일

객체지향이라는 개념은 머릿속으로 이해는 되지만 코드로 녹여내는게 어려운거 같아요 ㅜㅜ

1개의 답글
comment-user-thumbnail
2024년 5월 22일

개쩐다. 매우 신선하고 글 읽는 내내 감탄했습니다.
철학과 인문학을 좋아하는 법대생 출신 개발자인데, 이데아론을 이렇게 생각할 수 있다니..!!
왜 나는 이런 생각을 못했었지? 라는 생각도 들면서 감탄 또 감탄했네요.
이런 양질의 글 또 써주세요 고맙습니다. 팔로우합니다.

답글 달기
comment-user-thumbnail
2024년 5월 24일

저는 철학과 출신 비전공자 인데... 객체지향을 처음 배우는 순간부터 이렇게 이해했네요.. 철학에서 사용하는 token과 type이라는 개념과도 유사합니다!
아무튼 좋은 통찰이십니다..!

답글 달기
comment-user-thumbnail
2024년 5월 27일

이데아론이랑 객체지향이랑 연결시키는 거 좋네용..! 객체지향을 어떻게 정리해야할 떄 참고하곘습니다 감사합니다..!

1개의 답글