Skip to content

객체지향 프로그램

국내에 객체지향이란용어가 처음 등장한건 아마도 92년쯤인걸로 기억한다..벌써 10년도 더 흐른셈이다..또 나이먹는 느낌..ㅠㅠ

처음 객체지향이라는걸 접한건 볼란드에서 나온 C++ 컴파일러 사용하면서 부터였다. 처음 C++ 컴파일러를 만났을때는 C++ 에 대한 내용은 전혀 이해를 못했으며 객체라는 용어조차 매우 생소할때였다. 그 시절 하이텔을 많이 사용하던 때라 하이텔 개발자 포럼에 글도 올렸던 기억이 있다. 국내에는 아직 소개가 안된 컴파일러였고 나는 지인을 통해서 미국에서 직접 컴파일러를 구했으니까 그당시로서는 국내에서 몇번째 안될 정도에 C++ 을 만남 셈이였다. 그 당시 글의 내용은 C++에 대한 내용이 아니라 요즘은 너무나 흔한 신택스 하이라이트 에디터에 대한 내용이였다. 변수, 명령어, 연산자들의 색깔이 다른걸 그때 처음봤으니까 정말 이런게 가능하구나 할정도로 획기적인 에디터 였다. 마치 시골사람이 첨보는 물건을 신기하게 생각하는 수준인거 같다..^^

그때 처음 C++를 처음 만났을때의 느낌은 C와 별다름이 없다는 생각이였다. 근데 왜 객체라는 말을 쓰고 D 도 아닌 C++ 일까 참 오랬동안 생각을 했었던 기억이 있다.
프로그램이라면 밤낮을 안가리던 때라서 정말 열심히 C++을 공부했다. 하지만 정말로 나 자신의 역부족을 절실히 느끼기도 한때였다.

그당시 C++ 관련책자는 정말 다 사다가 읽으면서 객체지향의 의미를 정확히 알고 싶었지만 어디 물어볼때도 없고 읽을만한 책도 없을 때인지라 거의 1년정도 책만보면서 머리를 싸맨거 같다. 중간에 2번씩이나 이건 내 머리로는 안된다고 한두달 책을 덮고 포기할 정도록 막막하기도 했었다.

1년이 넘고 거의 2년이 다돼갈 무렵 정말 수십번 그 뜻이 이해될까 싶을 정도록 책을 계속 보다 보니 정말 어느 순각 객체라는 의미가 머리에 정리가 되기 시작했다.

요즘이야 워낙 쉬운 예제나 해당 분야에 대한 정보가 넘치다 보니 1주일도 안 걸릴 일이지만 ㅠㅠ

나 나름대로 의 객체를 정의하면 바로 명사..정확히 말하면 주어라고 생각한다. 모든 프로그램어들이 공부를 하는건 바로 함수를 주로 하게 된다. 그 함수를 위주로 프로그램을 공부한 나로선 명사의 의미인 객체를 이해하는데 시간이 많이 걸릴 수 밖에 없었던거 같다.

C언어는 함수 지향 프로그램이다.
그래서 프로그램을 짜기 전에 함수를 정의하고 그 함수에 넘길 인자와 반환값과 그 함수에서 연산할 로직을 설계하는 방식이 바로 함수 지향 설계법이다. 아직까지도 많은 프로그램어가 이 방식으로 개발을 하고 있기도 하다.

여기서 함수는 바로 동사에 해당된다. 프로그램 설계란 문자을 분석하는 방식과 매우 흡사하다. 그래서 함수 지향주의 경우는 일단 문장의 동사에 밑줄을 그은 다음에 주어를 인자로 목적어를 반환값을 정하는 방식인데 반해서 객체지향의 경우는 주어를 클래스로 동사를 내부함수 형태로 구조를 바꾸는 방식이다.

간혹 프로그램어들이 1 또는 0 만 알고 사고 방식이 보통사람들과 다른다는 평을 자주 듣는다. 그건 바로 매사를 함수지향주의로 보다 보니 일상을 보는 시각도 변했기 때문이다.

우리가 살고 있는 세상은 동사위주가 아닌 주어 위주의 객체지향주의에 살고 있는것이다. 내가 살기 위해서 여러가지 방법을 선택하는 것이지 내가 살기 위한 방법을 정해놓고 내가 거기 맞춰 나가는게 아니라는 뜻이다. 객체지향주의란 바로 우리 주변의 많은 현실과 동일한 시각에서 출반한 설계방법이다.

