객체 지향적 프로그래밍에 대한 개념을 제대로 세워주는 c++ 입문서 추천부탁드립니다.

noblepylon의 이미지

처음에 저는 C로 프로그래밍을 접했습니다.
그래서 자연스럽게 순차적으로 코드를 짜게 되더라고요.
그런데 순차적 코드는 나중에 다시 써먹기가 되게 힘듭니다.
알아보기도 꽤 괴롭구요.
(저는 main함수에 무작정 쑤셔넣는 타입이라서요-_-;)

그래서 이번 여름방학때 C++언어를 공부하려고 합니다.
듣기로는 '객체지향'이란 것이 프로그램을 블록화 시켜서 시간이 지나도 쉽게 재사용이 가능하다고 하더군요.
그리고 wxWidgets도 C++로 되어있고요.
객체지향 프로그래밍에 대한 개념을 제대로 세워주는 그런 C++ 입문서가 있다면 추천바랍니다.

ps. 국내도서이던 원서이건 괜찮습니다. 다만 지나치게 두꺼운 책은 피하고 싶군요. (상당히 비싸니까...)

oDo의 이미지

일단 입문하신다니 저는 이해하기 쉬운 씨뿔뿔을 추천합니다.

그담엔 유명한 책들 많으니까요..천천히 읽어나가심 될꺼 같구요.

근데 메인에 다 쑤셔버리시면 씨뿔뿔에서두 클래스에다 다 쑤셔 넣는거 아닌지 걱정입니다만..

참고로 JSP라는 커널(토요타자동차)은 일부분이 씨뿔뿔로두 작성이 되어 있습니다.

열공하세요.

--------------------------------------
나만 이래?

JuEUS-U의 이미지

순차적 프로그래밍이 오히려 알아보기 쉽습니다만... =ㅅ=;;;;
개인의 코딩습관이 문제라고 지적하고 싶네요....

저는 일단 'C프로그래머를 위한 C++'을 추천하고 싶네요.

noblepylon의 이미지

main함수에 쑤셔놓으니까 나중에는 완전 누더기가 되어버려서 알아볼수가 없더군요.
여름방학때 최대한 고쳐보겠습니다.
---
"The truth will make you free."(John 8:32)
"I am the way, and the truth, and the life: no one comes to the Father but through Me."(John 14:6)

---
“내게 능력주시는 자 안에서 내가 모든 것을 할 수 있느니라.”(빌립보서 4:13)

semmal의 이미지

c++책에서 제대로 된 OO를 찾는 다는 건 불가능 할 것 같습니다.

차라리 Smalltalk, IO, Ruby를 공부하시는게 더 좋을 것 같네요.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

chunsj의 이미지

저도 여기에 한표, c++나 java는 그냥 OO의 특징을 받아들인 것일 뿐 OO를 제대로 지원한다고 보기는 어렵습니다.(Alan Kay의 글을 참고하세요) 제대로 된 - 저는 smalltalk을 추천합니다만 - OO언어를 통해서, 이전의 지식은 다 버리고, OO를 제대로 배우시고 다른 언어를 배우시는 것이 훨씬 도움이 될 것입니다.

bookgekgom의 이미지

자바는 OO의 OO 에 의한 OO 를 위해 만들어진 언어입니다.

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

M.W.Park의 이미지

퀴즈인가요?
자바는 Sun의 Gosling에 의한 값싼 대량 개발을 위해 만들어진 언어입니다. ^^;

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

winner의 이미지

성능이 어느 정도 나온다는 것은 인정... -_-.

winner의 이미지

이곳만 해도 수없이 나왔던 글입니다.
C++ 새표준이 발표되기 전까지는 새로운 입문서가 나오지는 않을 것 같습니다.
설령 새표준이 발표되어도 실질적으로 compiler들이 지원하는 상황이 나오기 전에는
의미가 떨어지기에 아마도 3년은 걸릴것 같네요.

neogeo의 이미지


C언어를 잘 하신다면,

The C++ Programming Language 를 먼저 보신후,

GOF 의 Design Pattern 과 Effective C++ 를 같이 보시기를 바랍니다.

그 이후 STL ref 와 More Effective C++ 를 보시고

그 다음 Modern C++ Design 을 보시기 바랍니다.

위를 다 보셨다면 C++ 로 어느정도 OOP 적인 프로그래밍이 가능하시게 되리라 믿습니다.

좀 더 실력을 늘리고 싶으면 그 이후에 Exceptional C++ , More Exceptional C++ 스리즈를 보시면 좋습니다.

