C 프로그래머가 C++ 프로그래머 되기

geekforum의 이미지

C언어를 주로 사용해서 업무를 해온 사람입니다. 최근에 사정이 있어 C++로 전향(?)을 해야 하게 생겼는데 C언어에만 젖어 있던 터라 C++의 장점을 잘 살리지 못하고 있다는 느낌을 받습니다.

마치 예전에 베이직에서 C언어로 전환하면서 느꼈던 그런 감정을 요즘 절실이 느끼고 있죠. 언어의 문법 자체는 이미 C언어를 배워 두었으니 특별히 어렵지는 않은것 같은데 C언어를 사용하던 습관을 그대로 C++에서 답습하게 되니 클래스도 클래스 같지를 않고 객체지향은 완전히 먼 나라의 이야기가 되어 버렸습니다. 좀더 폼나게 소스를 만들어 보려고 하는데 웬지 마음에 안든다 이거죠.

이곳에 오시는 많은 분들도 아마 저처럼 C언어에서 C++을 새로 이용하는 과정을 겪으셨으리라 보는데 C언어 프로그래머가 제대로 된 C++ 프로그래머로 거듭나기 위해서 취해야 할 것과 버려야 할 것은 무엇이 있을까요? 각자의 코딩 스타일이라고도 할수 있을것 같은데 좀더 빠르고 효율적으로 C++ 다운 코드를 생성해 내는 프로그래머가 되기 위해서 어떻게 해야할지, C++의 특성과 장점을 잘 이용하는 코드는 어떤 것이 있는지 노하우를 좀 나누어 주시면 대단히 감사하겠습니다....

댓글

오상문의 이미지

C에서 C++로 넘어간다고 생각하면 엄청난 가시밭 길을 스스로 만드는 것이요 스스로 무덤을 파는 것입니다.

C++이라는 언어를 처음부터 배운다고 생각하세요. C에 대한 미련은 쓰레기통에 쳐박아야 합니다. C에서 사용한 프로그래밍 절차나 구조는 깡그리 지워야 합니다.

그리고 C++에 대한 문법책을 접하기 전에 C++에 대한 프로그래밍의 이해를 돕는 책을 먼저
보실 것을 권합니다(다른 분들이 책을 소개하고 있으니 생략합니다).

C++은 C의 형태적인 모습만 빌렸을 뿐이지 프로그래밍의 철학(방법론)은 완전히 다릅니다. 단순히 외모가 비슷하다고 해서 그놈이 그놈인가 하고 생각하면서 배운다면 C++은 이미 먼 나라 이야기가 됩니다.

[어드바이쭈] C 사용자가 C++ 넘어가는 방법

1. C++을 C와 연결시키려고 하지 마라.
2. C++의 철학을 이해시켜주는 문서나 책을 먼저 살펴보라.
3. C++에 대한 기본서(형식)를 보라.
4. C++ 실전 객체 지향 프로그래밍과 관련된 고급 서적이나 응용 예제를 살펴봐라.
5. 배운 것처럼 짜라! (프로그래밍).

[보너스] 그래도 안되면 돌아가라!
C++이 아닌 다른 객체 지향 언어를 접해봅니다. 즉, C와 결부시키지 못하도록 아예 형태가 다른 객체지향 언어를 습득하는 것입니다.
그런 프로그래밍 방법론에 익숙해진 후에 C++로 넘어간다면 C와의 혼란이 줄어듭니다.

[특별 보너스] 그래도 안된다면?
C++은 당신과 인연이 없습니다.
그냥 다른 언어를 배우십시오.
세상은 당신이 C++에 적응할 때까지 기다려줄만큼 너그럽지 못합니다.

이상입니다. (도움 되시길... 성공하시길!)

익명 사용자의 이미지

저같은 경우엔 컴파일러를 gw->qb->tc->vc 식으로 넘어왔습니다. 게임프로그래머가 목적이였기 때문에 항상 게임만들다가 필요하면 그때그때 배우는 방식이였죠. 그냥 하다보면 언젠가 객체지향이고 oop고 필요하다고 느껴지실때가 있을껍니다. 제가 생각하기엔 그때 배우셔도 늦지 않을꺼 같네요. : )

익명 사용자의 이미지

허억~~~ 아직 c도 잘 모르는 초보이지만 왜 c++로 넘어
가기 어려운지 잘 모르겠네요.... c++을 배워 본적이
업지만요... 아직 C도 잘 모르는 초보지만 자료구조를
배울떄 ADT를 먼저 생각하고 나서 c로 자료구조를 만들고
그다음 그데이타를 다룰수 있는 연산들을 함수로 만들잖아요. 이게 거의 그 c++에서 말하는 객체지향하고 비슷한거 아닌가요?? 저는 그래서 아 c++을 이용하면 정말로 ADT
를 표현하기 쉽겠다 생각이 들던데여?? 그리고 c++의 캡슐화를 보면서 아 C도 이렇게 데이타와 사용자가 접속하지
않는 연산함수들을 숨기면 얼마나 좋을까....
내가 만든 함수만 이용해서 데이타를 다루면 내가 생각한
범위안에서 데이타가 다루어지니 정말 좋겠는데 라고 생각되던데여... 그리고 C가 발전된 형태라서 그런지 함수인자
형에 관계없는 함수를 만들수도 있는 기능이 있던데요??
그래서 우와 C사용자가 c++을 사용하면 정말 편하게 프로그래밍 할수 있겠다 생각되던데....제가 초보라서 잘모르는건가요?? 하이튼 아직 A book on C하고 c로 쓴 자료구조론 을 반도 보지 못했지만 c++로 쓴 자료구조론을 보니 우와정말 c++을 이용하면 편하겠다라는 생각이 들어서 이글을 씁니당~~근데 이 두책은 왜이리 어려운지 벌써 본지 두달이 넘어가는데 페이지 넘어갈 생각을 못하니~~~ㅠ.ㅠ 내가 바보인가...

