-
[객체지향의 사실과 오해] 2주차 정리 (3~4장)기타/북스터디 2022. 4. 1. 01:18
오늘은 북스터디로 진행 중인 객체지향의 사실과 오해 3장, 4장을 읽어보고 정리를 해보려고 한다.
원래 1주차인 1~2장도 정리해야했지만 개인적인 사정을 핑계로 책을 읽는 시간을 미루다가 정리할 타이밍을 놓쳤다,,,
계획적으로 행동하며 앞으로는 계속 정리를 이어나가려고 한다.
책에 쓰여진 글들을 여기에 쓰기보다는 뭔가 와닿고 읽으면서 든 나의 생각을 정리하는 느낌으로
3장. 타입과 추상화
모든 장의 시작말은 누군가가 얘기한 말의 인용으로 시작한다.
3장의 시작글은 키스 데블린의 말로 추상화에 관한 이야기이다.
이 글귀를 보고는 처음에 딱 든 생각은 정글에서 활동하면서 짧게 세미나형식으로 운영체제 수업을 카이스트의 교수님께 들은 적이 있는데 그 때가 떠올랐다.
아직도 추상화라는 개념이 어렵게 느껴지지만 추상화라는 개념이 중요하다는 것은 여실히 깨닫고 있다.
이번 장은 영국의 지하철 역사에 대한 이야기로 시작한다.
1, 2장은 카페와 이상한 나라의 앨리스 이야기를 하며 객체지향의 개념을 이해하기 쉽도록 실생활에서 보여지는 것들을 먼저 말해준다.
지하철, 정확히 지하철 노선도에 대한 이야기를 보면서 기존의 노선도에 큰 변화를 주며 '정확성'보다는 '목적'에 포커스를 맞췄다는 얘기를 보며 이번 장에서 무엇을 이야기 하고 싶은지 감이 어느정도 왔다.
결국 지하철 노선도를 보는 이들이 원하는 것은 지하철이 어떻게, 얼마의 길이로 지형이 어떤 곳에 설치되어있는 것이 아닌 지금 있는 역에서 다음 역으로 가기 위한 방법이다. 즉, 추상화라는 개념을 지하철 노선도에서도 볼 수 있다는 것이다.
추상화란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정이다.
- Root-Bernetein 2001 -
추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 것이다.
- 객체지향의 사실과 오해, p.76, 조영호 저 -여기서 새로 본 개념은 개념(concept)이다..
본 개념이 개념???
간단히 말해서 공통점을 기반으로 객체들을 묶기 위한 그릇으로 개념을 통해 객체를 여러 그룹으로 분류(classification)할 수 있다.
예를 들면, 자전거, 오토바이, 자동차, 기차는 탈 것이고 나이x, 아x디다스, 아x스는 스포츠의류 브랜드라는 개념으로 묶을 수 있다는 것이다.
개념을 객체의 분류장치로서 이야기할 때에 심볼(symbol), 내연(intenstion), 외연(extension) 세 가지 관점이 따른다.
세 가지 관점이 무엇을 의미하는지 아는 것이 중요할 수도 있지만 저자는 개념을 이용해 객체를 분류할 수 있다는 사실이 더 중요하다고 말한다.
개념을 마주했을 때, 이 개념은 이러한 심볼이고 이러한 내연을 의미하고 이러한 외연을 가지고 있어!라는 분석보다는 개념으로 이러한 객체를 분류할 수 있구나!라는 인식이 더 중요하다는 의미라고 해석이 된다.
하지만, 여기까지 읽었을 때에 개념이라는 단어는 뭔가 기존에 알고 있고 사용하는 개념과 헷갈리는 것은 사라지지 않았다.
그리고 그 다음에 이야기 나온 것이 타입(Type)이다.
이 책에서 나오는 얘기로는 타입(type)은 공학자들(더 특정지으면 컴퓨터 공학자들)이 개념을 대체할 수 있는 더 세련돼 보이는 용어를 수학으로부터 차용해왔다고 한다.
그러면 객체들을 타입들로 분류를 할 수 있고 여기서 알아야할 포인트는 2가지이다.
1. 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다.
2. 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
첫 번째 포인트에서 알아야 할 것은 객체의 타입을 결정하는 것은 객체의 행동뿐이고 객체가 어떠한 데이터를 보유하고 있는지는 타입을 결정하는 데 아무러 영향도 미치지 않는다라는 것이다.
다음으로 타입의 계층에 대해 알아볼 수 있었고 일반화/특수화 관계라는 말을 마주했다.
여기서도 중요한 점은 일반화/특수화 관계를 결정하는 것은 객체의 상태를 표현하는 데이터가 아니라 행동이라는 것이다.
저자는 객체를 설계 할때에 객체가 가져야할 데이터를 먼저 생각하고 행동을 정의하는 방식보다는 객체가 해야할 행동을 결정하고 그 행동을 하기 위해 필요한 데이터를 생각하여 설계하는 방향을 선호하는 것같다.
아직은 개발을 시작한지 얼마 안되어 어느 방향성이 어떠한 장점을 가지고 있고 어떠한 단점을 가지고 있는지에 대한 지식과 개인적인 의견은 없지만 이 책을 읽으며 조금씩 코드를 설계하는 방향성을 알아가며 내가 생각하는 좋은 방향성이 무엇인지 정의내릴 날이 오길 기대하고 있다.
3장의 마지막 부분을 읽으며 기억에 남는 말은 "여러분이 훌륭한 객체지향 프로그래머라면 애플리케이션의 동적인 관점과 정적인 관점을 모두 다뤄야 한다는 사실을 쉽게 이해할 수 있을 것이다"라는 말이다.
이 저자가 하는 말이 모두 맞다는 생각으로 이 책을 보는 것은 아니지만 개발자로서의 성장하면서 중간체크로 내가 훌륭한 프로그래머인가?라는 질문에 부분체크를 할 수 있다고 생각한다.
4장. 역할, 책임, 협력
<참고자료>
객체지향의 사실과 오해, 조영호 저
'기타 > 북스터디' 카테고리의 다른 글
[디자인패턴] 커맨드패턴 (0) 2022.12.25 [이펙티브 자바] 아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) 2022.12.12 [디자인패턴] 데코레이터 패턴 (0) 2022.12.11 [디자인패턴] 전략 패턴 (0) 2022.07.10 Test Driven Development By Example 2부 정리 (1) 2022.06.04