본문 바로가기

카테고리 없음

추상화의 고수가 되자. (생각의 탄생)


서점의 수많은 책 중에서 저절로 끌리는 책이 있습니다. 생각의 탄생이란 책이 그랬습니다. 비싼 책 이었는데 고민 없이 바로 구입하여 읽었습니다.

생각의 탄생에서 말하는 생각은 쓸데없는 잡념이 아니라, '인간이 원하는 목표를 이루기까지 필요한 생각의 각종 도구'를 얘기하고 있습니다.

생각의 탄생에서 말하는 생각의 도구 약 13가지 분야 중에서도 왠지 끌리는 생각의 도구가 있었습니다.

‘추상화’ 입니다. 추상화의 뜻을 확실히 몰랐지만 무의식적으로 프로그래밍이나 글쓰기에 추상화를 많이 적용하고 있다고 생각했기 때문에 책의 다양한 생각의 도구 중에서도 유독 ‘추상화’ 만이 나에게 다가왔습니다.

추상화를 더욱더 잘 활용하기 위해 모처럼 치열한 글쓰기에 도전합니다.


+ 내가 무의식적으로 생각했던 추상화의 개념

추상화란 용어를 평소에 여러 사람들이 많이 쓰고는 하는데 저는 추상화란 단어만 들으면 거부감이 들고는 했습니다.

추상화란 용어 자체가 뜬구름 잡는 표현처럼 정확히 무슨 뜻인지 이해하기 어렵기 때문입니다.

그래도 억지로 해석하자면 ‘추상화’는 ‘여러 사물의 공통된 특징을 추출하여 특정 언어/그림으로 표현하는 것’으로 이해하고 있었습니다.


+ 생각의 탄생에서 얘기하는 추상화

일단 진짜 추상화가 무엇인지 한 문장으로 ‘추상화’ 하기 위해 몇가지 문장들을 발췌해 보겠습니다.

당신들은 보고 있어도 보고 있지 않다. 그저 보지만 말고 생각하라. 표면적인 것 배후에 숨어 있는 놀라운 속성을 찾으라. -  화가 피카소

추상화는 없어도 되는 관습적 형식과 무의미한 세부를 골라내고 전체를 대표하는 정신만을 보존하는 일이다. -  소설가 윌라 케이터

나는 내가 관찰하고 생각한 것 중에서 가장 중요한 한 가지 요소를 제외하고는 모두 다 버렸다.-  물리학자 찰스 토머슨 R. 윌슨

과학자, 화가, 시인들은 모두 복잡한 체계에서 하나만 제외하고 모든 변수를 제거함으로써 핵심적 의미를 발견하려고 애쓴다. (P111)

진정한 의미에서 추상화란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정이라고 할 수 있다. (P111)

추상의 본질은 다른 속성에 비추어 특히 중요하다고 생각되는 한 가지 특징만 잡아내는데 있다. (P115)

위의 추상화를 얘기하는 문구를 보면 저 문구들 중에서 중요한 본질을 추출할 수 있습니다.

1. 복잡한 현상과 불필요한 변수 뒤에 숨겨진
2. 사물의 본질을 핵심적으로 나타낼 수 있는
3. 하나의 속성을 찾는다.

다시 정리하면,
복잡한 요소 뒤에 숨겨진, 사물의 본질을 핵심적으로 나타낼 수 있는, 하나의 속성을 찾는다.
가 내가 이해한 추상화의 개념입니다.

제가 이해한 저 개념을 바탕으로 제가 좋아하는 분야에 추상화를 어떻게 활용해야 할 것인지 정리해보겠습니다.


+ 객체지향 프로그래밍의 추상화

프로그래밍 분야 중에서 특히 객체 지향은 추상화를 많이 이용하는 분야라고 볼 수 있습니다.

사물의 특징을 ‘속성’과 ‘행동’으로 표시하는 '객체' 자체가 사물을 추상화하는 요소가 있고,

특히 객체간 상속 구조도를 만들어서 각 객체간의 공통요소를 추출하여 인터페이스화 시키는 객체지향 프로그래밍의 요소는 추상화 능력이 특히 필요한 분야라고 할 수 있습니다.

사용자 삽입 이미지
[각 블로그 서비스의 공통 특징을 추출하여 하나의 블로그 인터페이스로 추상화 한다.]


중요한 것은 객체지향 프로그래밍에 제가 배운 추상화 요소를 어떻게 활용하냐는 문제 인데요.

마침 저는 요즘에 회사 업무의 다양한 요소를 수용하기 위한 프레임워크를 개발하고 있습니다.

* 내가 생각하는 프레임워크란 디자인 패턴등의 효과적인 객체 관계를 이용하여, 업무 개발시 일정 개발 규칙만 지키면 편리한 개발을 저절로 유도하게 만드는 솔루션 입니다. (틀리면 지적해 주세요~ ^ ^)

프레임워크의 쓸모는 회사 업무의 다양한 요소를 변화 없이 모두 수용하여 편리한 개발 과 유지보수를 추구하는데 있을 것 인데요.

만약 회사 업무중에 프레임워크가 수용하지 못한 업무가 튀어나온다면 프레임워크는 ‘복잡한 요소 뒤에 숨겨진, 사물의 본질을 핵심적으로 나타낼 수 있는, 하나의 속성을 찾는다.’ 라는 추상화 작업에 실패했다고 볼 수 있습니다.