alphamcu의 이미지

저는 클래스를 하나의 디바이스로 생각합니다.
74hc14와 같은 장치로 생각하고 클래스를 설계하며 프로그래밍을 하죠. 이렇게 하면 구조가 매우 심플해지며 인식하기 쉽고 객체지향의 이미또한 준수하게 됩니다.

서명.

익명 사용자의 이미지

님처럼, 개체지향 코드처럼 만들기위해 고민하시는 분이라면, 금방 적응이 될것으로 믿습니다.
저도, 님처럼 C에서 자바나 ,c++로 전향했는데, 개체지향적인 코드가 나오는데 꽤 오랜 시간이 걸렸던거 같습니다. 한 2년정도???
개체지향적인 코드를 원하신다면, 디자인 패턴이나, UML같은 소프트웨어 공학도 한번 공부하시는 것도, 아주 긴요할 거 같습니다.

익명 사용자의 이미지

로그인하라는데.. 뭘해야될지..

암튼 글 잘읽었습니다.

저는 중3짜리 애송인데..

c언어두 모르구 c++두 모르겠어요,..

책사서 해보는데.. 이해가 될듯..안될듯..

학원 다녀야하나요? 뽀대나는 프로그램을

만들어보고싶습니다. 어떻게 공부하셨는지

좀 알려주세요

제 메일주소는 sinsummer@hanmail.net

입니다. 도움도는 말은 무조건 환영입니다.

까막_의 이미지

저같은 경우는 초등학교때부터 C를 했답니다 ^^

그러다가 고등학교때 Java라는 녀석을 만나게 되었습니다.

덕분에 OOP에 대한 개념을 잡게 되었지요.

그뒤 대학교 1학년때 어쩔수 없는 이유로 눈물을 머금고 C++을 하게 되었답니다. --;; 사랑이 뭔지 -_-;;

저의 경우는 그랬다는 거구요.

C도 C++도 잘 모르겠다면, Java나 Python(개인적으로 추천)을 해보시는 것도 좋을듯 싶습니다.

ps. 학원은 컴파일러 구하러 다녔는데.. 요즘은 Cygwin같은게 잘 나와서 컴파일러 구하러 학원갈 필요는 없겠더군요 ^^
--
^^

Let's be engineers!

까막_의 이미지

참...

프로그래밍 언어를 배우는 가장 쉬운방법중에 하나는 뭔가 짜보는거 랍니다.

저같은경우는 삼국지2 세이브파일 에디터를 흐흐흐 ^^
--
^^

Let's be engineers!

익명 사용자의 이미지

그 나이때라면 흥미를 잃지않고 계속하는게 중요하고요.

HTML, Java Script같은걸로 쉽게 눈에 들어오는걸로 몇번 놀아보다가
Python같은 걸로 감을 잡으라고 충고하고 싶네요.

익명 사용자의 이미지

국어, 영어 ,수학, 물리, 화학, 윤리, 역사, 지구과학, 체육

젖냄새가 몸에서 빠지기 시작하면 시작해라..

익명 사용자의 이미지

재밌는 분이시군요. 이런 분만 계신다면 구경하러라도 오고 싶어 질것 같습니다.

익명 사용자의 이미지

..겁나시나보죠?

익명 사용자의 이미지

닥쳐라. 어린애한테 도움은 못 줄망정 옆에서 보기 참 민망하다.

같이 가려진 답장이나 되자.

익명 사용자의 이미지

많이 짜보는게 좋을 거 같아요.

그 시기엔 복잡한 이론보단 빠른 결과물로 프로그래밍에 재미를 붙이는게 더 도움이 된다고 생각합니다. :)

익명 사용자의 이미지

자바를 배우고 다시 C++을 바라보면 많은 도움이 될 겁니다.

익명 사용자의 이미지

자바를 배우고 나서 C++을 배우는건..

좀 힘든일입니다.

깔끔한 자바소스보다가..

c++소스보면 눈돌아가거든요.

까막_의 이미지

음.. 전 더 쉽던데요? :)

C++보다는 Java의 OOP가 접근하기가 더 쉬웠던데다...

Java에서의 코딩습관이 C++에서도 남아 좀더 쉬운 작업이 되었었다라는 ^^
--
^^

Let's be engineers!

익명 사용자의 이미지

에에. 그런 눈돌아가는 소스를 보면서 공부하는 것이 더 힘들지 않을까요;

-Rica

익명 사용자의 이미지

C언어로도 객체지향프로그램밍을
할 수 있다는 거고,
반대로 C++로도 객체지향이 아닌 코드를
얼마든지 만들 수 있다는 거지염^^

진짜 순수한 객체지향을 원한다면
구현하고자 하는 시스템의 분석/설계가 먼저
완벽에 가깝게 객체지향으로 시작되어야
C++로 객체지향 코딩을 할 때 문제가 없을걸요....

익명 사용자의 이미지

언어에 대해 나름대로 배태랑이고, 세계 Top 그룹과 어께를 견줄만한다고 스스로 자부하며 살고 있는 사람입니다.

가끔 스트로스트럽의 C++ 책을 읽으면 읽을 수록 뭔가 새록새록한 느낌이 들듭니다.
이 책은 단지 C++을 구문을 말해주려는 것이 아니라 C++을 철학을 일깨워 줍니다.

아무리 Class를 사용하고, C++에 맞게 코딩을 하지만 어딘지 모르게 C 느낌이 납니다. 이건 저 뿐만아니라 절차적 언어에 익숙한 모든 프로그래머가 그러할 것입니다.

단지 구문만 C++의 것을 사용하고 그냥 Class좀 사용한다고 어느날 갑자기 C++ 프로그래머가 되지는 않습니다.

많은 시간을 투자해서 OOP적으로로 설계를 한다고 하는데도 프로그램이 복잡해지면 복잡해질수록 OOP 느낌은 온데간데 없습니다.

