강좌/Spring 3.0

015. 추상 / 추상화

여름나라겨울이야기 2013. 2. 6. 23:57
728x90

흠 잊고 있었는데 댓글로 추상화 강좌에 대한 이야기가 나와서 이렇게 다시 자판에 앞발을 올려봅니다. 흠흠

 

추상화 관련 부분은 제가 작성한 부분이 지루하거나 난해할 수 있음으로 건너 뛰시고 바로 스프링 관련 서적으로 가시는 것도 나쁘지 않습니다. ^^

 

추상화는 프로그래밍에서 무척 다양한 의미로 사용되는 용어입니다.

일단 객체지향프로그래밍(OOP)에서 말하는 추상화부터해서 스프링의 추상화까지 살펴보면 의미가 달라보이기까지 하는데요.

그러나 결국은 같은 용어를 사용한다면 그 안 깊숙히 숨겨져 있는 공통적인 의미가 있겠죠.

일단 추상화는 영어로 Abstraction 이 되겠습니다.

 

일단 가장 기초가 될 것 같은 OOP 추상화를 설명할 거라 기대하셨다면 그 기대를 제가 살짝 뭉개 드리도록 하겠습니다. ^^

OOP 추상화는 다음 강좌입니다.  그렇다고 이번에 설명하는 추상화가 OOP 추상화와 다른 개념도 아니니 꼭 읽어주세요.

댓글도 달아주시고.. ^^

 

컴퓨터 용어에 나오는 용어는 일상 용어랑 달라야 한다는 강박 관념을 갖고 있는 사람들이 IT 종사자 아닌가 하는 생각을 하고는 합니다.  하지만 용어가 나오면 먼저 가장 일반적인 그 용어의 의미를 찾아보시는게 맞는 경우가 더 많습니다.

물론 우수게 소리로 공대생에게 정의는 Define 이고, 일반인에게는 정의가 Justice 라는 말도 있지만 그건 한국어 정의가 동음이의어이기 때문에 생긴 우수게 소리이구요.

추상/추상화는 일반인의 그 용어와 전산용어가 다른 뜻을 갖고 있지 않습니다.

 

질문을 하나 해보겠습니다.

이 글을 읽으시는 분(IT종사자)은 추상화의 대가가 누구라고 생각하십니까?  C++ 창시자 비야네 스트롭스트룹, 자바 언어의 아버지 제임스 고슬링이나 IT 갱단의 켄트 벡, 에릭 감마 또는 스프링의 창시자 로드 존슨 또는 IT 아이디어 뱅크 마틴 파울러 그도 아니면 사수이신 옆자리 김과장님 생각하셨나요?

(ㅋㅋ 저의 유식함을 자랑해 봤습니다. 위에 분들과 저는 전혀 친분이 없습니다.  친분 있고 싶어도 대화가 불가능.. 잉글리쉬.. 잉글리쉬...)

그럼 이번에는 일반인(비 IT 종사자)에게 추상화의 대가가 누구냐고 물어봐 주십시요. 누구라고 답변할까요?

상식과 교양을 겸비한 분이시라면 피카소 또는 몬드리안을 이야기 하실 겁니다.

 

자 그럼 전산에서의 추상화는 영어로 제가 뭐라고 했죠?  Abstraction

피카소로 대변되는 추상화는 영어로 그럼 뭘까요? Abstract Painting

(네이흠에서 검색해봤습니다. ^^v)

 

오호 같은 Abstract 입니다.  그럼 페인팅 추상화의 특징은 뭘까요?

요즘은 극사실주의 그림이 사람들을 경탄하게 하는데요.  그럼에도 피카소의 그 이상한 그림들이 더 비싼다는 거..

 

피카소의 그림을 한 번도 본 적이 없다하시는 분은 뉴욕 현대미술관이나 파리 피카소 박물관, 레이나 소피아 국립미술관에 한번 다녀 오시는 걸 추천합니다(가실 때 저의 왕복 비행기표와 숙식권도 함께.. ^^;).

 

가난한 우리 인생은.. 그냥 링크(이거 눌러주세요)

저작권 무서워서 링크만 걸었습니다.  보시면 아시겠지만 피카소가 시력이 이상해서 이렇게 그렸을까요?

 

피카소는 극사실주의와 같이 눈에 보이는 그대로를 그린 것이 아니라 마음에 느껴지는 그 사람의 특징을 그린 거랍니다.

 

그리고 피카소 이전의 추상화(Painting)의 대가들이 이미 몇 천년 전에 있었으니.. 바로 바로 아래의 그림을 그리신 분들이죠.

 

(설마 이집트 벽화 사진에 저작권은 없겠죠. ㅡㅡ;)

 

자 이제 전신 거울을 앞에 두시고 저 자세를 취해 보시는 겁니다.

잘 되시나요?

잘 되시는 분은 제가 신으로 인정해 드립니다.

앞에 "병"을 붙여서요.

 

얼굴은 측면, 몸통은 정면, 하체는 다시 측면 이런 자세가 나오기도 힘들지만 제일 문제는 바로 측면 얼굴에 붙어있는 정면에서 봐야 가능한 눈이 정말 문제입니다.

 

이집트인이 괴물이어서 이렇게 그린 걸까요?


아니죠. ^^

보시면 키도 제각각인데 바로 그 시대의 권력 구도에 따라 키를 그렸다고 합니다.  키가 클수록 큰 권력을 가진 사람인 것이죠.

 

이집트 화가들은 그 사람의 전체 모습이 아니라 각 부분의 특징을 가장 잘 들러낼 수 있도록 신체를 분해 결합해서 벽화를 그렸습니다.

 

여러분도 생각해 보세요.