Neogeo - Future is Now.

Neogeo - Future is Now.

winner의 이미지

뭐, 최강의 시리즈이긴 합니다만...

neogeo의 이미지

위의 책에 언급된 몇가지 테크닉을 이해하지 못하면 C++ 로 oop 를 어느정도나마 흉내낸다는게 거의 불가능하기 때문입니다.

C++ 의 learning curve 는 다른 그 어떤 언어보다도 상당히 짜증나는 구조로 되어있으니까요.

C++ 로 oop 를 하신다는 생각이 불가능은 아니지만, 어려운 언어의 숨어있는 부분을 공부해야만 한다고 생각합니다.

Neogeo - Future is Now.

Neogeo - Future is Now.

ssif의 이미지

OOP 프로그래밍 언어를 보기보단 님의 프로그래밍 습관을 우선 고치셔야 할것 같습니다.
OOP에서도 모듈화는 기본입니다.

Code Complete 이라는 책이 정보문화사에서 나온게 있습니다.

봄들판에서다

봄들판에서다

noblepylon의 이미지

main함수에 쑤셔넣는 습관은 고쳐야 한다고는 생각하고 있습니다만
막상 짜다보면 어떻게 정리해야 할지 약간 막막하군요.
가이드라인 같은 게 있나요?
---
"The truth will make you free."(John 8:32)
"I am the way, and the truth, and the life: no one comes to the Father but through Me."(John 14:6)

---
“내게 능력주시는 자 안에서 내가 모든 것을 할 수 있느니라.”(빌립보서 4:13)

dingkyu의 이미지

일단 아무리 간단한 거라도 다른 곳에서 단 한번이라도
반복해서 일정한 작업을 해야 하는것이라면
함수화 합니다.

예를들어 메모리를 malloc할때는 메모리 포인터와 필요한 양을 전달받아
malloc해주는 함수와 사용이 끝나면 free해주는 함수를 만들어 부르는 식으로
씁니다. 마찬가지로 파일을 열때도 파일이름의 포인터를 넘겨주는 식으로
해서 파일을 열고 닫습니다.

그러면 main에서는 이런식의 코딩이 가능해 지죠.

void main(int ac, char** ag)
{
    char *pMemory = NULL;
    FILE *fpFile = NULL;
 
    openFile(ag[1], fpFile);
 
    GetMem(pMemory, 1024);
 
    /* 어쩌구 저쩌구 작업 */
 
    setFree(pMemory);
    closeFile(fpFile);
    return;
}

위에서 이제 어쩌구 저쩌구 작업하는 부분에서는 또 다시 이런저런 함수들로
분기가 가능하고 그렇게 그렇게 쪼개나가는 식으로 저는 짭니다.
물론 이건 제가 하는 방식이고 다른 고수분들은 더 좋은 방법들을
많이 알고 계실테니 계속 공부하는 수 밖에 없을꺼 같네요.
저도 공부중입니다. ㅋㅋ

고민이 많아 고민인 애늙은이 입니다.

dragonkun의 이미지

마틴 파울러의 '리팩토링' 이란 책을 보시는 건 어떨까요?

이미 만들어 놓은 프로그램으로 구조만 바꿔서 더 좋은 구조의 프로그램으로 바꾸는 연습을 해 보시는 것도 좋습니다.
--
Emerging the World!

Emerging the World!

winner의 이미지

어쩔수 없이 함수화한다는 느낌까지 들더군요.
그리고 최고로 적절하게 완성된 함수화를 볼 수 있습니다.

winner의 이미지

거의 흉기...

hongminhee의 이미지

다음 순서로 읽어보세요.

  • Accelerated C++
  • The C++ Programming Language
  • Modern C++ Design
  • C++ Template Metaprogramming
Llain의 이미지

창의성이 아무리 좋다고 해도 예전 분들이 연구해 놓으신 것은 따라가기가 어렵더라고요
그래서 패턴책 추천~
패턴이 디자인패턴도 있지만 UML 같은 설계상에 대한 패턴도 있는데
그런 것들을 통해서 전체적이 부분을 미리 구현할 수 있다면 OOP 는 따라오는 것 같아요

좋은 하루 및 좋은 세상이 되기를 바랍니다
그럼...

꾸벅

-----------------------------------------------------
자신의 열정! 용기! 근성! 만이 자신을 표현할 수 있다
* 좋은 하루 및 좋은 세상이 되기를 바랍니다 *

댓글 달기

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