C언어에 익숙한 프로그래머가 객체지향의 속으로 이동하는 척도
글쓴이: withlhw / 작성시간: 목, 2004/06/03 - 2:32오후
다들 안녕하세요?
오랜만에 글을 적어 보내요.. 위의 제목은 평소에 제가 쩜 가슴속에 담고 있던
뭐 그런겁니다. 전산과를 졸업하고 2년동안 임베디드 시스템쪽에서 일을하고
있어요. 뭐 이제 어느정도 C에 대해서 익숙해져 가고 있는데...
어느날 문득 C++로 코딩을 할려니 막막하더라구요. 뭐 기본적인 C++문법과
객체지향에 대한 이론은 교과서에 나와있는건 알고 있는데...
역쉬나 몸으로 느껴지지가 않터라구요.
어떻게 하면은 저 같은 C에 깊숙한 프로그래머가 객체지향언어를 지금의 C처럼
자유자제로 사용할 수 있는 척도라고 할까? 방법이 있을까요?
Forums:
동병상련...
저두 임베디드에서 한 2년 굴러먹다가, 지금은 리눅스에서 개발하구 있습니다.
C는 이제 어느정도 남의 코드를 봐도 눈에 들어오고 디버깅도 하겠는데 C++는 당최... C++로 되는거 C로도 다 구현 가능하기 때문에 굳이 사용하지는 않고 있지만, 하도 여기 저기서 객체지향, 개체지향 해서리..
머 책보는거 하구, 자꾸 짜보고 하는거 말구 왕도가 있겠습니까마는... 혹시라도 있다면 알려주세요...
그리고 C++코드 디버깅은 어떤식으로 하는것이 효과적인가요...
대충 C코드는 프린트 찍어보구, DDD 이용해서 디버깅하면 되는디..
=================================
Jason
You are never too old to do something smart
=================================
저도머 C++잘안하지만.. 기억을되살려보자면C++이 C랑크게 다를게
저도머 C++잘안하지만.. 기억을되살려보자면
C++이 C랑크게 다를게 없습니다 단지 함수와구조체를 클레스로구현하면됩니다.C에서는 구조체에의한고조화를하고 함수호출관계를생각하지만
C++은 클레스에의한구조화를 하면됩니다. 다른건양념이고 핵심은 클레스뿐입니다. 객체지향 = 클레스 라생각해도 무방할정도입니다. 그리고 함수의난발에대해 네이밍만 잘하시면됩니다.
----------------------------------------------------------------------------
디자인 패턴을 보세요 :)
디자인 패턴을 보세요 :)
----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...
저도 C 만하다가 C++ 을 해야 할 일이 생겼는데이론적으로는 기
저도 C 만하다가 C++ 을 해야 할 일이 생겼는데
이론적으로는 기본적인건 알겠는데 막상 설계 할려고 하면 막막합니다
fender 님 말씀대로 디자인 패턴 한번 읽어봐야 겠군요
STL을 함 사용해 보세요..
전 C프로그래밍을 그렇게 오래 한건 아닌데, STL을 사용하다 보니 습관이 변하더군요.
일단 STL을 사용하게 되면 C로 힘들게 구현했던 여러가지 자료구조나 알고리즘을 쉽게 사용할수 있고요, 또, 쓰다보니 자연스럽게 클래스를 디자인 하게 되더군요.
예전엔 int func(int arg1, ...) 이렇게 치면서, 어떻게 함수를 나누는게 효율적인가를 생각했는데요, 요즘은 class type{ ..} 하면서 이 클래스에는 어떤 자료형이 필요한가, 어떤 연산자를 정의할까? 그런걸 생각합니다.
물론 STL이 객체지향적 프로그래밍과는 거리가 있습니다만, set 이나 map을 사용하면서 자연스럽게 클래스를 디자인 하게 됐습니다.
요즘엔 Modern C++ Design이란 책을 보고 있는데, C++은 단순히 C에 객체지향 프로그래밍을 더한게 아니라는 생각이 듭니다.
그 책에서 주로 템플릿을 이용한 메타프로그래밍을 소개하는데, 정말.... 말이 필요 없습니다. 함 보세요 멋집니다. ^^
Re: STL을 함 사용해 보세요..
저는 경력 5년차 프로그래머입니다.
win32개발을 하는데요.. 저는 C++에 어느정도 익숙한 상태입니다.
STL을 다루신다니 정말 반가운 생각이 드는군요.. 제가 STL을 다루기 시작한지벌써 2년이 되었네요.. 물론 그전에 STL을 알고있기는했지만 실무에 적용할 일이 없었지요..
님에게 stlport를 추천하니다. www.stlport.org
아 저의 소개를 잠시하자면 저는 현재 윈도우프로그래머입니다. 하지만 1년 후 리눅서가 되기위해서 이제막 리눅스에 입문한 상태랍니다.
여기전 잠깐 PR 아~ 제가 만든 공개용 소프트웨어인데. 알려지지 않아서요
windows요입니다. www.photozenic.co.kr
이프로그램을 처음부터 지금까지 객체지향기반으로 개발하였습니다..
그럼~
[OT] Re: STL을 함 사용해 보세요..
멋진 프로그램이군요! 리눅스용도 나오는 건가요? 그럼 더욱 멋진 일이겠죠.
오픈소스 프로젝트가 되면 더더욱 멋지겠죠.
대놓고 광고하니까 차라리 보기가 낳네요-.-b
----
the smile has left your eyes...
STL을 쓴다, MFC를 쓴다, 혹은 class를 쓴다고 해서 객체지향은
STL을 쓴다, MFC를 쓴다, 혹은 class를 쓴다고 해서 객체지향은 아니라고 생각합니다. 프로그램을 객체를 중심으로 설계하고 작성한다는 것이겠지요.
stroustrup의 책을 보면, 전반부와 후반부가 각각 C의 계승자로써의 C++과 객체지향언어로써의 C++을 설명하고 있다고 생각됩니다.
앞의 어느 분 말씀처럼 C++을 C처럼 쓸 수도 있습니다. 이 관점에서 보면 class는 더 편리한 struct죠. C++은 더 편리한(그리고 더 복잡한) C.
객체지향을 원하시는 거라면
fender님께서 추천하신 디자인 패턴책도 좋구요~
Advanced C++(꽤 오래된 책인데 최근에 번역이 나왔습니다)도 추천합니다.
C++을 C++답게 쓰는 방법에 관한 책인데, 원서 영어가 상당히 어려워서 애먹었던 기억이 납니다.
좋은 결과 있으시길~
----
the smile has left your eyes...
저도 디자인 패턴을 보시는 것이객체지향에 익숙해지는것에 큰 도움이 될
저도 디자인 패턴을 보시는 것이
객체지향에 익숙해지는것에 큰 도움이 될 것이라 생각합니다.
저는 디자인패턴을 보면서
객체지향을 사용하면 어떤때 어떤식으로 구조화가 잘되고
의미가 명확해지고.. 등등을 느꼈거든요..
(몇몇에서는 그냥 모듈로 하면 편할 것을 객체로 끼워맞추다보니 이런 식 패턴도 생기네.. 식의 생각이 들기도 했었습니다만..)
비록 자바 서적이지만
Pattern in java 추천합니다..
일단 쉽고,
예제를 찾아보기 쉽습니다.
Modern c++ Design 도 좋은책이긴한데..
다양한 패턴을 소개한다기보다
효율적으로 패턴을 구현하는 방법을 알려주는 책 같아서
어느정도 익숙해지시고 보시면 더욱 도움이 될 것 같습니다.
[quote]아 저의 소개를 잠시하자면 저는 현재 윈도우프로그래머입니다.
버그 헌터님.. 포토제닉 설치하고 사진을 핸드폰으로 전송했는데
( UI 에 신경을 참 많이 쓰신게 보입니다. 기능도 괜찮습니다 버뜨..)
20분 가량이 지났는데도 전송이 안됩니다. FAQ에 보니 핸드폰 전송에
관한 문의는 유니큐브란 곳에 하라고 쓰여있는데요.
이미지 한장, 단돈 300원때문에 ㈜유니큐브란 곳에 메일보내고 전화하고
싶지는 않네요.
서비스가 원할히 되지 않는거 같습니다. 헐헐...
아지랑이류 초환상 공콤 화랑... 포기하다.. T.T
:twisted: 객체지향을 잘 할려면 두가지만 기억하세요
:twisted:
객체지향을 잘 할려면 두가지만 기억하세요.
다형성과 what?
문제에 접근하는 사고방식을 바꾸지 않는한 객체지향적인 프로그래밍은 나오지 않습니다. c 언어를 오래동안 쓰셨으면, 사고 방식이 how로 굳어지죠. 미국에서 중학생들과 c언어나 코볼을 오랫동안 쓴 사람들에게 동시에 함수형 언어를 가르쳐서 어느쪽이 배우는 속도가 더 빠른지 실험한 적이 있습니다. 결과는 중학생들이 더 빨리 배운다였습니다. 한번 사고 방식이 굳어지면, 그런 사고 방식이 비어있는 사람보다 더 배우기 힘들다는 거겠죠.
예를 들어보죠.
만약 ftp 서버를 만드신다면 먼저 소켓을 열고 그 다음 파일을 읽고 이런식으로 줄줄줄 생각하는 방식을 버리시고, ftp 서버가 무엇인지 먼저 정의(what)하십시오. 정의하라는 말은 어떤 속성(변수)들과 어떤 행등(함수)들을 가지고 있는지로 바뀌겠죠. 그리고 어떤 이벤트 객체들이 왔을 때 어떤식으로 대응 할 것인가 하는 식으로요. 클라이언트 객체가 소켓과 명령들을 가지고 ftp 어떤 서버에 찾아 갈 수도 있을겁니다. 물론 클라이언트 객체들은 먼저 정의되어 있겠죠.
다시 클라이언트 객체들 보면, 클라이언트 객체들은 anonymous, 특정 사용자 클라이언트들로 나뉠 수 있겠죠. 그리고 그 클라이언트들에겐 공통적인 속성이나 행동들을 있을겁니다. 이 것들을 뽑아 위로 올리는 것이 일반화(Generalization) 입니다. 그리고나서 공통적인 부분들을 다시 자식 클라이언트들이 상속받을 수 있겠죠. 그리고 그 공통적인 행동에서 같은 행동이지만 안의 내용이 다른 것들이 있겠죠. 개똥이 유저 클라이언트가 접속하면 개똥이 홈 디렉토리로, 길동이 유저 클라이언트가 접속하면 길동이 홈 디렉토리로, 모두가 그런 행동을 한다는 것은 같지만 상속되어서 하는 행동은 다르죠. 이런 것들이 주로 가상 함수가 되겠죠. 그리고 이것이 객체지향에서 가장 중요한 다형성(polymorphism)입니다.
음... 이해가 되실련지....
기본 이론이 이러니 구현하려는 기반기술과 그에 따른 비지니스 로직등을 완전하게 파악하지 않으면 제대로 된 객체지향 설계는 나오지 않습니다.
p.s. c++... 언어인가? 공룡인가?
You may say I'm a dreamer.
But I'm not the only one.
OOP
제 강의 경험상, 주 언어로 C 언어를 오래하신 분들 경우 OOP를 배우는데 많은 어려움을 겪었습니다. 반대로 프로그래밍 경력이 일천한 분들이 오히려 빨리 배우기도 하더군요. (실제로 이와 일치하는 보고서를 CACM인가 IEEE Software에서 인가 봤습니다)
Smalltalk is not only NOT its syntax or the class library, it is not even about classes. I'm sorry that I long ago coined the term "objects" for this topic because it gets many people to focus on the lesser idea.
The big idea is "messaging" -- that is what the kernal of Smalltalk/Squeak is all about (and it's something that was never quite completed in our Xerox PARC phase).
--Alan Kay
OOP를 배우는 데에는 우선 CRC 카드나 스퀵 같은 시스템을 갖고 노는 것이 주류 OOP 언어를 배우려고 고생하는 것보다 훨씬 낫다고 생각합니다.
[quote="wildkuz"]p.s. c++... 언어인가
공룡보다는 멀티패러다임 프로그래밍 언어.. 그말이 맞는것 같네요.
OOP도 알아야 하겠지만 결국엔 제네릭 프로그래밍으로 나아가야 하는..
패턴서적들을 읽기엔 자바만으로 충분할듯 한데..
아무튼 C++은 객체지향을 알기위해 배워야 할게 너무 많은 언어입니다.
[quote="juneaftn"]제 강의 경험상, 주 언어로 C 언어를
뼈속 깊이 공감합니다.
( ' ')a 음... 확실히 객체지향이라는 말이 오래전부터 등장했었지만
( ' ')a 음... 확실히 객체지향이라는 말이 오래전부터 등장했었지만, 저도 C를 쓰고 있던터라 객체지향에 대한 이해가 되지 않았었죠...
근데... -_-;;; 어느 시점에서 어떤 책의 설명을 계기로 문득 깨달음이 있었다고 해야 할까요? 덕분에 요즘은 객체지향에 대한 어려움 없이 C++도 병행해서 사용하고 있습니다.
하지만, 역시 C만 하다가 C++을 하려니 '이거 이렇게 해도 되는건가?'라고 할 정도로 뭔가 제한적이던 것이 풀렸다고 해야 할까요?
이렇게 만들어도 돌아갈까? 라는 생각이 자꾸 들 때가 많습니다. ( ' ')a
C++은 너무 유연한 것 같아요.
저도 92년에 처음 객체지향 프로그래밍이란 것을 접했는데... 당시에 C++로
접했지요. 직접적으로 프로젝트에 적용은 거의 안해 봐서인지, 볼때 마다 어떻게
프로그램을 작성해야 할지를 막막했던 경험이 있습니다.
그러다가 델파이와 자바를 만나면서 이른바 감이 잡히더군요.
그래서 저는 객체지향 프로그래밍 방식이 아니라 C++의 문법적 복잡성이 더
문제라고 보게 되었죠.
C++의 문법은 너무 유연하고 기능이 방대합니다. 그거 배우고 신경 쓰다보면
핵심을 놓치는 경우가 많고, 거기다 자신의 명확한 객체 모델링 개념이나
방식이 없으면 우왕좌왕하기 쉽상이죠.
대부분의 C++책을 들여다보면(현재는 잘 모르겠습니다. 적어도 97년 이전)
추상화, 다형성, 상속을 어떻게 이용해 먹을까를 다루기 보다는 함수 오버로딩
이나 연산자 오버로딩등의 문법적인 측면만 다루고는 끝을 맺더라구요.
말하자면 "이렇게 훌륭하게 추상화와 다형성과 상속성을 제공한다!"라고
주장 하고서는 책이 끝나는 느낌을 받는다는 것이죠. 그래서 어쩌라는 건지
황당한 느낌을 받게 되죠.(좀 과장된 면이 있습니다만 처음 접하는 이들에겐
이런느낌 충분히 받았을 것이라고 봅니다.)
나중에 다른 언어를 통해서 객체지향을 접하게 되면서 잘 모델링된 프레임도
접하고 C와는 많이 다른 문법을 익히게 되면서 좀 불편은 하지만 나름대로
쉽게 적응을 할 수 있게 되더군요.
어디선가 읽어 본듯도한데... 차라리 어느정도 제약을 두고 객체 모델을
제시하면 쉽게 배울 수 있었을텐데 하는 생각을 하게 되더군요.
그래서 개인적으로는 Objective C를 더 선호 하기도 했었습니다.
지금도 그다지 C++에는 정이 안가네요. MFC라는 이상한 녀석 때문에
고생한 악몽도 있고...
지금은 임베디드쪽 일을 하느라 C언어 밖에는 쓸일이 없습니다만...
언젠가 이쪽에서도 객체지향 언어를 쓸 수 있는 날이 왔으면 좋겠네요.
암튼 객체지향이라는 것은 언어적인 측면 보다는 사고 방식의 전환이라는 것이
더 중요한 것이 아닌가 생각합니다. 제 경우에도 C로 프로그래밍을 하더라도
객체지향적인 프로그래밍을 하게 됩니다. 그것이 디자인 하기도 편하고,
시간이 지날 수록 유지 관리도 쉬워지고, 재보수를 할 때도 금방 인식 할 수가 있죠.
괜히 C++의 문법에 얽매여서 핵심을 놓치는 일이 없으면 합니다.
그렇다고 C++이 무지 꼬진 언어라는 말이 아닙니다. 너무 기능이 많아서
개발자의 디자인 역량에 따라 그 파워를 달리한다는 뜻으로 받아주세요. ^^;
그리고 C++을 배우는데 C언어 고수들이 더 어려움을 겪는다고 하셨는데...
제 생각에는 C언어 고수들에게 그들에게 맞는 교수법을 쓰지 않아서라고 생각
합니다.
대부분의 C언어 고수들은 컴퓨터가 어떻게 동작하는지, 운영체제는
어떻게 하드웨어 리소스를 다루는지, 프로그램 소스가 어떻게 컴파일되서
기계어로 변하는지를 머리 속에 꾀고 있는데, 뜬금 없이 객체지향이라는
프로그래밍 방식을 아주 추상적으로 받아들이라고 하니까 거부감이 생기는
것이라고 생각합니다.
제 생각에는 적어도 그들에게 추상적인 개념을 있는 그대로 받아들이라고
말하기 보다는 추상적인 디자인이 무엇이고, 어떻게 하는 것이며 그것이
프로그램의 확장에 얼마나 중요한 역할을 하는 개발 모델인지를 역설하면
충분이 가르칠 수 있을 것이라고 봅니다.
[quote="markboy"][quote="juneaftn"]제 강의
사실C하던사람은 더이상의 어떤것이 필요하지 않은상태에서 oop..객체지향..
이런식으로 말이 어렵고 말의 의미를 찾아봐도. 무엇을 의미하는지 구체적으로. 알수 없는건 당연하죠..
하지만 그냥 첨하는사람은 그런게 있나보다 하고 넘어가서 문법을 배우게 되니까..무엇때문에 oop라고 하는지는 몰라도 그저 C++이 oop 인가보다 하고 쓰게되는거죠..
하지만 궂이oop라는 어려운말을 써가며 사람을 혼동하게 만들필요가 있나합니다. 오히려 저말자체에 때문에 사람들이 어려워하는것 같군요.
----------------------------------------------------------------------------
저도.. -_-;
저도 공감을... ^^;;
아무래도 책과 자료들은 제가 알만한 것에 대해서는 자세히 설명해주고
(또는 전혀 관심없거나...) 이야기하고 또 하고 해주는데..
정말 알고 싶은것에 대해서는 이야기를 않해줬거든요... -_-;;
결국 다른 사람이 짜놓은 것을 보며 어떻게 실제로 사용했는지
어떻게 유지보수를 하는지를 보면서 알게 된것 같습니다.
객체지향적으로 프로그래밍 하는 것이 어렵다는 생각이 듭니다.
c++의 문법이나 사용하는 것에는 그럽게 어렵다는 생각이 들지 않습니다.
다만~ c++하면 객체지향을 말하는데, 진짜 객체지향적으로 짜는 것이 어렵다는 생각이 드네요~
주의에 대부분의 자바로 프로그래밍 하는 사람도 보면 객체지향적으로 프로그래밍을 하는 것이 아닌 절차적 프로그래밍을 많이 합니다.
제 생각으로는 객체지향이 어려운 것이 아니라 객체지향적으로 작성하는 것이 어려운 것 같습니다.
자바로 프로그램 짜보니까 이해하겠던데요...
경북대 학생입니다. 아직 풋내기라 이런 말 드려도 될까 모르겠는데 자바나 OOP의 개념을 하나도 모르고 C만 쬐금 아는 상태에서 자바로 하는 자료구조 수업을 듣게 되었습니다. 정말 개념이 안 잡히더군요... 코드들은 이해되던데 코드를 싸고 있는 덩어리(?)들이 희한하게 얽혀있는게 참으로 생소해서 애를 먹었습니다.
자바 배운지 일주일만에 계산기 프로그램 짜오고 그 다음주에 다항식 덧셈기 만들어오고,, 그 다 다음주에 미로 찾기 게임 만들고...ㅠㅠ 막 만들다보니 어쩔 수 없이 알 수 밖에 없어지더군요..헐~ 정말 밤샌 것이 며칠인지 계산이 안 나올 정도였습니다.
프로그래밍의 초보였던 제가 이제는 간단한 프로그램은 자바로 OOP의 개념을 도입해서 짤 수가 있겠더군요.
여기 계시는 고수님들에 비해선 아직 새발의 피겠지만요^^;;
요즘 C프로그래밍 수업을 듣는데 웬만하면 함수를 밖에서 구현해서 불러쓸려구하고... 그러네요^^
풋내기의 잡담이었습니다.
읽어주셔서 감사하구요 ... 다들 즐거운 하루 되십시오~
남으로 창을 내겠소.
밭이 한참갈이 괭이로 파고 호미론 김을 메지요.
구름이 꼬인다 갈리있소. 새들의 노래는 공으로 들으랴오.
강냉이가 익거든 와자셔도 좋소.
왜 사냐건 웃지요.
개인적으로는..
저는 개인적으로 C의 추종자입니다. 좀 심각할 정도로요^^; 그렇다고 다른 언어를 배척하거나 그렇진 않습니다. 단지 C를 좋아한다는 것이지요. 여튼, 이 상태에서 그래도 생각보단 괜찮은 방법으로 객체지향의 개념에 대해서 배운 덕에 그다지 개념 자체에 대한 거부감이나 이해도 부족은 못 느낍니다. 오히려 큰 프로젝트를 여러사람에게 나눠줄 때는 더 좋아보이기도 합니다. 물론 실제로 큰 프로그램은 아직 짜보지 못 해서 어느정도까지 통용 될 지는 잘 모르겠지만 적어도 전시회 한다고 자바로 네트웍 게임 만들면서 애들한테 적당한 클래스 단위로 분할해서 맡기고 저도 한 부분을 맡은 후에 각 클래스간의 조립은 javadoc으로 만든 문서를 활용하는 식으로 하는데 까지는 해봤습니다.
그런데 문제는 그게 아니고.. 자바나 C#으로 프로그래밍 할 때는 별 생각 없이 합니다. 잘 모르는거 있으면 책을 뒤지던가 레퍼런스를 뒤져가며 뒤적거리면서 잘 하다가도 C++을 하면... 이건 뭐 버벅거림의 진수를 보여줍니다ㅡ.,ㅡ; 왠지 C++은 복잡해 보이기도 하고 해서 거부감이랄까.. 그런게 있는 듯 합니다. 여튼 처음 객체지향을 한다면 개인적으로는 C++은 비추천하렵니다. C++이 필요하다 해도 C++은 두고 다른 객체지향 언어로 개념을 잡은 후에 하는게 좋을거 같네요. 여튼, 제 경험상 느낌은 이렇습니다.
SOrCErEr
[quote="jachin"]근데... -_-;;; 어느 시점에서 어떤
그런 책을 찾고 있습니다.
괜찮으시면 책 제목을 알려 주실수 있는지요...?
전 프로그램을 C 배우고 조금 익숙해진 후 자바를 배웠습니다. 처음 자바
전 프로그램을 C 배우고 조금 익숙해진 후 자바를 배웠습니다. 처음 자바를 배울때 엄청 고생했죠!
자바로 짠 C프로그램이라면 아실란가?
하지만 익숙해지니깐 모든걸 객체화해서 생각하게 되더라구요.(진자 객체지향적으로 잘짜여진 자바 소소 코드를 보면 감동의 물결이...)
그후 java를 학과에서 사용하지 않아서 어쩔수 없이 숙제를 하기위해서 C++를 사용하게 되었는데 이건 너무 지저분하고 난잡한겁니다.
C로 않되는거 몽땅 억지로 되게 만들어 놓은 것 같은...
하지만 조금 사용해보니 코딩의 자유이 엄청나더군요!
객체를 선언해서 객체을 연산하는 연산자도 재정의 하고...
C를 공부하시고 이제 c++로 넘어가는 분들에겐 전 C++ 공부하면서 UML을 같이 공부하길 권합니다.
객체 지향 개념과 어떻게 문제를 객체지행으로으로 처리 할것인가에 대해 공부할수 있습니다.
--------------
Burning Blue!
--------------
Re: STL을 함 사용해 보세요..
With Everlasting Passion about new Tech. and Information!
객체지향...정말 잘 모르겠습니다...정말 어떤게 객체지향인지..
객체지향...
정말 잘 모르겠습니다...
정말 어떤게 객체지향인지...
디자인패턴을 제대로 한번 공부해보고 싶네요..^^;
.
마음을 가꾸는 방법은??