C 에서 D가 아니고 C++인 이유가 바로 여기에 있다.
만일 획기적인 알고리즘 또는 결과물 표시 방법이 바뀌었다면, 마치 도스에서 윈도우처럼…이경우라면 D가 맞다고 생각한다.
하지만 C++는 C의 언어의 문법과 기법을 그대로 이용하면서 객체를 설계할 수 있는 기법으로 바뀌었다는 점에서 C++ 가 된것이다.

많은 사람들이 C와 C++이 어떤 차이가 있냐고 질문을 하지만 두 언어는 단순 비교 대상이 아니라 그 언어를 어떤 관점에서 사용하느냐에 차이가 있다고 할수 있다. C++을 C와 똑같이 사용할 수도 있고. 순수 C만으로도 객체지향적으로 코딩이 가능하다.

단지 좀더 객체지향적인 프로그램이 쉽도록 새로운 문법이 약간 가미된 형태가 바로 C++이라는 것이다.

C++에서 나타난 가장 대표적인 문법이 바로 상속성이다.
나 역시 상속성에 대한 부분을 객체지향에서 가장 중요하게 생각하는 부분이기도 하다.

우리가 삶을 사는 방식을 절대로 당대의 지식과 판단으로 살수는 없다. 과거가 없는 현재와 미래가 없다는 이유인것다. 바로 이 부분이 상속성에 해당하는 것이다. 과거의 장점과 현제의 새로운 점과 미래에 대한 예측의 조함이 바로 객체 상속이라는 점이다.

객체라는 특성은 상속 뿐만이 아니라 추상화 캡슐화 재사용화 등 많은 내용이 있지만 프로그램적인 용어보다는 객체라는 그 차체를 정리하고자 가급적 기술 용어를 자제하다보니 설명이 쉽지 않지만 객체라는게 단순명료하게 한마디로 정리되기가 쉽지 않은 의미인지라…

한동안 C언어에 빠져있데 나에게 새로운 시각으로의 설계 방식은 정말 개인적으로 신대륙을 발견한 기분이였으며 만나는 엔지니어마다 객체지향을 설명하고자 여기저기 날뛰던게 엊그제 일만 같다.

객체지향이란 프로그램을 좀더 우리 삶의 관점으로 설계하고 관리하는 기법이지 단순 코딩에만 적용되는 것이 아니라 회사생활이나 다른 어떤 모든것에도 적용될만한 대단한 이론이라고 생각한다.

다음번 글은 프로그램 관점에서의 객체를 정리해야겠다.

A, IMG 태그 점선 외각선 없에는 방법

html 을 작성하다보면 링크 또는 이미지 태그를 마우스로 누르다가 말거나 또는 스크립트 링크(페이지 이동이 없는)경우에 해당 링크를 눌렀다는 표시로 외각 점선이 나오게 된다.

이 부분을 항상 안나오게 하는 스크립트를 맨 아래 넣어주면 이 부분이 깔끔하게 해결된다.

저도 이 블로그의 스킨파일 맨뒤에 첨부해서 사용중이고요^^

<script>
function bluring()
{
if (event.srcElement.tagName==”A”||event.srcElement.tagName==”IMG”)
document.body.focus();
}
document.onfocusin=bluring;
</script>

C 는 배우기 쉬운 언어인가?

프로그램어라면 누구나 한번은 배워야 한다고 생각하는 언어중에 하나가 C 언어 또는 C++ 라고 생각한다.

질문에 대한 답은 정말 배우기 쉬운 언어라고 생각한다.
하지만 사용하기는 너무나 어려운 언어라는 상반된 언어다.

나도 C 언어를 사용한지 벌써 18년정도 된거 같은데도 아직도 그 정체를 잘 모를때가 많다..내가 머리가 나쁜가 보다.
주변에서는 C를 배우겠다고 나를 거쳐간 인간도 셀수 없을 만큼 많았었지만..글쎄 다들 잘 쓰고 있을까 …별로 그렇지 않은거 같기도 하고

왜 C 는 다들 배우기 힘들다고 할까..그건 아마도 C관련된 책을 보면 그럴만한 이유가 있다.

잠시 삼천포를 가면 얼마전 강남에 있는 중형급 서점에 가게되서 항상 그렇듯이 프로그램관련 부스를 찾았다. 요즘 별로 서점에 갈 일이 없기도 했지만 너무 오랜만에 간거라서 그런건지 약간 충격적인 상황이 있었다. 그건 모든 C언어 관련책자가 무릎아래에 전시되어있었다. 그건 안필리는 책이라는 뜻이고 더 많은 종류의 책이 안나올 예정이라는 거다. 사실 요즘 대학 졸업자들중에 제대로 C 언어 하나 배우고 졸업한 경우는 정말 사막에서 물찾는 격인거 같고 그나만 좀 알아도 실업무적용에 1년정도는 배워야 될 정도니 세계 최고 IT강국이 얼마나 오래갈지 걱정이 앞선다.

