[C++]잘 짜인 C++ 예제들을 구할 수 있는 곳이 없을까요?

rhizome의 이미지

객체지향 설계의 관점에서 잘 짜여진 짧은 예제들을 구할 수 있는 곳이 없을까 해서 질문을 올립니다. 그리고 디자인패턴이 적절히 잘 적용된 경우이면 금상첨화 일 것 같구요.

그냥 클래스 하나만 덩그러니 있거나 하는 그런 코드 말고 main함수를 가지고 있는 완전한 형태의 코드가 적절할 것 같습니다.

그런 예제들이 들어있는 책을 소개해 주셔도 좋구요.

ssehoony의 이미지

sf.net 이나 codeproject.com 에 가보세요.

happyjun의 이미지

디자인 패턴이 적용된 OOP 소스를 보고 싶으시면 GUI와 같은 프레임워크 소스들이 좋을듯합니다.

GoF책에 있는 것도 좋구요.

----------------------------------------
http://moim.at
http://mkhq.co.kr

rhizome의 이미지

happyjun wrote:
디자인 패턴이 적용된 OOP 소스를 보고 싶으시면 GUI와 같은 프레임워크 소스들이 좋을듯합니다.

사실 먼저 떠오른 게 'Qt 4를 분석하는 게 어떨까? '였는데 이거 너무 방대해서 엄두가 안 나더군요.

패턴에 관한 책을 조금씩 보고 있기는 한데, 프로그램이란게 이 패턴들이 유기적으로 연결되서 나오는 것이기 때문에 각 패턴들로 조각나 있는 코드들로는 뭔가 전체적인 그림을 그리는데 어려움이 있는 것 같습니다.

그래서 한 두개의 패턴들이 유기적으로 결합되어 있으면서 컴파일이 되는 작은 프로그램들이 없을까 하고 찾다가 , 막막해서 질문을 올렸던 거였습니다.

결국 Qt 4를 분석하는 것 말고는 없는 걸까요? :?

거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.

doldori의 이미지

OOP 기법을 익히기 위해 Qt4를 분석하는 것은 적당하지 않을 것 같습니다.
너무 덩치가 커서 요점을 파악하기 힘들거든요.
저는 Andrei Alexandrescu의 Modern C++ Design을 권하고 싶습니다.
디자인 패턴뿐만 아니라 각종 현란한 테크닉을 흠뻑 맛보실 수 있습니다.
이 책의 내용은 Loki library를 해설한 것이라고 봐도 됩니다.

비행소년의 이미지

Firebird C++ Client인 IPBB도 꽤나 잘 되있더군요.

http://www.ibpp.org/

Quote:

저는 Andrei Alexandrescu의 Modern C++ Design을 권하고 싶습니다.

저두 한표.

높이 날다 떨어지면.
아푸다 ㅡ,.ㅡ

happyjun의 이미지

doldori wrote:
OOP 기법을 익히기 위해 Qt4를 분석하는 것은 적당하지 않을 것 같습니다.
너무 덩치가 커서 요점을 파악하기 힘들거든요.
저는 Andrei Alexandrescu의 Modern C++ Design을 권하고 싶습니다.
디자인 패턴뿐만 아니라 각종 현란한 테크닉을 흠뻑 맛보실 수 있습니다.
이 책의 내용은 Loki library를 해설한 것이라고 봐도 됩니다.

STL과 Loki는 OOP가 아니라 Generic Programming 입니다.

OOP 공부에는 어울리지 않습니다.

----------------------------------------
http://moim.at
http://mkhq.co.kr

doldori의 이미지

happyjun wrote:
STL과 Loki는 OOP가 아니라 Generic Programming 입니다.

OOP 공부에는 어울리지 않습니다.


템플릿으로 도배가 되어 있으니 그렇게 말씀하시는 것도 무리는 아니죠.
Loki에 대한 소개가 "Loki: A C++ library of designs, containing flexible
implementations of common design patterns and idioms."라고 되어
있는데, generic programming으로 고치라고 항의를 해야겠군요. ^^;
dolgogi의 이미지

