Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[2356] Re:Accelerated C++ 에 대해서~
김백일.cedar [cedar] 1539 읽음    2003-04-10 16:39
김광수 님이 쓰신 글 :
: 이 책에 대한 평가를 봤는대 ...
:
: c+++초보자들이 보기엔 약간 어렵다고 합니다.

글쎄요... 중급자들이 보기에는 황당할 수도 있는 접근방법이지만,
그건 우리가 이제까지 배워왔던 방법이 잘못되었음을 보이는 증거에 불과합니다.

이책 자체는 초보자를 위한 겁니다.
서문을 읽어보시면 아시겠지만, 저자들이 실제로 스탠포드 대학 학부생들을 대상으로 가르친 강의 자료를 정리해서 만든 겁니다. 기존의 방법대로 배우면 일주일이 걸려야 만들 수 있는 프로그램을 단 강의한지 하루만에 만들었다고 하는 성공 사례가 있습니다.

물론 중급자들에게도 기본 개념을 정리하는 데 도움을 주는 책이죠.

: 모 넘어가구요..이책 첫장에 std::cout<<"Hello world"<<std::endl;
:
: 란게 나오던대~...
:
: 제가 알구있는 개념으로는
:
: 클래서 정의도 없이 무턱대고 나온 std::~가 이해가 안갑니다.


흠... 헬로 월드 프로그램 정도에서 해메시면 안되죠. ^^
아래 임문환님의 설명은 namespace를 정의하는 방법이 나와있어서 헷갈릴 수 있습니다.
Accelerated C++의 철학은 라이브러리를 쓰는 법을 먼저 배우고,
라이브러리를 정의하는 방법은 나중에 배운다는 겁니다.
그러므로 네임스페이스의 정의 방법에 대해서는 무시하고, 쓰는 법만 아시면 됩니다.

네임스페이스(이름 공간)은 말 그대로 이름을 구분해서 담아두는 공간입니다.
ANSI C++ 표준 라이브러리에 있는 모든 '이름'들은 std(STanDard)라는 이름 공간에 들어있는거죠.
그러므로 표준 라이브러리의 이름들을 쓸 때는 항상 std::를 붙여야 합니다.

#include <iostream>

int main()
{
  std::cout << "Hello, World" << std::endl;
}

std:: 를 쓰기 귀찮으면 다음과 같이 using namespace std;로 이 범위(스코프)에서는
std를 기본으로 사용하겠다는 선언을 넣으면 됩니다.

#include <iostream>

using namespace std;

int main()
{
  cout << "Hello, World" << endl;
}

하여튼 1998년 이후의 ANSI C++ 컴파일러에서는 위의 방법들로 std 이름 공간을 지정하지 않으면
아예 컴파일되지 않는 것이 정상입니다.

자바를 경험 보셨을 지도 모르겠네요.
C++의 네임스페이스는 자바의 네임스페이스와도 개념이 유사합니다.
자바도 네임스페이스를 모르면 헬로 월드도 쓸 수 없습니다.

자바는 스코프 연산자와 클래스 멤버 연산자가 . 로 동일합니다.(헷갈리게 하는 요인이죠.)
아래는 역시 유명한 자바의 헬로 월드 프로그램입니다.
언뜻 보기에도 C++보다 훨씬 복잡하군요.

import java.lang.*;

public class Test {
  public static void main(String[] args)){
    System.out.println("Hello, World");
  }
}

여기서 import가 C++의 using (namespace) 와 비슷한 의미입니다.
(#include 와는 전혀 상관없습니다. 주의!)
import 라인이 없으면 다음과 같이 써야 하죠.

public class Test {
  public static void main(String[] args)){
    java.lang.System.out.println("Hello, World");
  }
}

헬로 월드가 있는 라인이 엄청나게 길어졌군요.
자바의 JDK는 ANSI C++ 라이브러리에 비해 엄청 방대하기 때문에
(JVM 자체가 하나의 플랫폼이므로 당연하죠.)
위와 같이 이름 공간을 상당히 세분해서 계층적으로 정리하고 있습니다.

이제 이해가 되시겠죠?
참고로 using namespace은 편리하지만 남발해서는 안됩니다.
특히 헤더파일에서는 쓰지 않는 것이 좋습니다. (역시 이유는 이 책에 나옵니다.)

: 제가 알기론 :: 다음엔 항상 클레스 네임이 나오다고 했는데..
: 책 내용 잠깐 보니까 std::cout 가 표준출력스트림이라고 하는대..
: 첫장부터 이런내용이 나오니 절 당황하게 만듭니다.ㅡㅡㅋ..

다시 한번 강조하지만, :: 다음에는 클래스 이름 뿐만아니라 변수 이름, 함수 이름 등 모든 '이름'이 다 올 수 있습니다.

: 가상함수까지 박에 모르는 제가 이책을 완독할수 있을려나모르겟네요..
:
: 샘플만 보구 목차를 안봣는데..
: 최근에 추가된 c++ 스킬도 나오나요? 이를탬면 템플릿, 예외처리, 네임스페이스 나 stl 에 대해서

예, 사실은 그것부터 나옵니다.
0장에서는 네임스페이스의 사용방법(정의방법이 아닙니다.)이 나오고요.
이걸 모르면 C++에서는 헬로 월드조차도 실행할 수 없습니다.
템플릿 라이브러리인 STL 사용법이 초반부인 3장부터 나오기 시작합니다.
(물론 정의 방법은 후반부에 나옵니다.)
예외 처리도 4장부터 나오고요,
정작 기존의 C/C++ 에서 중요하게 다뤘던 배열, 포인터, 클래스 정의, 상속, 가상 함수들은 후반부에 가서야 나오죠.

처음에는 생소하겠지만 이렇게 하는 방법이 진정한 정석이라고 생각합니다.
당장 구입하셔서 읽어보세요.

+ -

관련 글 리스트
2350 Accelerated C++ 에 대해서~ 김광수 1365 2003/04/10
2356     Re:Accelerated C++ 에 대해서~ 김백일.cedar 1539 2003/04/10
2369         스트로우스트럽씨의 The C++ Pro-.. Language좀 평가해 주세요. 황영덕 1406 2003/04/13
2374             Re:스트로우스트럽씨의 The C++ Pro-.. Language좀 평가해 주세요. ILoveMe 1582 2003/04/13
2351     Re:Accelerated C++ 에 대해서~ 임문환 1302 2003/04/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.