일단은 하향식 설계의 버릇을 완전 제거해야 하는데 이게 말처럼 쉽지가 않습니다. 즉 대개 일단 큰 틀을 만들어 놓고 만들다가 필요한 부분이 생기면 그때 그 부분을 만드는데 이렇게 나가면 OOP는 집어쳐야 합니다.
물론 이렇게 만들면서도 큰 틀을 수정하고 나중에 마치 OOP인양 코드를 재구성을 할 수는 있습니다만 아주 쓸데 없는 짓이지요. 눈가리고 아웅하는 짓거리와 비슷.

그런데 상향식 설계는 말처럼 그리 쉬운게 아닙니다. 추상적인 모양새 만드는 것부터가 쉬운 일이 아니지요.

아직도 갈 길이 멀기에 더 말하면 무식이 들통이 날 것 같군요.

암튼 저의 커다란 프로그램이 각각 Class로 구성되어 있고, 각 Class들이 상속관계가 분명한 그런 프로그램 한번 만들어 보고 싶습니다.

익명 사용자의 이미지

refactorying을 배워보세요.
OOP가 더 쉽다는 걸 느낄 수 있을 겁니다.

익명 사용자의 이미지

세계 탑 그룹의 실력자가 무식이 들통나면 어떡해요~ -0-

doomsday의 이미지

글쎄요 상향식으로 설계를 시작할 경우 오히려 오버엔지니어링에 구조도 뒤죽박죽 되는 경우도 많더군요. 그렇다고 하향식이 정답 아니지만 적절한 큰 틀을 정의해 놓고 상향하는 방식으로 해야 깔끔하게 뭔가 만들어지던 것 같습니다.

익명 사용자의 이미지

선배님들 질문하나 드릴께요..
전공을 하고있긴하지만 참부끄럽기 짝이없는 질문인데,
함수포인터 예제를 보면 이해가 되긴 하지만 그것이 어느정도의
재사용성과 모듈화를 보장한다는거에대한 확신을 가지는 그런
예제를 한번 보여주셨으면 합니다. 커널소스가 관련 syscall
을 부르는 구조가 그렇게 되어있다고 들어서 새삼 충격을 먹고
다시 K&R책도 한번 뒤적거려보고 뉴스그룹도 뒤적거려보고 하고
있는데, 제가 구할수 있는 범위내에서는 그저 퀵소트에 인자들어간
정도 밖에 모르겠습니다. ㅜㅜ
비슷한 코드의 중복 방지는 일반함수로도 어느정도 가능하지 않은지..
고수님들 가르침을 부탁드릴게요..

익명 사용자의 이미지

리눅스 커널을 분석한 hanos.pdf라는문서가 있어여

거기서 4장 가상 파일 시스템(VFS)을 보세여

http://linuxkim.com/board/read.php?table=pds&no=125&PHPSESSID=9a539cff0bb414796b8a9587272dfa34

위에 가시면 받으실 수 있어여

노정민의 이미지

예제가 흔하지는 않지만 아주 없지는 않습니다.

가령, 네트워크 프로토콜의 경우 핵심은 전문 개발회사에서 전부 만듭니다.

이때 그걸 사서쓰는 어플리케이션 개발자들이 개발할 부분만 구조체로 잡고 그안에 함수포인터로 프로토타입을 지정해서 직접 개발하도록 하는 방식입니다.

이렇게 하면 API가 간단해지고, 통일되는 효과가 있습니다.

익명 사용자의 이미지

C++을 사용하신다면 함수 포인터 대신에 functor나 가상함수를 이용해 보시는 것도 좋은 방법같습니다.
저두이젠 API Callback할 때 빼곤 함수 포인터는 안쓰든요.

그리구 설계만 잘하시면 중복 없이 깔끔해 질 수도 있구요.
안되면 최후엔 템플릿이라는 극약처방도 있지 않습니까 ? :-)

익명 사용자의 이미지

함수포인터... 제가 수준이 안되서 그런지 몰라도 웬만해서는
말리고 싶네요. 저도 테이블에 함수 주렁주렁 달아서 잘 써먹기는
하지만, 대신 디버깅은 접어야 합니다.

함수 포인터를 쓴다는 것은 코드의 유지보수를 포기하겠다는 것과
마찬가집니다. 자신만의 매력적인 코드를 만들지, 남들과 공유할
코드를 만들지는 때와 장소를 잘 판단해서 선택하시기 바랍니다.

어려운것은 기술이 아니라~ 문서화와 아이디어의 공유니까요.
이상 허접~이 답변해 드렸습니다.

익명 사용자의 이미지

어, 왜 함수 포인터를 쓰면 유지보수를 포기한다는 말이라는 거죠?

오히려 caller와 callee의 역할 분담이 분명해져서
프로그램이 깔끔해지고 이해하기 쉬워지기도 합니다.
함수 포인터를 써서 여러 함수를 받아들일 수 있도록
만든다는 것은 그만큼 정리가 잘 되어 있어야 가능한
것이기도 하거든요. 얼렁뚱땅 뒤섞어서 스파게티 코드를
만들어놓으면 함수 포인터 못 쓰거나 써도 의미가 없습니다.

익명 사용자의 이미지

함수의 포인터를 자신이 직접 코딩하고 테스트하면 큰 문제가 안됩니다.
남이 그것을 작성하고 자신이 그 부분에 새로운 기능을 추가 해야 할때
문제가 생기죠. 제가 만약 해당 팀의 매니저라면 함수의 포인터는 풀어서
switch로 만들어라라고 하겠습니다.

분기하기전에 브레이크 포인트를 걸고 어떤 함수로 분기하고자하는지
알고자 할때는 너무 어렵죠. 예를 들어 변수 a라면 값을 바로 알아 낼
수 있지만, 함수 포인터 p라면 그 값이 어떤 함수를 가리키는지 알 수가
없죠. 이럴때는 분기 기능한 모든 함수에 브레이크 포인터를 거는 수밖에
없거든요.