저는 프로그래머가 아니어서 이게 잘 만들어진 코드인지는 모르겠습니다만...
C++을 주로 사용하여 BeOS를 새롭게 구현하는 프로젝트인 haikuOS를 소개합니다. haikuOS 개발자중에는 능력이 좋으신 분들도 많이 계신것 같더군요. 커널/미디어/게임킷 등이 아직 진행이 미진하긴 하지만 나머지 부분은 거의 알파수준에 올라와 있는것으로 압니다. C++을 주로 이용하여 만들어지는 오픈소스OS를 통해 C++의 다양한 활용사례를 경험하실 수 있으리라 생각해 봅니다.
http//svn.berlios.de/viewcvs/haiku/haiku/trunk/

happyjun의 이미지

doldori wrote:
happyjun wrote:
STL과 Loki는 OOP가 아니라 Generic Programming 입니다.

OOP 공부에는 어울리지 않습니다.


템플릿으로 도배가 되어 있으니 그렇게 말씀하시는 것도 무리는 아니죠.
Loki에 대한 소개가 "Loki: A C++ library of designs, containing flexible
implementations of common design patterns and idioms."라고 되어
있는데, generic programming으로 고치라고 항의를 해야겠군요. ^^;

Loki를 보셨으니 하는 말씀이시겠지만 Loki는 Boost.MPL과 같이 template meta programming을 위한 type library를 만든 후 이를 이용하여 만든 generic library입니다. Andrei Alexandrescu의 책과 여러 컬럼을 읽어 보니 그는 GP를 잘 이해하는 GP신봉자입니다.

GP의 개념을 어떤 것으로 잡고 말씀하시는 것인지 모르겠지만 제가 아는한 Loki는 GP 설계이며, GP는 OOP를 사용하기도 하지만 OOP와는 다른 방향이므로 OOP 공부를 위해 GP를 본다는 것은 맞지 않는다고 봅니다.

ps. 글 주제와는 약간 벗어나지만 이모티콘에 불끈!해서 답변합니다.

----------------------------------------
http://moim.at
http://mkhq.co.kr

죠커의 이미지

happyjun wrote:
doldori wrote:
happyjun wrote:
STL과 Loki는 OOP가 아니라 Generic Programming 입니다.

OOP 공부에는 어울리지 않습니다.


템플릿으로 도배가 되어 있으니 그렇게 말씀하시는 것도 무리는 아니죠.
Loki에 대한 소개가 "Loki: A C++ library of designs, containing flexible
implementations of common design patterns and idioms."라고 되어
있는데, generic programming으로 고치라고 항의를 해야겠군요. ^^;

Loki를 보셨으니 하는 말씀이시겠지만 Loki는 Boost.MPL과 같이 template meta programming을 위한 type library를 만든 후 이를 이용하여 만든 generic library입니다. Andrei Alexandrescu의 책과 여러 컬럼을 읽어 보니 그는 GP를 잘 이해하는 GP신봉자입니다.

GP의 개념을 어떤 것으로 잡고 말씀하시는 것인지 모르겠지만 제가 아는한 Loki는 GP 설계이며, GP는 OOP를 사용하기도 하지만 OOP와는 다른 방향이므로 OOP 공부를 위해 GP를 본다는 것은 맞지 않는다고 봅니다.

ps. 글 주제와는 약간 벗어나지만 이모티콘에 불끈!해서 답변합니다.

Andrei Alexandrescu는 템플릿 메타 프로그래밍의 교주(..)로 모든 디자인 패턴은 하나의 메타 코드로 표현될 수 있다는 것을 믿는 사람입니다.

그의 서적을 보시면 그가 패턴들을 어떻게 표현하는지 보실 수 있습니다. 나 또한 그의 의견에 동의하며 디자인 패턴은 하나의 메타코드로 기술될 수 있다고 믿습니다.

cinsk의 이미지

그럭저럭 잘 쓰이고 있는, C++ 예제를 찾는다면, Qt 대신, paragui 소스를 보기를 권장합니다. Qt보다 작지만, 그렇다고 저급의 코드도 아닙니다. 오히려 공부하는 목적으로는 더 좋습니다. 왜냐하면, frame buffer 등을 다루는 저수준 라이브러리는 SDL을 쓰기 때문에 분리되어 있고, signal 처리도 libsigc로 분리되어 있기 때문에, 이해하기에 정말 좋습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.