제가 프레임워크를 개발하면서 제일 많이 고민하는 부분이 여기에 있습니다. 인터페이스를 설계할 때 어디까지 추상화 할 것이고 어디까지 객체 특성 그대로 가지고 갈 것인가~ 라는 고민은 뚜렷한 답이 나오는 것이 아니고 개발자의 주관에 따르기 때문에 더욱 더 어려운 부분입니다.

저는 책을 읽기전에는 무작정 각 객체간의 공통 요소를 추출하여 인터페이스로 만들자~ 인터페이스로 만들면서
메소드를 상세하게 쪼개서 명시하는 규칙화를 시도하자 ~ 는 생각으로 설계 및 개발을 했는데요.

(메소드를 상세하게 쪼개서 명시하는 이유는 이 규칙만 따르면 일관된 목적을 준수하는 개발을 할 수 있기 때문입니다.)

지금은 만약 사물의 본질을 나타낼 수 있는 하나의 속성을 만들지 못하는 다른 특이한 업무 조건이 존재할 경우, 그 특이한 업무까지 인터페이스로 포함할 때 상세한 명시(메소드를 기능별로 잘게 쪼개기)가 어렵다면, 무작정 ‘상세하게 인터페이스화’ 하는 것도 문제가 있다는 생각 입니다.

제가 이해한 ‘복잡한 요소 뒤에 숨겨진, 사물의 본질을 핵심적으로 나타낼 수 있는, 하나의 속성을 찾는다.’ 라는 추상화의 본질에 충실하려면,

무작정 상세하게 인터페이스화 하여 어쩌면 깨질수도 있는 규칙을 요구하기 보다는, 특별한 요소도 모두 수용할 수 있는 두루뭉실한, 유연한 인터페이스 설계도 필요하다는 생각합니다.

제가 실제로 프레임워크를 개발하니 기술적인 요소도 어렵지만, 추상화 작업도 아슬아슬한 줄타기 작업처럼 어려움을 느낍니다.

두루뭉실할 수도 있지만, 핵심 속성은 확실하게 표현할 수 있는 완벽한 인터페이스 설계에 노력하여, 좋은 프레임워크를 만들어야 겠습니다.

(저도 이제 막 프레임워크 만들기 시작해서 부족한데 제가 인터페이스와 추상화에 대하여 잘 못 이해했으면 지적해 주시길 바랍니다. ^ ^)


+ 글쓰기의 추상화


글쓰기도 역시 ‘복잡한 요소 뒤에 숨겨진, 사물의 본질을 핵심적으로 나타낼 수 있는, 하나의 속성을 찾는다.’ 라는 추상화 작업이 많이 요구되는 영역입니다.

글쓰기의 본질은 종이 위에 단어를 늘어놓는 것이 아니라 불필요한 것들을 골라내고 버리는 데 있다. (P121)

이 한 문장이 모든 것을 말해주는 것 같습니다. 글쓰기에 불필요한 단어, 수식어, 문장, 단락은 모두 제거하고 핵심적인 글쓰기 요소만 추출하고 잘 조합하는 것이 추상화가 잘된 글의 핵심이라고 생각합니다.

그래서 글쓰기의 추상화는 고쳐 쓰기를 요구합니다. 많이 고쳐 쓰면서 불필요한 요소는 모두 제거합니다. 그러다 보면 글에 진국만이 우러나올 것입니다.

글쓰기의 추상화를 통해 깔끔하고 진국이 우러나는 글을 완성 해야 겠습니다.
 
그리고 추상화 연습을 하기에 가장 좋은 글쓰기가 저는 ‘서평 쓰기’ 라고 생각합니다.

두꺼운 분량의 책의 내용을 몇장의 서평으로 재 탄생 시켜야 하는 ‘서평 쓰기’ 야 말로 치열한 추상화 작업이 필요한 글쓰기 영역입니다.

이 참에 최근 뜸한 북 리뷰를 다시 많이 써야겠다고 다짐 했습니다.


+ 마치며

두세권의 비슷한 책 중에 하나의 책만이 괜찮고, 하나의 책 중에 나에게 도움되는 내용이 하나라도 있으면 책의 본전은 뽑고도 남는다고 생각하고 있습니다.

생각의 탄생에서 얘기하는 많은 생각의 도구 중에 특히 ‘추상화’ 에 대한 내용은 마침 추상화 관련 분야에 열중하는 저에게 크나큰 도움을 주었습니다.

앞으로도 계속 ‘복잡한 요소 뒤에 숨겨진, 사물의 본질을 핵심적으로 나타낼 수 있는, 하나의 속성을 찾는다.’ 라는 추상화 연습을 많이 하여 내가 좋아하는 분야에 고수가 되야 겠습니다.

추상화의 고수가 되서 세상을 꿰뚫어 봐야 겠습니다.


생각의 탄생 - 10점
로버트 루트번스타인 외 지음, 박종성 옮김/에코의서재

Daum 블로거뉴스
블로거뉴스에서 이 포스트를 추천해주세요.

올블로그 추천은 http://link.allblog.net/8507508/http://mckdh.net/213 입니다.