더구나 해당 기계가 임베디드 기기면 브레이크 포인트를 걸수도 없으니
잘 굴러가기를 기도하는수 밖에 없죠.

익명 사용자의 이미지

글쎄요 함수 포인터를 쓰지 말라구요?

커널 소스에서는 그거 안쓰면 유지보수가 안되는데 ? -_-;

corba의 이미지

OOP는 갈 길이 멉니다만 C++은 OOP가 전부만은 아니라고 생각합니다.

C++은 'Better C'이기도 한데요.
C++의 특성을 사용하면 코드를 작고 깔끔하게 만들 수 있습니다.

자주 사용하는 간단한 예로 텍스파일 읽어오기가 있는데요.

ifstream ifs("test.txt");
string buf;
while (getline(ifs, buf, '\n'))
{
//buf에 있는 라인데이터 처리
}

이런 식으로 짧고 간단해진답니다.

string만 하더라도 C의 char *보단 다루기가 훨씬 낫거든요.
그리고 이제 STL 없이는 귀찮아서 프로그램 못 짤거 같아요. ^^;

cedar_의 이미지

저도 동감... OOP에 지나치게 얽매이실 필요는 없습니다.

C++은 OOP언어라기 보다는 멀티 패러다임 언어지요.

구조적 프로그래밍(SP; Structured Programming),
객체지향 프로그래밍(OOP; Object-Oriented Programming),
일반화 프로그래밍(GP: Generic Programming),
위 세 가지를 경우에 따라 입맛대로 골라서 쓰면 됩니다.

STL은 사실상 OOP와는 거리가 멉니다.
상속과 가상함수를 전혀 쓰지 않고,
컨테이너(데이터)와 알고리듬(메소드)를 오히려 분리시켜서
캡슐화와는 반대로 가고 있죠.
즉, STL은 GP를 지원하기 위해 OOP적 요소를 상당히 희생한 라이브러리입니다.

템플릿에 대한 개념을 확실히 이해하고 계시다면,
지금 당장 STL을 공부해보실 것을 권합니다.

참고로,
텍스트 파일 전체의 데이터를 하나의 string에 전부 로딩하는
2줄 짜리 코드를 소개하지요. (출처: Effective STL)

ifstream ifs("test.txt");
string buf((istreambuf_iterator(inputFile)), istreambuf_iterator());

cedar_의 이미지

허걱... 코드에 오타입니다.
inputFile을 ifs로 고치세요.

ifstream ifs("test.txt");
string buf((istreambuf_iterator(ifs)), istreambuf_iterator());

익명 사용자의 이미지

그럼 한줄로도 되겠는데요? :-)

