'객체지향'에 해당되는 글 2건

  1. 2008.07.09 OOP(Object Oriented Programming)의 특징
  2. 2008.06.09 객체지향프로그래밍? 객체란?
Java/SE2008. 7. 9. 20:14
OOP(Object Oriented Programming)의 특징
    (1) 상속성(inheritance) - Human, Superman, Xman
    (2) 다형성(polymorphism)
    (3) 은닉성(Information Hiding)
    (4) 캡슐화(Encapsulation)


정리 하면 위와 같다.

일단 상속성은 하나의 큰 개체에서 여러개의 개체들이 파생되는것과 같다
좀 어렵게 들린다면 이렇게 생각해보자

인간 클래스가 있다. 그리고 익히 알다시피 미국 헐리우드의 영웅들인
슈퍼맨 클래스 와 액스맨 클래스가 있다.
슈퍼맨과 액스맨은 (물론 슈퍼맨은 클립톤행성에서 온 외계인, 액스맨은 돌연변이 이지만)
인간 클래스부터 상속을 받아서 만들어졌다.
왜? 대부분의 평범한 (여기서 평범한 이란 머리는 하나요 코도 하나요 콧구멍도 하나요.. 등등.. 외형을 말한다)
인간들과 슈퍼맨과 액스맨은 겉으로는 비슷해 보인다.
여기서 많은 공통점을 찾을수 있을것이다.

이렇듯 세가지의 공통적인 부분은 인간클래스에 있고.. 슈퍼맨과 액스맨은
인간 클래스와 동일한부분에(공통점)  대해서 변수를 만든다거나 행위를 만들어 내는것이 아니라
단지 인간클래스를 상속 받음으로서 인간클래스에서 쓰이는 것들을 다 쓸수 있게되는것이다.

두번째로 일단 생각해보면 슈퍼맨과 엑스맨은 기본적으로 사람의 외형을 가지고 있지만
그들은 사람이 할 수 없는 일들을 해낼수가 있다. 그렇게 하기 위해서 일부 행위들이 변경되고
수치들도 변화하게 되고 추가가 될 수도 있다.
이것이 바로 다형성이다.
상속을 받은 슈퍼맨은 날아다닐수 있게되고, 눈은 보는것 뿐만 아니라 레이져를 쏠수도 있을것이다.
인간이 1초에 1걸음을 걷는다면 슈퍼맨은 100걸음을 걸을수도 있을것이다.
이렇듯 인간과 슈퍼맨은 다른 능력을 가지는데 같은 행위에서 다른 모습을 보일수도 있는것..
말그대로 다형성이 되겠다.

다음으로는 은닉성, 캡슐화 가 되겠다.
이건 더더욱 설명이 쉽겠다.
슈퍼맨은 알다시피 자기자신을 숨겨왔다.. 왜???   자기자신이 인간과 다르다는걸 숨겨야 했다.

그냥 보여주면 안돼????  라고 묻는다면 이렇게 물어보고 싶다..
슈퍼맨과 신문기자인 클락캔트가 같다 라는것을 사람들이 전부 안다면?
1. 일단 영화가 재미가 없다.
2. 그럼 대체 왜 슈퍼맨이 필요해? 그냥 클락캔트로 하지..

여기서 은닉성은 슈퍼맨이 인간인 척 할수 있다는것이다. 반대로 인간은 슈퍼맨인척 할수 없을것이고..
캡슐화는 슈퍼맨에서 비유하자면 슈퍼맨의 능력에 관해서는
슈퍼맨 스스로가 조절이 가능하다는것이다. 캡슐화하지 않는다는것은 슈퍼맨의 능력치를
다른 사람들이 마구 조절이 가능할수도 있다는것이다(상상이 되는가??)

쩝.. 쓰다보니 좀 논란이 될 비유들이 넣어졌지만.. 이해를 쉽게 하고자 쓴것이니..
오해하지말고 비난하지 말아 주시길...  아니.. 욕만 안하고 비평해주시면 감사하겠습니다~ ^^

Posted by 햇 님
Java/Based2008. 6. 9. 15:39
객체지향 프로그래밍이라는 말을 많이 들었을겁니다.
물론 컴퓨터언어쪽 관련 전공자가 아니면 좀 생소한 이야기일수도 있지만...
프로그래밍에 취미 혹은 밥벌어 먹을 생각이 있는 분들이라면 한번쯤은 들어봤을 이야기일 테죠