아름다운 눈은 정면과 측면 어디서 볼 때 더 아름다울까요?

코는? 입은? 얼굴의 전체 윤곽은? 상체는? 하체는?

 

바로 이집트 화가의 관점은 이렇게 실제 모습이 아닌 추상적인 모습을 그려서 오히려 그 인물을 더 정확하게 묘사하려 했다는 걸 알 수 있습니다.

 

피카소는 마음에 느껴지는 그 사람의 느낌과 특성을 극대화해서 추상화를 그린 것이구요.

 

여기서 추상의 사전적 뜻을 살펴볼 필요가 있습니다.

 

추상 (抽象) [명사] [심리] 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용.

(네이흠 사전에서 펐습니다.)

 

기존에 알고 계시던 추상의 개념과 같으신가요?

 

OOP 의 추상화와 위의 페인팅 추상화, 그리고 사전적 의미로서의 추상화가 같은 의미로 다가 오시나요?

흠흠 아직은 어려우시죠. ^^

그런데 사전적 의미에서 "공통 특성 / 공통 속성 추출" 오오 뭔가 느낌이.. 안 오시면 말구요. ^^

그냥 페인팅에서의, 사전적 의미의 추상이라도 이해하셨다면 그것으로 일단 됬습니다.

 

말로 하면 10분도 안 되는데 글로 하니 90분이 지나가서 일단 접습니다. ^^

 

다음 강좌에서는 이런한 추상의 의미를 이해하고서 OOP 의 추상화는 곧 모델링이다는 관점을 설명하도록 하겠습니다.

 

그리고 아래는 보너스 입니다.

 

추상화(抽象畫)
[명사] [미술] 사물의 사실적 재현이 아니고 순수한 점ㆍ선ㆍ면ㆍ색채에 의한 표현을 목표로 한 그림. 일반적으로는 대상의 형태를 해체한 입체파 등의 회화도 포함한다.

 

추상화(抽象化)
[명사] 추상적인 것으로 됨. 또는 그렇게 만듦.

 

추상화(abstraction) - http://kin.naver.com/openkr/detail.nhn?docId=7554
주어진 문제나 시스템을 중요하고 관계 있는 부분만 분리해 내어 간결하고 이해하기 쉽게 만드는 작업. 이러한 과정은 원래의 문제에서 구체적인 사항은 되도록 생략하고 핵심이 되는 원리만을 따지기 때문에 원래의 문제와는 전혀 관계가 없어 보이는 수학적인 모델이 나오기도 한다. 이 기법은 복잡한 문제나 시스템을 이해하거나 설계하는 데 없어서는 안될 중요한 요소이다.

 

그리고 아래는 PS 입니다.

객체지향의 4대 특성은 기억하시나요?

기억 안 나세요? 흠 설마 머리가 식물화 되신 건 아니죠?

그렇게 식물화 되신 머리라면 제가 감탄해 드리겠습니다.

이렇게요.

 

"캡!!! 상추다"

 

아잉.. 흥분하지 마시고요.  님의 머리가 상추라는 의미는 아닙니다.

 

캡: 캡슐화

상: 상속

추: 추상화

다: 다형성

 

이제 고기에 상추 싸서 드실 때 마다 OOP 4 대 특성이 기억나실 겁니다. ^^ 이거 저주인가...

 

OOP 를 이해하는데 최소 3년에서 5년 걸린다는 말이 있었고.. 저는 5년 이상 걸린 것 같은데... ㅡㅜ

제게 8시간 주시면 OOP 4대 특성에 대해 이해시켜 드리도록 하겠습니다.  시간과 함께 강사료.. 쿨락 ^^;

왜 3년에서 5년 걸린다는 말이 있는지와 어떻게 8시간만에 끝내는지도...

단, 강의 전제 조건은 프로그래밍 언어의 제어문과 함수는 선수 학습 되어 있다는 가정을 합니다.

 

그리고 가장 오해를 불러온 특성은 상속입니다.  상속은 사실 상속이 아니라 확장이라는 표현이 맞습니다.

자바에서도 inheritance 가 아닌 extends 라는 키워드를 사용하죠.

 

뭐 살짝 맛만 보여드린다면

 

캡슐화 - 정보은닉

상속 - 재사용

추상화 - 모델링

다형성 - 사용 편의성

 

더해서 클래스 vs 객체를 붕어빵틀 vs 붕어빵으로 설명하는 책을 저는 아주 아주 무진장 싫어합니다. ^^

 

객체지향 이해하는 데 확장이 아닌 상속, 붕어빵틀로 설명을 듣고 배웠으니 3 ~ 5년을 공부해도 객체지향을 모르게 되는 거죠. ^^

 

제가 스프링 강좌 초기에 객체지향과 스프링은 현실 세계 지향이라고 말씀드렸었죠.

현실 세계 지향이라면 이해하기 더 쉬워져야 하는데 그 동안의 객체지향에 대한 설명들은 그렇치 못했다는 거죠.

 

이 강좌까지 쭈욱 오신 분은 스프링프레임워크를 종합쇼핑몰 비유를 통해 쉽게 이해하실 수 있다는데 동의 하시죠. ^^

안 하시면.. 뻘줌...

 

객체지향도 현실세계에 빚대서 이해하는게 제일 쉽습니다.

여기에 객체지향 강좌요?  그건 책 쓴다고 이미... ^^

언제가는 나올거라고 이미...

 

주저리 주저리 써 봤습니다.

많은 고민과 퇴고/추고는 블러그 글에서는 안하게 되더라구요.

 

그럼 추상화 두 번째 강좌를 기다려 주세요.

 

메네 메네 데겔 우바르신.

(이건 아닌가.. ^^;)

반응형