string buf(
(istreambuf_iterator(ifstream("test.txt")),
istreambuf_iterator()
);

// 보시기 편하라고 줄은 일부러 나눴습니다.

익명 사용자의 이미지

좀 주제와는 벗어난 이야기입니다만, 짧게 줄이는걸로 하자면 perl이 무시무시하더군요-_-; 뭐 거의 암호화 수준... bash와 cat가 있다는 가정 하에
ifs = `cat filename.ext`;

corba의 이미지

헤스켈도 암호화에 있어선 타의 추종을 불허하는 거 같습니다.

이 경이로운 퀵소트의 구현을 보세요... -.ㅜ

qsort [] = []
qsort (x:xs) = qsort [y | y<-xs, y<=x] ++ [x] ++ qsort [y | y<-xs,
y>x]

익명 사용자의 이미지

http://www.haskell.org/aboutHaskell.html에 가니 설명을 잘 해두었네요.
Haskell을 보다 보니 현재로서는 LISP와 차이점을 못느끼겠군요.

++는 증가 연산자가 아니라 역시 추측대로 "concatenation"이고,
(x:xs)는 Pivot이 x이고, 그 나머지들은 xs라는 의미.
"|"는 "such that"이고 "<-"는 "drawn from"입니다.

|는 수학에 사용하는 집합 연산자와 의미가 같군요.
{y|y<=x, y is element of set xs} 라는 수학 표기를 Haskell로 나타내면,
[y|y<=x,y<-xs]가 됩니다.

익명 사용자의 이미지

허걱!
이거 Prolog나 ML 보는 기분듦.
둘의 짬뽕같기도 하고.

하나만 물어 봅시다.

Data 넣고 호출해서 Sort된 Data 출력하는 그런 부분까지 볼 순 없을까요?

corba의 이미지

저의 허접실력이 드러나지만 어쩔 수 없군요... -_ㅡ;

텍스트파일을 입력 받아 정렬한 뒤 화면에 출력하는 예제입니다.

저도 아직 헤스켈을 배우고 있는 단계니 소스가 허접해도 용서해 주시길...

qsort [] = []
qsort (x:xs) = qsort [y | y<-xs, y<=x] ++ [x] ++ qsort [y | y<-xs, y>x]

qsmain f = do
s <- readFile f
putStr (flow s) where
flow = unlines.qsort.lines

이것이 함수들의 소스구요

qsmain "data.txt"

일케 실행하면 화면에 소트된 결과가 나온답니다.

corba의 이미지

이런 탭이 사라져서 이상하게 됐네요. --;
탭이 안되서 언더바로 대체하죠.
다시~~~

qsort [] = []
qsort (x:xs) = qsort [y | y<-xs, y<=x] ++ [x] ++ qsort [y | y<-xs, y>x]

qsmain f = do
____s <- readFile f
____putStr (flow s) where
________flow = unlines.qsort.lines

익명 사용자의 이미지

크~~
보통의 언어는 좀 보다 보면 감이라는게 오는데, 이건 대체 무슨 철학으로 만든건지 감이 잘 안옴.

암튼 취미꺼리가 하나 늘었음.

노정민의 이미지

C에서 코딩하는 습관이 중요하다고 생각합니다. C를 사용해서도 C++ 만큼 훌륭한 모듈화 프로그램을 작성할 수 있습니다. 구조체와 함수포인터, static 변수를 사용하면 나름대로 훌륭한 클래스 모듈이 됩니다. 물론 그안에 같은 형식으로 생성자와 파괴자를 만들어야 겠지요.
그리고 매크로를 잘 사용하면 훌륭한 템플릿을 만들 수 있구요. 제가 본 소스중에 C에서 ##을 이용해서 1 line 매크로로 linked list와 hash, vector 템플릿을 구현한 소스를 보니까 정말 환상이더군요.

익명 사용자의 이미지

헉 무슨 얘긴지 ㅠ.ㅠ 힌트나 예문이라도 좀 달아주세여.

## <--- 이게 뭔지도 몰른다는..

익명 사용자의 이미지

##를 이해한다는 것은 c언어를 정말 깊이 판 경우입니다.
보통의 c책에는 잘 없고, 오리지널 c책(K&R)에 보시면
한족 귀퉁이에 짱박혀 있습니다.

익명 사용자의 이미지

딴지거는 것은 아니고,이해할수 없군요. ## 프리프로세서문을 이해하면 정말깊이 판경우? 어떤의미인지요?

익명 사용자의 이미지

여러 책을 그것도 구석구석 쳐다보지 않았다면,
##를 책애서 보지 못했을 거라는 말이 아닐까요 ^^;;
저도 C 책은 많이 봤지만 ##를 설명해논 책은 거의 못봤네요..

익명 사용자의 이미지

저 같은 경우에도 처음에는 C++ 부분을 보다가 덮어버리기 일쑤였습니다. 클래스 없이도 잘 되는데 왜 이렇게 해야 하나 싶어서요... 그런데, 자바를 공부한 다음에는 아하! 싶었습니다. ^^
다른 프로그램을 보는것도 도움이 되지 않을까 싶네요.

익명 사용자의 이미지

저도 처음 OOP를 접하고 나서는 무척 혼란스러웠습니다.
OOP 계념도 그렇지만, C 스타일에 익숙해져 있다보니..
저 같은 경우는 C에서 C++로 넘어가지 않고 JAVA를 먼저 한경우라 더욱 이해하기가 힘들었지요.

자료구조의 발전이랄까..
배열(포인터)
(베이직, 포트란..)
|
V
구조체
(C)
|
V
클레스
(C++, JAVA, Python..)

이런 과정을 생각해 보니까 어떻게 사용해야 할지 이해가 쉽더군요.

저 같은 경우는
경력이 쌓여 갈 수록
점점 설계의 중요성에 대해 뼈저리게 느낍니다.
여기서 C에서 C++로 나아가는 방향에 대해
서로의 팁이나 모 그런거 이야기 하는거에 귀 기울이기 보다는 밑에 많은 분들이 지적하시는것 처럼
가장 중요한 부분인 디자인 패턴에 관해 차근차근 공부해 보세요.
예로부터 지식의 깊이가 앝을수록 말이 많고,
잡지식만 많은 법입니다.

코드가 맘에 안든다.. 라는거 자체가 문제의식의 시작.
발전의 시작 단계라 할 수 있습니다.
(문제를 인식하지 못한다면 발전도 없습니다.)
잔지식으로 가득찬 코드보다
깊이가 있는 코드, 개발자의 소신과 철학이 담겨있는
코드를 창조해 내도록 합시다.
(저도 그러고 싶고요.)

참고로 스타일에 대해 가장 쉽고 빠르게 배울수 있는 방법은
좋은 소스를 구해 직접 분석하는 일입니다.
첨엔 막막해도 조금씩 해나가면 퍼즐 푸는거 같기도하고,
재미가 쏠쏠하답니다.
리눅스에 들어있는 소스코드들은 세계에서 꼽히는 프로그래머들이 만든 코드라는거 잘 아시죠?
(정말 어쩝 이렇게 깔끔하게 코드를 뽑았을까.. 탄성이 나옵니다.)
그럼..

익명 사용자의 이미지

경험상 C++의 객체지향적인 성격이 큰 도움이 되지는 않더군요. OOP의 장점으로 익히 알고 잇는 점이 여러가지 현실적인 문제로 살아나지 않네요. 라이브러리 형태로 잘 만들어 놓으면 모를까 그냥 소스를 쉽게 재사용하는 장점은 존재하지 않는 것 같습니다.

혼자서 작업할때는 자기가 만든 소스니 할많ㄴ데 여럿이 할 경우는 특히 그렇더군요.

익명 사용자의 이미지

제 생각에도..C++가 좋긴 한데..

클래스를 잘 만드는 사람이 드물다는 것이.........

문제라고 생각되는군요.....-.-

그래서...C++하면 상용클래스 가져다 쓰는 법으로..바뀐것 같기도 합니다..

익명 사용자의 이미지

C언어로 자료구조를 정의할 때 struct를 사용하고
구조체에 정의된 변수들을 함수에서 원하는 바데로
조작하지요.
다른 말로 C언어는 자료정의와 이를 처리하는
함수가 분리된 절차지향언어(?)라고 할까...

C++에서 class는 C에서 struct구문과 비슷한 면은
struct처럼 class안에 변수들을 정의하지만 ,
아울러 변수들를 처리하는 메쏘드(함수)라는 것도
묶어서 정의하는 것이 struct구문과 다른 점이지요.

또한 순수한 객체 지향 개념에서
class는 상속이라든지하는 특성등이 있어서
잘 이용하면 객체지향의 진수를 알 수 있지여^^

익명 사용자의 이미지

선무당 사람잡는 말씀...

SungHo_의 이미지

선무당II... :-)
C++의 개념을 이해하기는 어렵고 일은 해야겠고...
어쩔 수 없이 타협을 본게 위에 글 쓴사람처럼 이해하고 넘어가자
였죠.
필요하면 쓰고 이해는 나중에... :-)
사실 원리부터 이해를하고 그것을 응용해야 보기에 어울리지만
현실(제경우)에서는 힘들더군요.
그래서 아예 처음에는 'class는 struct에 함수가 추가된것이다'라고
이해를하고 넘어갔고 이후에 어느정도 C++이 눈에 들어올 때쯤에야
C++이 무서운 놈이군... 이라는 것을 깨달았죠.
C++을 쉽고 훌륭하게 가르쳐주는 스승이 있다면 C++이란 무엇인가를
먼저 배우는 것이 좋고 그렇지 않고 물어볼 스승이 없는데 C++을 알
고 싶다면 우선은 자신이 이해할 수 있는 방법으로 이해를 하고 나중
에 깊이 있게 배우는 것도 좋은 방법이라고 생각되네요. :-)

