한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기
책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다.
보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+
1.1 정의와 목표의 전환
5) 객체지향의 정의와 목표
.. 생략 ..
1.2 고정관념의 전환
.. 생략 ..
2. 객체지향을 돕는 도구
이 장은 기술적인 내용보다는 인간 사고의 종류인 관찰, 추상화, 패턴 인식 등을 다룬다. 이 사고들은 객체지향 등의 개발 방법론에서 쓰인다. 개발 방법론은 자신의 장점을 극대화하기 위해 지향하는 고유 특징(=사상)이 있다. 이런 사상에는 관찰, 추상화, 패턴 인식 같은 사고력이 쓰인다. 2장에서는 이 사고력들이 객체지향 설계, 개발에서 어떻게 쓰이는지 이야기한다.
기계어, 어셈블리어, 절차지향 언어인 C언어는 문제를 주로 수학적으로, 논리적으로 분석한다. 객체지향은 여기에 더해서, 우리가 사는 세상의 사물을 관찰하고, 추상화하고, 패턴인식 하는 사고력을 바탕으로, 소프트웨어 세계로 구현한다. 그래서 인간이 사물을 바라보고 해석하는 데 쓰였던 관찰, 추상화, 패턴인식 등 ‘생각의 도구’를 객체지향에 도입할 필요가 있다. 여기 등장하는 생각의 도구는, 우리가 나중에 아키텍트/설계자가 되고 싶을 때도 도움을 준다. 예를 들어, 여기 나오는 사고의 종류 중 추상화는 나중에 DB 모델링 할 때도 도움이 된다. 마지막으로, 객체지향 표현의 도구 UML에서 객체지향 개발에서 UML을 통한 의사소통 방법을 이야기한다.
1. 객체지향 생각의 도구(관찰, 추상화, 패턴인식)
우리가 프로그래밍 언어를 배울 때 배워야 할 것은 분류하기 나름인데, 아래처럼 크게 2가지로 나눌 수 있다.
개발 언어의 문법을 배우고 따른다.
개발 언어의 사상을 배우고 따른다.
만약 JAVA언어를 쓴다면, 먼저 처리-판단-반복(변수선언, if, for문)의 기초 문법을 배우고, 프로그램을 컴파일하고 실행하는 사용법을 알아야 한다. 더 나아가 실무에 쓰일 소프트웨어를 개발하기 위해 JAVA 언어가 지향하는 사상을 이해하면서 작성(개발)할 줄 알아야 한다.
여기서 ‘문법’은 직관적으로 이해가 될 것인데 ‘사상’이란 단어의 뜻은 이해하기 어렵다. ‘사상’의 사전적인 뜻은 어떠한 사물에 대하여 가지고 있는 구체적인 사고나 생각이다. 이 정의를 프로그래밍 언어에 대입해 본다.
프로그래밍 언어가 새롭게 탄생되었으면, 기존 다른 언어의 단점을 개선하여 더 나은 장점을 보여주려 할 것이다. 더 나은 장점을 보여주기 위해 언어가 치열하게 고민한 구체적인 사고나 생각이 언어 속에 담겨 있다. 그래서 우리가 언어의 사상을 배우고 따른다면, 언어의 장점을 거의 100% 활용할 수 있다. 여기서 한 가지 정리할 수 있다. 위의 마지막 문장을 통해, 언어의 사상을 배우고 따른다는 것은 언어의 장점을 배우고 따른다는 것과 거의 같다고 이해해도 좋다. 그래서 나는 그 언어의 ‘사상’과 ‘장점’을 동일한 표현으로 설명 한다. 예를 들어 영어를 배울 때, 기본 문법을 아는 것으로 영어를 잘한다고 할 수 없다. 영어의 역사적, 문화적 배경을 알아야 원어민을 더 이해하고 의사소통을 잘 할 수 있다. 예를 들어 영어는 영시(poem)에서 영향을 많이 받았다고 한다. 영시의 운율성 때문에 영어에서는 유독 강세가 발달했다고 한다. 만약 우리가 이런 문화적 사실을 몰랐다면, 영어는 왜 유독 강세가 발달했는지 모를 것이다. 그러나 영어의 이런 역사적, 문화적 기원을 알 수 있다면, 우리는 영어의 강세를 더 익히려고 노력 할 것이다. 그래서 영어의 강세를 통해 내 뜻을 명확하게 전달하는 영어의 장점을 더 살릴 수 있다. 마찬가지로 프로그래밍 언어 또한 언어 밑바탕에 깔린 사상을 알아야, 언어를 통해 내가 하고 싶은 것을 더 수월하게 진행할 수 있다.
'길게 쓰기 > 객체지향의 탄생 (공식)' 카테고리의 다른 글
객체지향 생각의 도구2-한두깨 객체지향 프로그래밍 미리보기 (0) | 2019.01.24 |
---|---|
객체지향 생각의 도구1-한두깨 객체지향 프로그래밍 미리보기 (0) | 2019.01.22 |
정의와 목표의 전환3-한두깨 객체지향 프로그래밍 미리보기 (0) | 2019.01.15 |
정의와 목표의 전환2-한두깨 객체지향 프로그래밍 미리보기 (0) | 2019.01.10 |
정의와 목표의 전환-한두깨 객체지향 프로그래밍 미리보기 (4) | 2019.01.07 |