제가 처음 자바를 접했을 당시에는 이 객체지향이라는 말에 참 익숙치 못했고,
어떤 의미인지 파악도 하지 못한체 코딩을 하다보니..
자바라는것에 큰 흥미를 얻지못했고, C++ 또한 객체지향의 개념이 첨가되었기에
갑자기 프로그램쪽에 흥미를 확 잃었던적이 있습니다.

미리 준비된 상태에서 쓰는 글이 아니라 좀 두서가 없지만,
왜 갑자기 이런 이야기를 하는고 하니..

객체지향의 개념을 확실히 이해하고 깨닫기전에
섣부르게 클래스를 만들고 프로그램을 짜기 시작하면
뭐.. 처음에는 문제없이 프로그래밍을 하겠지만 점점 프로그램이 거대화 되어 갈 수록
객체지향이라는 부분을 이해하지 못하는것이 얼마나 큰 문제가 되는지 깨닫게됩니다.

객체지향, 객체 라는것을  설명하기 전에...
왜!  라는 의문을 가져봅니다.

왜 객체지향인 걸까요?
그냥 프로그래밍이 아니라 객체를 지향하는 프로그래밍이라는것이
왜 생겨나게 되었을까 하는 생각을 해봐야 할 거 같습니다.

제 생각을 말하자면 '좀 더 편하게 프로그래밍 하자' , '좀 더 구조적으로 프로그래밍 하자'
이런 생각에 나오게 된게 아닐까 싶습니다.
기존의 프로그램밍 방식에서는 구조적이라던가 코드를 재사용하는데 제약이 많았지만
객체지향이라는 개념이 나오면서 이러한 한덩어리의 프로그램의
조그마한 블럭과 같이 되었다고나 할까요? (블럭 같은거지.. 블럭은 아니죠 ^^)


그렇다면 이 객체라는것은 또 무엇인지 알아야 할 거 같습니다.
그렇다면 저는 한마디로 이렇게 말할겁니다. (대부분 아시겠지만 ^^)
'객체는 모든것 이다.'
그렇습니다. 객체란 모든것입니다. 이 세상의 모든것 들을 모두 다 객체로 보는것이죠.
너와 나도 객체요, 컴퓨터도 핸드폰도, 유리컵도 객체로 봅니다.
컴퓨터 객체라고 하면 컴퓨터라는 객체 하나 또한 여러개의 객체들이 모여서 만들어진
객체가 될 것입니다. (그렇지 않을수도 있습니다)

간단한예로 들자면 컴퓨터에는 마우스라는 객체가 붙어있죠.
마우스객체는 혼자서 동작하지는 못하지만 컴퓨터의 메인보드 객체와 연결되면 동작을 하게 됩니다.
그렇다면 마우스라는 객체는 단 하나의 메인보드 객체와만 연결되야 동작할까요?
대답은 '아니다' 일 겁니다.

회사에서 쓰던 마우스를 집에 가져가서 집에있는 컴퓨터와 연결하면 동작을 안할까요?
USB 포트이냐 PS/2 포트이냐 하는 차이로인해 컨버터가 필요할 지언정 큰 무리없이 사용 할 수 있는것이죠.

다른 예로 대기업에서 한꺼번에 판매하는 데스크탑 PC 와 용산에 가서 자신이 직접 골라 조립한 PC로
보자면 기존의 프로그래밍은 대기업에서 내놓은 서비스형 PC로 고장이 나거나 업그레이드를 하려면
그 회사의 제품과 교체하거나 업그레이드해야하는 반면에 용산에서 산 PC는 그와 상관없이
마음대로(실제로 마음대로는 아니겠지만) 교체, 업그레이드가 가능하다는것입니다.

좀 쉽게 이해하시라고 예를 들었는데 오히려 더 헷갈리시려나요?
하지만 이 개념은 어느 순간.. 확 깨닫는것 같습니다. 그리고 중요한것은 객체지향을 안다 모른다..
객체를 안다 모른다라기 보다는

왜 객체를 쓰는지.. 왜 객체지향적인 프로그래밍이 필요한지에 대해 항상 의문부호를 던져야 하는다는겁니다.
스스로 많이 생각해보시고, 다른사람과도 의논해보는것도 좋고, 토론도 좋을것 같습니다.
다시한번 말씀드리지만..  왜!   왜! 그런것인가?   항시 생각해보시길 바랍니다. ^^
Posted by 햇 님