이상... 사람 많이 잡은 선무당이였습니다. :-)

익명 사용자의 이미지

흠...저는 좀 다른 방법과 책을 권해드리겠습니다. 서점에 가면 "C프로그래머가 C++프로그래머 되기" ... 와 비슷한 이름의 책이 있습니다. ^^ 꼭 이 토론과 비슷한 이름이지요? 정확한 이름이지는 않고 비슷한 이름입니다. 죄송하지만, 정확히 기억이 안나서 ^^;

처음에 이 토론방에 들어오기 전에 그 책에 관해서 이야기 하는 줄 알았거든요..오라일리 출판사 책이었던 것 같은데..역시나 정확히 기억안나는 군요.. 서점 갈때마다 대여섯권씩 훑어보고 다니기에...죄송..

어쨌든 첨은 그거고, 다음은 "OOP in C"에 관한 인터넷 문서 입니다. 정확한 이름은 "Object Oriented Programmig in C"이고 여기 kldp나 인터넷을 찾으면 금방 찾을 수 있는 흔한 문서 입니다.

C로 객체지향을 하고 싶을 때 읽는 문서이지만, 객체지향을 어떻게 구현하는지를 알수 있습니다. 예전에 C++컴파일러가 없을 때는 C++소스를 C로 바꿔서 컴파일을 했던 만큼, 그 기본 원리는 C에 있구요, 간단한 문서로 Wonder of GLib이라는 문서는 GLib의 기본 함수 설명 처럼 되어있지만, C를 이용해서 컨테이너들을 만드는 방법에대한 기초설명이 있습니다.

다 쉬운 문서들이고, C와 C++을 다른 언어처럼 생각하는 분들은 한번쯤 읽을 만한 문서라고 생각합니다.

음..글이 길어지지만, casting을 이용해서 어떻게 구현하는지...컴파일러를 속이는 간단한 방법으로 얼마나 많은 융통성(이걸 이용해서 상속이라는 개념을 구현하지요 ^^;)을 가지는지 알수 있구요, C++에서 지원하는 여러가지가 왜 이렇게 지원하는지 알수 있습니다.

흐.. 잡소리가 길군요.. 어쨌든
C프로그래머가 C++프로그래머 되기
라는 책과
OOP in C
라는 문서를 추천합니다

익명 사용자의 이미지

C 프로그래머를 위한 C++ 프로그래밍, 한빛미디어(오라일리)

이거 외에도 읽을 문서는 많습니다. C에서 C++로 넘어가기란 완전히 가시밭 길이죠-_-; 레퍼런스를 원한다면 다음의 사이트도 나름대로 유용합니다.

http://www.cppreference.com/

keizie의 이미지

wonder of glib이라는 문서를 어디서 구할 수 있을까요?
그리고 비슷한 식으로 gtk의 pseudo-OOP를 설명하는 문서도 있나요?
--
from [ke'izi] : where is [r]?

익명 사용자의 이미지

익명 사용자의 이미지

제가 씨언어로 처음 테트리스를 짤때 무게게 복잡하게 짠적이 있습니다.
변수가 너무많아서일일이 기억 하기도 어렵고,
쓰레기 변수들도 많아서, 정리 하기도 어려웠죠.
아무튼 테트리스는 잘 됐는데,
전 웬지 찝찌름 했습니다.
이때 소스를 알기 쉽게 표현하는 방법을많이 생각하게 되었는데, 전역변수 같은거 쓰면 무지 편하지만,정말 조심스러웠고, #define 문으로 정의하기, 구조체 사용하기 등등. 으로 소스를 가능한 읽기 좋게 만들고 있었는데..
이것 만으로는 어딘가 코딩하는데 답답하다는 느낌을 받았을때,
C++을 만나게 됬는데, 이거 처음문법을 봤을때,
왜 이렇게 써야 하는지 아주 쬐금은 이해 할수 있었는데,
소스가 길어지다보면, 누구가 만나게 되는 것들을 해결 할수 있을것 같더라구요.
책을 다 이해 할수는 없었지만, 제가 필요한 것들만 최대한 이용하려고 하니, 이런 구조가왜 필요한지 차츰 이해가 가더군요.
암튼 제가 하고 싶은 말은 프로그램을 많이 짜다보면, 필요성이느껴질때가 있고,그전까지는
씨언어로도 충분하다고 봅니다.

거대한 프로그램을
씨언어 만으로, 에러없는 코드를 작성한다면, 정말 대단한 실력자일 것입니다.
이런 사람이 객체지향을 알았을때 더욱더 막강해질 것이라고 생각해요.

스카리의 이미지

어려운 문제입니다. :(
저역시 C만 고집하다가 드디어 C++과 만나게 되었습니다!!
디자인패턴, 리펙토링은 읽어보지 않았습니다만,
Meyer 씨의 책들과 기타 여러 C++ 관련서적을 탐독하면서
C++이란 녀석을 이해해보고자 했습니다.
하지만 죄다 뜬구름 잡는 소리로 들리고, C의 관점에서 C++을 이해할려고 들더군요;;

C와 C++은 "완전히" 다른언어고
(비록 많은 C++ implementation 이 C 구문을 지원하지만..)
그렇기 때문에 C 라는 녀석은 완전히 잊고 새로운 마음으로
C++이라는 과제에 도전하는게 옳다고 생각합니다.

책은 그렇게 많은 도움이 될 것 같지는 않고,
많은 시간을 투자해서 OOP 감각을 익혀야 하겠지요.

저는 이렇게 생각합니다만, 아직도 제 .cxx 코드에
class는 하나도 구현되어 있지 않습니다. :-p
매크로 대신 inline 펑션을 사용하고, new, delete 연산자.
for (int i=0; i < n; i++) 처럼 중간에 선언하는 변수
오버로딩 정도....

알맹이는 버리고 껍데기만 먹고 있군요 -0-

언제쯤 알맹이의 달콤한 맛을 볼 수 있을지..

꼬리) 아주 개인적인거지만 자바, C++ 코드는 왜 이렇게 못생겼을까 생각합니다. ;;
그에 반해 C코드는 얼마나 아름답습니까?
BSD 커널소스코드... 예술입니다.;;

그래서 저는 C를 좋아한다고 할까요? 핫; 핫; 핫;

익명 사용자의 이미지

클래스를 안 쓴다니... 오히려 잘 하신겁니다.
말씀하신 Effective C++에 보면 string 클래스 하나 만드는데도 얼마나 많은
잠재적 버그가 존재 할 수 있는지 보여 주는 예가 여럿 있습니다.
다시말해 절반짜리의 만들다만 클래스는 안만드니만 못합니다.

함수는 급한대로 그때그때 검증이 가능하지만, 클래스는 검증하는데
너무나 많은 시간과 예제가 필요하죠. 반대로 너무나 단순한 클래스는
만들어봤자 직접 코딩하는게 더 빠르고요.
oop언어에서는 검증받은 클래스를 쓰는 것만으로도 충분하다는 것이
개발을 하면서 느낀 저의 개인적인 결론입니다.

익명 사용자의 이미지

리팩토링을 해보세요... :)