다시 주제로 돌아와서
모든 C관련 책자에서 보면 다들 특이하게도 신택스만 잔뜩 나열되있다. 예제는 눈씻고 찾아봐도 별로 없고 무슨 메모리 트리나 기껏해야 엉성한 파일관리같은거 뿐이다. 요즘처럼 그 결과를 빨리 보고 싶은 엔지니어들이 이론도 아닌 신택스만 잔뜩 나열된 책을 보고 싶지도 않을게 당연하다. 모든 사람이 알듯이 보통 책은 1장,2장만 열심히 보는 편이여서리 우니라나가 사람들이 영어에서 명사만 잘하는 이유와 무관하지 않을것도 같다^^

왜 다른 언어는 특히 웹관련,디자인관련 등은 예제도 다양한데 유독 제일 막강하다고 생각하는 C 는 예제가 없을까?

이유는 C는 목적이 없는 언어기 때문이다. 다른 언어들은 그 특성이 매우 한정적이여서 그 사용처가 분명하기 때문이다. 즉 웹을 배우는 사람들은 회원가입/게시판/자료실/디자인등의 업무로 그 범위가 명확하다는 거다. 하지만 C는 그 사용처가 너무 광범위 하기 때문에 배우는 단계에서 조차 내가 앞으로 이걸 어디다 쓸지를 알 수 없다는 점이다. 그러다 보니 단순 신택스를 배우고 나서 뭘 할지 막막하다는 점이다.

내가 C언어를 가르칠때는 빠르면 하루에서 길어야 3일정도면 C언어에서 중요한 사용 및 그 기능을 다 설명하게 된다. 배우는 입장에서는 정말 난감하겠지만..마치 알파벳 가르쳐놓고 미국에 혼자 나두는 느낌일꺼다..ㅋㅋ..

참 외울것도 없고 신택스도 무진장 간단한 언어가 왜 이리 사용하기 힘들까. 그건 우리나라 사람의 성격상 기초과학 보다는 응용과학쪽에 관심이 많은 사회 분위기가 아마도 성격을 급하게 하면서 배우기 어렵다는 언어로 치부된게 아닌가 싶다.

나와 같이 사업을 하고 있는 파트너의 친누나가 미국에서 매우 큰 방위사업체에서 개발 이사를 하고 있는데 그 분의 말을 빌면 그 누님 아래 3백여명의 고급 C언어 엔지니어가 밤새가며 코딩하고 있다고 들었다. 괜히 미국이 강대국이 아닌거 같다는 생각도 들고 왜 우리나라 많은 엔지니어들은 이렇게 못할까도 속상하고ㅠㅠ

C는 보통 학원에서 말하듯이 속성이 될수 없는 언어다.
최소 6개월정도는 아무 프로젝트 없이 그 본질을 배워야 하고 2년정도 실무를 해봐야 그 맛을 느끼게 되고 한 십년 정도 쓰다보면 그 철학이 보이는 오묘한 언어라 생각한다. 그렇다고 이렇게 길게 배워야 한다는게 아니고 그냥 우리나라 장맛처럼 오래 묵어야 재 맛이 나는거지 오래되야 짠맛이 난다는건 아니다.

좀더 느긋한 마음으로 접근한다면 C는 너무나 쉬운 언어다. 그리고 그걸 한번 배우는 순간 다른 언어는 너무나 쉽고 그 원리와 이해가 그냥 보이게 된다. 모든 O/S나 패키지가 C로 만들고 대부분의 엔지니어가 경험했듯이 어려운 문제를 만났을때 최종적으로 이건 C로 해야되는데 라는 말은 정말 흔한 말이기 때문이다.

절대로 ASP, PHP나 기타 다른언어를 평가절하 하는 뜻은 아니다.
그 언어들의 특성상 특정 분야에서는 C를 능가하는 좋은 결과물을 내놓기 때문이다. 하지만…엔지니어는 편식을 하면 안돼며 기초기술에 충실해야 장기적으로 살아남지 않을까 생각된다.

자바, ASP, PHP로는 아마도 달나라 가는 프로그램은 못할꺼다. 하지만 그 부분에서 약간에 주변 언어로 사용하겠지만.

IT 최강의 인프라만을 가지고 IT최강국이 될수는 없다. 그 인프라를 가지고 인프라를 내것으로 조정하고 다스릴 수 있을때 진정한 IT 강국이 되지 않을까 생각된다.