2009. 3. 13. 04:29
프로그래밍
프로그래밍 언어는 사실 사용 방법 보다는 이해가 중요한 것이 요즘 현실인 듯 하다. 오래전부터 차근 차근 개발되어온 언어들은 다양한 특징을 가지게 되었고 그 특징 만큼이나 이름도 다양해 졌다.
그래서 어떤 언어가 어떤 특성을 지니고 있는지와 프로그래밍에 대한 근본적인 이해가 없으면 어떤 언어부터 공부해야 하는지를 전혀 감을 잡을 수가 없다.
그런데 객체 / 객체화 / 추상 클래스는 모든 프로그램 언어에 걸쳐서 등장하는 단골 손님이다. 이 놈들의 정확한 의미에 대해서 잘 이해하고 있다면 프로그래밍이 어떤것인지 알수 있다.
우선 객체와 클래스는 대립되는 의미이다. 클래스는 다른 말로 조립 설명서 이다. 로봇을 만든다고 가정한다면 어떤 어떤 부품이 어떻게 어떻게 연결되는지를 설명해 놓은 조립 설명서이다.
반면 객체화는 이 조립 설명서대로 로봇을 찍어내는 것을 말한다. 이것을 컴퓨터 입장에서 이야기 하자면 클래스는 메모리상에 존재하지는 않지만 객체 (로봇)이 어떤 어떤 속성과 멤버 함수를 가져야 되는지를 설명해 놓은 것이다.
그리고 객체화는 이 클래스가 컴퓨터의 메모리 상에 공간을 차지하게 되는 순간을 말한다. 이것을 수행하는 것이 바로 new 명령이다.
즉, 클래스의 조립 설명서에 따라서 로봇 (객체)를 만들어 내는 것이다.
왜 이런 번거로운 과정을 거쳐야 하느냐 하면, 우선 클래스는 객체의 재사용성과 범용성을 증가 시킨다. 잘 만들어 놓은 클래스 (조립 설명서) 하나로 여러개의 같은 형태의 객체를 마구 마구 찍어낼 수 있다. 게다가 상속과 오버로딩을 통해서 조금 변형된 모습의 새로운 로봇도 쉽게 쉽게 만들어 낼수 있게 된다.
바로 이런 점이 객체 지향 언어의 강점이다.
그래서 고급 개발자들이 멎진 클래스와 그에 딸린 함수들을 만들어 배포하면 (Microsoft) 일반 개발자들이 그 클래스를 바탕으로 객체를 생성하여 함수들을 사용하는 것이다.
물론, 일반 개발자들이 배포되는 클래스에 자신만의 함수를 추가하여 그 동작을 변경하고 싶을 때가 있기 마련이다. 그런 경우에 사용하는 것이 바로 추상 클래스다.
이 추상 클래스는 구현된 것이 전혀 없는 목차만 적혀있는 설명서인 클래스이다. 이것을 사용하는 일반 개발자는 추상 클래스가 가지고 있는 형태 (목차) 만 그대로 지키되 자신이 원하는 함수를 구현하기만 하면 된다.
자바와 같은 언어의 경우 이 추상 클래스가 참 많은데 이런 클래스는 반드시 클래스 내의 특정 함수 (목차) 를 사용자가 구현 해야만 작동하는 클래스다. 고로, 추상클래스는 일반 개발자에게 진정한 의미의 '개발' 을 할수 있도록 도와 주지만 어떤 어떤 함수를 반드시 구현해야 하는지를 목차로써 알려주는 '목차만 있는 설명서' 같은 놈이 바로 추상 클래스다.
그래서 어떤 언어가 어떤 특성을 지니고 있는지와 프로그래밍에 대한 근본적인 이해가 없으면 어떤 언어부터 공부해야 하는지를 전혀 감을 잡을 수가 없다.
그런데 객체 / 객체화 / 추상 클래스는 모든 프로그램 언어에 걸쳐서 등장하는 단골 손님이다. 이 놈들의 정확한 의미에 대해서 잘 이해하고 있다면 프로그래밍이 어떤것인지 알수 있다.
우선 객체와 클래스는 대립되는 의미이다. 클래스는 다른 말로 조립 설명서 이다. 로봇을 만든다고 가정한다면 어떤 어떤 부품이 어떻게 어떻게 연결되는지를 설명해 놓은 조립 설명서이다.
반면 객체화는 이 조립 설명서대로 로봇을 찍어내는 것을 말한다. 이것을 컴퓨터 입장에서 이야기 하자면 클래스는 메모리상에 존재하지는 않지만 객체 (로봇)이 어떤 어떤 속성과 멤버 함수를 가져야 되는지를 설명해 놓은 것이다.
그리고 객체화는 이 클래스가 컴퓨터의 메모리 상에 공간을 차지하게 되는 순간을 말한다. 이것을 수행하는 것이 바로 new 명령이다.
즉, 클래스의 조립 설명서에 따라서 로봇 (객체)를 만들어 내는 것이다.
왜 이런 번거로운 과정을 거쳐야 하느냐 하면, 우선 클래스는 객체의 재사용성과 범용성을 증가 시킨다. 잘 만들어 놓은 클래스 (조립 설명서) 하나로 여러개의 같은 형태의 객체를 마구 마구 찍어낼 수 있다. 게다가 상속과 오버로딩을 통해서 조금 변형된 모습의 새로운 로봇도 쉽게 쉽게 만들어 낼수 있게 된다.
바로 이런 점이 객체 지향 언어의 강점이다.
그래서 고급 개발자들이 멎진 클래스와 그에 딸린 함수들을 만들어 배포하면 (Microsoft) 일반 개발자들이 그 클래스를 바탕으로 객체를 생성하여 함수들을 사용하는 것이다.
물론, 일반 개발자들이 배포되는 클래스에 자신만의 함수를 추가하여 그 동작을 변경하고 싶을 때가 있기 마련이다. 그런 경우에 사용하는 것이 바로 추상 클래스다.
이 추상 클래스는 구현된 것이 전혀 없는 목차만 적혀있는 설명서인 클래스이다. 이것을 사용하는 일반 개발자는 추상 클래스가 가지고 있는 형태 (목차) 만 그대로 지키되 자신이 원하는 함수를 구현하기만 하면 된다.
자바와 같은 언어의 경우 이 추상 클래스가 참 많은데 이런 클래스는 반드시 클래스 내의 특정 함수 (목차) 를 사용자가 구현 해야만 작동하는 클래스다. 고로, 추상클래스는 일반 개발자에게 진정한 의미의 '개발' 을 할수 있도록 도와 주지만 어떤 어떤 함수를 반드시 구현해야 하는지를 목차로써 알려주는 '목차만 있는 설명서' 같은 놈이 바로 추상 클래스다.
'프로그래밍' 카테고리의 다른 글
x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_e6967989 (6) | 2009.09.10 |
---|---|
C/C++ 메모리 오류에 대하여 (1) | 2009.07.30 |
프로그램, 프로세스, 스레드 (2) | 2008.10.22 |
객체 지향 언어(C++) V.S. 비 객체 지향 언어(C) (2) | 2008.10.18 |
왜 객체 지향인가? (0) | 2008.01.11 |