익명 사용자의 이미지

리책토링은 구겨진 코드를 다시 펴 놓는 공학 아닌가요?

말씀하시고자 한것은 디자인 패턴이 아닌까요?
물론 디자인 패턴은 만능이 아니죠.
어느정도의 적재적소가 있을 뿐이죠.

GoF말씀중에 "디자인 패턴을 너무 믿지말라"라는 경구가 있지요.

익명 사용자의 이미지

패턴 얘기는 아니구요.

혹시나 반쪽짜리 클래스를 만드시면 리팩토링을 해보시라는 거죠 :->

익명 사용자의 이미지

들어가나요 ?

익명 사용자의 이미지

제 짧은 생각으로 OOP에서 가장 중요한 것은 상속같은 class 사이의 관계입니다.
예를 한번 생각해 볼까요?
동영상 player를 만들고 있다고 생각합시다.
그럼 가장 간단한(?) 동영상 codec인 MPEG1을 지원하는 player를 우선 만들어서 테스트하는 것이 좋겠다는 생각이 들었습니다.
그래서 MPEG1 codec을 들고 와서 이리저리 닭짓을 해서 file을 열고 볼 수 있도록 만들었네요.
오 잘된다는 것을 알고 그럼 MPEG2 codec을 지원해야 겠다고 생각하고 모든 소스를 들고와서 작업을 하려고 보았더니, 이런 파일 열고 MPEG1 codec이랑 interface했던 소스를 그대로 쓸 수 없네요.
이럴 줄 알았으면 함수 포인터등을 이용해서 코딩해 둘걸이라는 후회와 함께, 그래도 적당히 소스를 바꾸어서 지원하도록 하자고 결정하고 다시 코딩해서 성공을 했습니다.
그러자 윗사람이 요즘 divx하고 mpeg4가 많은데 그것도 지원하자고 해서 또 생각해 보았더니 으아~ 또 닭짓을 계속해야 하는 구나.
역시 함수 포인터를 이용했어야 했어란 후회와 함께 또 닭짓을 하겠죠.

결국 닭짓이 계속되는 이유는 무언가 통일된 interface(C언어에서는 함수포인터 등)이 없어서라는 것을 깨닫게 됩니다.
그런 것을 처음부터 잘 생각해서 코딩했으면 계속되는 닭짓은 없었겠죠.
이렇게 interface를 통일하고 싶을때 C 언어의 함수 포인터등을 생각하는 것처럼 C++에서는 Class의 상속 등을 생각하게됩니다.

C++이 C보다는 interface에서 많은 유연성을 준다고 볼 수 있습니다.
"바나나, 사과의 superclass는 과일이다."라는 실제 일과는 전혀 상관없는 예제를 백날 들여다 봐야 아무 소용없다는 것이 제 생각입니다.
처음 부터, 이 프로그램을 작성하는데 계속 업데이트가 필요한 부분이 어떤 부분이고, 그것들을 위해 어떤 어떤 class가 존재해야 하고 그 class사이의 관계가 이렇게 되면 이런 면이 좋아진다는 식의 생각이 필요합니다.
그런 갖가지 class사이의 관계들을 일목 요연하게 정리해 놓은 책이 Design Patterns라는 책이죠.
아무 생각없이 읽으면 머리에 남는 건 전혀 없죠.

결론은 처음부터 열라 생각을 많이 해야 한다.
대신 열라 생각을 많이 하면 당연히 mpeg1만을 play하는 player를 만들때에는 일의 생산성이 조금은 저하된 듯한 느낌이 듭니다.
숙달된다면 빨라지겠지만...적어도 저는 그렇습니다.

익명 사용자의 이미지

Refactoring 방법대로 따르자면 필요할 때 하면 되는 겁니다.
가장 처음에는 mpeg1만 지원하니까 확장에 대한 생각을 안하고 mpeg1만 만들고..
mpeg2를 만들 때 둘 다 지원하는 인터페이스를 만들면 됩니다.
처음부터 design pattern을 적용할 이유는 없지요.
확실히 예측을 할 수 있고 그 세세한 인터페이스 구현에 대해 빠른 시간 안에 알 수 있다면 적용해도 되겠지만요.
대부분의 경우 하나 만들어 놓으면 다른 걸 붙이자고 요구하는게 정상이지요.
그럼 그 때 만들면 됩니다. 프로그래머가 점장이도 아니잖아요..

익명 사용자의 이미지

OOP가 당장 와닿지 않아도 STL이나 개선된 문법 등, C++은 C와 다른은 점이 많습니다.
그런것들을 익혀가셔도 좋을거 같구요.

C스타일 프로그래밍에서 OOP로 전향하는 것은 그렇게 쉬운 일은 아닌거 같습니다.
저를 비롯한 제 주위의 많은 사람들이 그것에 많은 시간을 투자했고, 지금도 하고 있습니다.

OOP를 익히시려만 차라리 업무 외 시간에 smalltalk나 java같은 언어로 장난감 같은걸 만들어 보시는 것도 좋을거 같습니다.
C++을 사용하다 보면 프렌치카페에 많이 빠지더라구요... ^^;

아 그리고 역시 그 두권의 책은 꼭 읽으세요.

익명 사용자의 이미지

두 권의 책이란게 뭔가요? 저는 못 찾겠는데..

익명 사용자의 이미지

Design Patterns Elements of Reusable Object-Oriented Software
Refactoring
이 아닐런지요;-)

익명 사용자의 이미지

동감입니다. 반드시 2권 모두 읽어보시고,
그리고, 개발방법론에 관한 책들을 반드시 읽어보길 바랍니다.

익명 사용자의 이미지

간단히 말하면 C++은 라이브러리를 개발하는 것에 초점을 맞춘 언어입니다. C는 어플리케이션을 개발하는 것에 초점을 맞춘 언어이지요. C++을 어플리케이션을 개발하는데 초점을 맞추고 그렇게 생각한다면 접근하기가 쉽지 않을겁니다.

익명 사용자의 이미지

첨엔 알고나면 간단하지만, 객체란것을 깨닫는것이 힘들더군요.
안다는것과..깨다는것은 천지차이..

익명 사용자의 이미지

초보자들에게서 흔히 나타나는 현상인데 OOP언어를 배운다고 OOP로 코딩을 해야한다고 믿는 OOP과잉 증세라는 것이 있습니다.

세상에... HelloWorld를 같은 간단한 코드도 클래스로 만들어서 쓰더군요. 그런 클래스는 결로 바람직하지 않은데.

디자인 패턴이 만능은 아니지만,
디자인 패턴을 조차도 제대로 이해하지 못한 상태에서 만든 클래스는 오히려 프로젝트를 말아먹기 쉽상이죠.

앞에서 예를든 HelloWorld의 경우도 만약 10개국어를 동시에 지원해야 한다면 각 국별로 별도의 클래스를 만들어야 하는데, 잘못하면 일관성을 상실하게 되죠. 예를 들어 이럴때 각 클래스가 동일성을 유지하기 위해 Factory Pattern을 써야 하는데, 글쓴이는 이런정도의 내공을 가진 것은 아닌것 같더군요.

그냥 구조화 언어식으로 코딩하다가 내공을 쌓아서 천천히 객체지향언어로 건너가시기 바랍니다.

익명 사용자의 이미지

당연한 말이지만 책을 많이보시는 것도 상당한 도움이 될 것이라고 생각합니다.

기본적인 문법을 아시는 상태라면

Design Patterns Elements of Reusable Object-Oriented Software
Refactoring

이 책을 보시면 OOP에 대한 통찰력을 키우실 수 있을거라고 생각하구요

Effective C++
More Effective C++
Effective STL

이 책들을 보시면 C++ 프로그램을 짜면서 해서는 안되는 일과 해야만 하는일, 그리고 쉽게 지나쳐버리기 쉬운 점들을 느끼실 수 있을 겁니다.

WidowMaker의 이미지

effective C++은 저에게 이런걸 가르쳐 주더군요

'생각없이 그냥 짜고 싶은데로 짜자.. ㅡㅡ;'

너무나 심오한 책이었습니다.

익명 사용자의 이미지

참고로 Effective C++의 경우는
C++의 한계와 숨어있는 결함을 극복하는 법을 가르쳐 주는 동시에
C++이 OOP언어로서의 결함을 속속들이 가르쳐 주는 책이죠.

C/C++게발자로써
c++은 바다물처럼 마시면 마실수록 갈증이 더 생기는 이상한 언어죠.
개인적으로 미련과 원한을 같이 느끼는 언어죠.

익명 사용자의 이미지

눈 딱감고, 이글을 실천해보세요

익명 사용자의 이미지

개체지향이라는 개념을 이해하는 것이
매우 중요하다라는 생각을 했습니다.

그리고,
제가 지금까지 경험으로 느끼는
개체 지향의 가장 중요한 점은
코드의 재사용에 촛점을 맞춘
개발이라는 점이었지요.

어느 누구던지,
클래스의 전형만 보면,
바로 사용할 수 있는 인터페이스설계.

C보다 C++을 필요로 한다면,
바로 이것 때문이겠지요.

익명 사용자의 이미지

예! 개체지향의 중요성은 아무리 많은 소스를 보유하고 있더라도 거기에

덪 이어 계속 혼자서 계발해 갈수 있는 장점이 잇죠!

천라인이라도 구조화 및 객체지향를 제대로 구현하지 못한 소스는 다시 보기

도 싫고 눈깔돌리며 시간낭비밖에 되지 않습니다. 무언에 객체지향를 지향

한다면, 그 의미만 파악하면 아무리 소스가 수만줄 수십만줄이 되더라도

이런 것들은 아무 문제가 되지 않죠!

요즘은 고사양이 되가고 있습니다. c++자체로서 객체지향를 지향한다면 그래도

c언어보다는 좀 무거워지겠습니다. 하지만, 솔직히 개발 초점에 맞추고

안정된 업그레이드와 인터페이스를 원한다면 객체지향에 충분히 자기

이해가 필요하지 않을까 생각합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.