Coder Social home page Coder Social logo

cpp's Introduction

Hi there ๐Ÿ‘‹ Hits

C C++ Go

git-stats

I love programming and problem-solving!

profile

cpp's People

Contributors

ryanjeong avatar

Watchers

 avatar

cpp's Issues

style

int a {3};
int b(2);
int c = 4;
int d;
d=5;
vector v = {1,2,3};

unique_ptr

#include <iostream>
#include <memory>

class T {
 public:
   ~T();
   int x;
};

T::~T() { std::cout << this->x << " Destructor\n"; }

std::unique_ptr<T> foo(int n) {
  std::unique_ptr<T> ptr(new T());
  ptr->x = n;
  std::cout << ptr->x << '\n';
  return std::move(ptr);
}

void bar(int n) {
  std::unique_ptr<T> ptr(new T());
  ptr->x = n;
  std::cout << ptr->x << '\n';
}

int main() {
  std::cout << "---before foo(100)---\n";
  auto ptr = foo(100);
  std::cout << "---after foo(100)---\n";

  std::cout << "---before bar(200)---\n";
  bar(200);
  std::cout << "---after bar(200)---\n";
  
  std::cout << "---before foo(300) and return its ref.---\n";
  const std::unique_ptr<T>& ref = foo(300);
  std::cout << "---after foo(300)---\n";

  return 0;
}

interview ์ •๋ฆฌ

C++์€ ์žฅ๋‚œ์ด๋‹ค? - Bjarne Stroustrup ์ธํ„ฐ๋ทฐ
1998. 1. 1., Bjarne Stroustrup๋Š” IEEE Computer์ง€์™€ ์ธํ„ฐ๋ทฐ ํ–ˆ๋‹ค. ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํŽธ์ง‘์ž๋Š” ๊ทธ๊ฐ€ C++์„ ์ฐฝ์กฐํ•œ ๋‹น์‚ฌ์ž๋กœ์„œ 7๋…„๊ฐ„์˜ object-oriented ์„ค๊ณ„์— ๋Œ€ํ•œ ์ข…ํ•ฉ์ ์ธ ์˜๊ฒฌ์„ ๋ณด์—ฌ์ฃผ๋ฆฌ๋ผ ์ƒ๊ฐํ–ˆ๋‹ค. ์ธํ„ฐ๋ทฐ๊ฐ€ ๋๋‚  ์ฆˆ์Œ, Interviewer๋Š” ๊ทธ์˜ ๊ธฐ๋Œ€ ์ด์ƒ์˜ ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ํŽธ์ง‘์ž๋Š” '์‚ฐ์—…๊ณ„์˜ ์ด์ต'์„ ์œ„ํ•ด ๊ทธ ๋‚ด์šฉ์„ ํŽธ์ง‘ํ•˜๊ธฐ๋กœ ํ•˜์˜€์œผ๋‚˜, ์„ธ์ƒ ๋งŒ์‚ฌ๊ฐ€ ๊ทธ๋ ‡๋“ฏ์ด ๋น„๋ฐ€์€ ์—†๋‹ค. ๋‹ค์Œ์€ ํŽธ์ง‘๋˜์ง€ ์•Š์€ ์™„์ „ํ•œ ๋Œ€ํ™” ๋‚ด์šฉ์ด๋ฉฐ, ๋”ฐ๋ผ์„œ ์ธํ„ฐ๋ทฐ ๊ณ„ํš๋งŒํผ ์ •๋ฆฌ ๋˜์–ด ์žˆ์ง„ ์•Š๋‹ค.

Interviewer: ์˜ˆ, ๋‹น์‹ ์ด ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์˜ ์„ธ๊ณ„๋ฅผ ๋ฐ”๊พผ์ง€๋„ ์ˆ˜๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?
Stroustrup: ์‚ฌ์‹ค ๋‹น์‹ ์ด ๋„์ฐฉํ•˜๊ธฐ ์ „ ๊ทธ๊ฒƒ์„ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์ฃ . ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ? ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด 'C'๋ฅผ ์‚ฌ์šฉํ•˜๊ณ .. ๋ฌธ์ œ๋Š” ๊ทธ๋“ค์ด ์•„์ฃผ ์ „๋ฌธ๊ฐ€์˜€๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋Œ€ํ•™์—์„œ๋„ C๋ฅผ ๋งค์šฐ ํ›Œ๋ฅญํžˆ ๊ฐ€๋ฅด์ณค์Šต๋‹ˆ๋‹ค. ์กธ์—…์ƒ๋“ค์€ ์•„์ฃผ ์œ ๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Interviewer: ๋ฌธ์ œ์š”?
Stroustrup: ์˜ˆ. ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ฝ”๋ณผ์„ ์“ฐ๋˜ ์‹œ์ ˆ์„ ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ?

Interviewer: ๋ฌผ๋ก ์ด์ฃ .
Stroustrup: ๊ธ€์Ž„์š”, ์ดˆ์ฐฝ๊ธฐ์— ์ด๋“ค์€ ๊ฑฐ์˜ ์‹ ์ด์—ˆ์ฃ . ๋†’์€ ๋ณด์ˆ˜์™€ ๊ท€์กฑ ๋Œ€์šฐ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

Interviewer: ๊ทธ๋Ÿฐ ์‹œ์ ˆ์ด์—ˆ์ฃ .
Stroustrup: ๊ทธ๋ž˜์š”. ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? IBM์€ ์ด๊ฒƒ์— ๋ถˆ๋งŒ์ด์—ˆ๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์˜ ๊ต์œก์— ์ˆ˜๋ฐฑ๋งŒ๋ถˆ์„ ํˆฌ์žํ•˜์—ฌ ๋งˆ์นจ๋‚ด ๋ฐฑ์—ฌ๋ช… ์ •๋„์˜ ์ธ์›์„ ๊ธธ๋ €์Šต๋‹ˆ๋‹ค.

Interviewer: ๊ทธ๊ฒŒ ๋ฐ”๋กœ ์ œ๊ฐ€ ๊ทธ๋งŒ๋‘” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ณด์ˆ˜๊ฐ€ 1๋…„๋งŒ์— ์ €๋„๋ฆฌ์ŠคํŠธ ๋ณด๋‹ค ์ ์€ ์ˆ˜์ค€์œผ๋กœ ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค.
Stroustrup: ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. 'C'ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ์ผ์ด ์ผ์–ด๋‚ฌ์ฃ .

Interviewer: ๊ทธ๋ ‡๊ตฐ์š”, ๊ทผ๋ฐ ์š”์ ์ด ๋ฌด์—ˆ์ž…๋‹ˆ๊นŒ?
Stroustrup: ๊ธ€์Ž„์š”, ํ•˜๋ฃจ๋Š” ์ œ ์‚ฌ๋ฌด์‹ค์— ์•‰์•„์„œ ์ด ๋ฌธ์ œ์— ๊ด€ํ•ด ์ˆ˜๊ธ‰ ๊ท ํ˜•์ด ์ด๋ค„์งˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•  ์ž‘์€ ๊ณ„ํš์— ๋Œ€ํ•ด ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒ๊ฐ์„ ํ–ˆ์ฃ .'๋ฌด์ฒ™ ๋ฐฐ์šฐ๊ธฐ ํž˜๋“  ๋ณต์žกํ•œ ์–ธ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด.. ๊ทธ๋ž˜์„œ ์•„๋ฌด๋„ ๊ฐํžˆ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋˜๋ ค๊ณ  ํ•˜์ง€ ์•Š์„ ๋งŒํผ.. ๊ณผ์—ฐ ์–ด๋–จ๊นŒ?' ์‹ค์ œ๋กœ ๋งŽ์€ ์•„์ด๋””์–ด๋ฅผ X ์œˆ๋„์šฐ(X10)์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ์ด ํ˜•ํŽธ์—†๋Š” ๊ทธ๋ž˜ํ”ฝ ์‹œ์Šคํ…œ์€ Sun 3/60์—์„œ๋งŒ ๋Œ์•˜์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์›ํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์—ฌ๊ธฐ ์žˆ์—ˆ์ฃ . ์šฐ์Šค๊ฝ์Šค๋Ÿฌ์šธ ๋งŒํผ ๋ณต์žกํ•œ ๋ฌธ๋ฒ•, ์• ๋งคํ•œ ํ•จ์ˆ˜, pseudo-OO ๊ตฌ์กฐ. ์ง€๊ธˆ๋„ ์•„๋ฌด๋„ ์ˆœ์ „ํ•œ X ์œˆ๋„์šฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ์น˜ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ์ •์‹ ์ด๋ผ๋ฉด Motif๋งŒ์ด ์œ ์ผํ•œ ๋„๊ตฌ์ด์ฃ .

Interviewer: ์ง„์‹ฌ์ž…๋‹ˆ๊นŒ..?
Stroustrup: ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ œ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์œ ๋‹‰์Šค๊ฐ€ C๋กœ ์”Œ์–ด์กŒ์ง€์š”, ์ฆ‰ ์–ด๋–ค C ํ”„๋กœ๊ทธ๋ž˜๋จธ๋„ ์‰ฝ๊ฒŒ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹จ ์˜๋ฏธ์ง€์š”. ํ•œ๋•Œ ๋ฉ”์ธํ”„๋ ˆ์ž„์˜ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฒŒ์—ˆ๋Š”์ง€ ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ?

Interviewer: ๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค, ์ œ๊ฐ€ ํ•œ๋•Œ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋žจ์„ ํ–ˆ์—ˆ์ฃ .
Stroustrup: ์ข‹์Šต๋‹ˆ๋‹ค, ๋”ฐ๋ผ์„œ ์œ ๋‹‰์Šค์™€ ์–ธ์–ด๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๋ชจ๋“  ์‹œ์Šคํ…œ ์ฝœ๋“ค์„ ๊ฐ์ถค์œผ๋กœ์จ, ์ƒˆ๋กœ์šด ์–ธ์–ด๋Š” ์œ ๋‹‰์Šค์™€์˜ ๊ฒฐ๋ณ„ํ•˜๋„๋ก ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” DOS๋งŒ ์•„๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์™ ๋งŒํ•œ ์†Œ๋“์„ ๋ฒŒ ์ˆ˜ ์žˆ๊ฒŒ๋” ํ–ˆ์Šต๋‹ˆ๋‹ค.

Interviewer: ๋ฏฟ์„ ์ˆ˜ ์—†๋Š” ์˜ˆ๊ธฐ๊ตฐ์š”...
Stroustrup: ๊ธ€์Ž„์š”, ์ด๋ฏธ ์‹œ๊ฐ„์ด ์ง€๋‚ฌ์ง€๋งŒ ์ง€๊ธˆ์ฏค์€ ์‚ฌ๋žŒ๋“ค์ด ์Šค์Šค๋กœ C++๊ฐ€ ์‹œ๊ฐ„ ๋‚ญ๋น„์˜€๋‹ค๋Š” ๊ฒƒ ๊นจ๋‹ฌ์•˜์„ ๊ฒ๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ๋ณด๋‹ค ํ›จ์”ฌ ๋’ค๋Šฆ์€ ์ผ์ด์ง€๋งŒ์š”...

Interviewer: ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ์–ด๋–ค ์‹์œผ๋กœ ํ•˜์˜€์Šต๋‹ˆ๊นŒ?
Stroustrup: ์‚ฌ์‹ค ๋‹จ์ง€ ์žฅ๋‚œ์ด์—ˆ์„ ๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค, ์‚ฌ๋žŒ๋“ค์ด ์ œ ์ฑ…์„ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด๋ฆฌ๋ผ ์ƒ๊ฐ์น˜ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‘๋‡Œ๊ฐ€ ๋ฐ˜์ด๋ผ๋„ ์žˆ๋‹ค๋ฉด object-oriented ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ฐ˜์ง๊ด€์ ์ด๊ณ , ๋น„๋…ผ๋ฆฌ์ ์ด๊ณ  ๋น„ํšจ์œจ์ ์ด๋ž€ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Interviewer: ๋ญ๋ผ๊ตฌ์š”?
Stroustrup: ๋˜ '์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ฝ”๋“œ'๋ฅผ ๋ณด์„ธ์š”. ํ•œ๋ฒˆ์ด๋ผ๋„ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ํšŒ์‚ฌ์— ๋Œ€ํ•ด ๋“ค์–ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

Interviewer: ๊ธ€์Ž„์š”, ์•„๋‹ˆ์š”, ํ•˜์ง€๋งŒ...
Stroustrup: ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์— ์†Œ์ˆ˜ ํšŒ์‚ฌ๊ฐ€ ์‹œ๋„๋Š” ํ–ˆ์—ˆ์ฃ . ์˜ค๋ ˆ๊ณค์˜ Mentor Graphics์‚ฌ๊ฐ€ 90, 91๋…„๋„์— ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ C++๋กœ ์žฌ์ž‘์„ฑ ํ•˜๋‹ค๊ฐ€ ํฌ๊ฒŒ ํ˜ผ๋‚œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์ง„์‹ฌ์œผ๋กœ ์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐํ–ˆ์—ˆ์ฃ . ๋‹ค๋งŒ, ์šฐ๋ฆฌ๋Š” ์‹ค์ˆ˜๋กœ๋ถ€ํ„ฐ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

Interviewer: ๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ๋žŒ๋“ค์ด ๊ตํ›ˆ์„ ์–ป์—ˆ์Šต๋‹ˆ๊นŒ?
Stroustrup: ์ฒœ๋งŒ์—์š”. ๋ฌธ์ œ๋Š”, ๋Œ€๋ถ€๋ถ„ ํšŒ์‚ฌ๋“ค์ด ์ค‘์š” ์‹ค์ˆ˜๋“ค์„ ๊ฐ์ถ”๋ ค ๋“ ๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค. 3์ฒœ๋งŒ๋ถˆ ์†์‹ค์„ ์ฃผ์ฃผ๋“ค์—๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๊ฑธ ์–ด๋ ค์›Œํ•˜์ง€์š”. ๊ทธ๋ž˜๋„ ๊ณต์ด ์•„์ฃผ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ์—๋Š” ๋ญ”๊ฐ€ ํ•ด๋‚ด์—ˆ์ง€์š”.

Interviewer: ๊ทธ๋ž˜์š”? ๊ธ€์Ž„, ๊ทธ๋ ‡๋‹ค๋ฉด, OO๊ฐ€ ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๊ฑฐ๋„ค์š”.
Stroustrup: ๊ธ€์Ž„์š”, ๊ฑฐ์˜.. ์‹คํ–‰์ฝ”๋“œ๊ฐ€ ๋งค์šฐ ์ปธ์Šต๋‹ˆ๋‹ค. 128MB RAM์˜ HP ์›์Šคํ…Œ์ด์…˜์—์„œ ๋กœ๋“œํ•˜๋Š” ๋ฐ 5๋ถ„ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰๋Š” ๋” ์—„์ฒญ ์˜ค๋ž˜ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์ด๊ฒƒ์ด ์ค‘์š”ํ•œ ์žฅ์• ๋ฌผ์ด ๋˜๋ฆฌ๋ผ ์ƒ๊ฐํ–ˆ๊ณ  1์ฃผ์•ˆ์— ๋ชจ๋‘ ์ด๋ฅผ ์•Œ์•„์ฐจ๋ฆด ๊ฒƒ์œผ๋กœ ์ง์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค๋งŒ, ์•„๋ฌด๋„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋”๊ตฐ์š”. Sun๊ณผ HP๋Š” ์—„์ฒญ๋‚œ ํŒŒ์›Œ์˜ ๋จธ์‹ ์„ ํŒ๋งคํ•˜๋Š” ๋ฐ ์‹ ์ด๋‚ฌ์ฃ , ๋‹จ์ง€ ์ž‘์€ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ์‹คํ–‰ํ‚ค ์œ„ํ•ด ์—„์ฒญ๋‚œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š”.. ATT์—์„œ ์ฒซ C++ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฐ€์ง€๊ณ  'Hello world'๋ฅผ ์ปดํŒŒ์ผ ํ•˜๊ณ  2.1MB๋ผ๋Š” ๋ฏฟ์„ ์ˆ˜ ์—†๋Š” ํฌ๊ธฐ์˜ ์‹คํ–‰์ฝ”๋“œ๊ฐ€ ๋‚˜์™”์—ˆ์ฃ .

Interviewer: ๋„ค? ๊ธ€์Ž„์š”, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋งŽ์ด ๊ฐœ์„ ๋˜์—ˆ์ฃ , ๊ทธ ์ดํ›„๋กœ..
Stroustrup: ๊ทธ๋Ÿด๊นŒ์š”? ์ตœ์‹  ๋ฒ„์ ผ์˜ g++์—์„œ ํ•œ๋ฒˆ ํ•ด๋ณด์„ธ์š”. 1/2 ๋ฉ”๊ฐ€ ์ด์ƒ์€ ๋ ๊ฒ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์„ธ๊ณ„ ๊ฐ์ง€์˜ ์ตœ๊ทผ์˜ ์˜ˆ๋“ค๋„ ๋งŽ์Šต๋‹ˆ๋‹ค. British Telecom์ด ํฐ ์œ„๊ธฐ๋ฅผ ๋‹นํ• ๋ป” ํ–ˆ์œผ๋‚˜ ์šด์ข‹๊ฒŒ ๋ฒ—์–ด๋‚˜์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ Australian Telecom๋ณด๋‹ค ์šด์ด ์ข‹์•˜์ฃ . ์ง€๊ธˆ์€ ์ง€๋ฉ˜์Šค๊ฐ€ ๊ณต๋ฃก์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๋Š” ๊ตฐ์š”. ์‹คํ–‰์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ ์  ์ปค์ง์— ๋”ฐ๋ผ ์šฐ๋ ค๋„ ์ปค์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ž˜๋„ multiple inheritance๊ฐ€ ์ข‹์Šต๋‹ˆ๊นŒ?

Interviewer: ์˜ˆ, ํ•˜์ง€๋งŒ C++๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์ ˆํ•œ ์–ธ์–ด์ด์ง€์š”.
Stroustrup: ๊ทธ๊ฑธ ๋ฏฟ์Šต๋‹ˆ๊นŒ? ํ•œ๋ฒˆ์ด๋ผ๋„ C++ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ์ •์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค:
์•„์ฃผ ์†Œ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ๋งŒ์ด ์ฒซ ์‹œ๋„์— ์„ฑ๊ณตํ•  ๋งŒํผ ํ•จ์ •์„ ๋งŽ์ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž overloading์„ ๋ด…์‹œ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚  ๋ฌด๋ ต, ๊ฑฐ์˜ ๋ชจ๋“  ๋ชจ๋“ˆ์—์„œ ์ด๊ฑธ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต, ์‚ฌ๋žŒ๋“ค์€ ๊ต์œก ๊ณผ์ •์—์„œ ๊ทธ๋žฌ๋“ฏ์ด, ๊ทธ๋ž˜์•ผ๋งŒ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๊ฐ™์€ ์—ฐ์‚ฐ์ž๊ฐ€ ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ์—์„œ ์ œ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ „๋ถ€ ๋ชจ์•„ ๋†“์œผ๋ฉด ๋ฐฑ์—ฌ๊ฐœ์˜ ๋ชจ๋“ˆ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ data hiding์„ ๋ด…์‹œ๋‹ค. ๊ฐ ๋ชจ๋“ˆ๋“ค์ด ์„œ๋กœ ๋Œ€ํ™”ํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ํšŒ์‚ฌ๋“ค์„ ๋ณด๋ฉด ์›ƒ์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. 'synergistic'์ด๋ž€ ๋ง์€ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž์˜ ๊ฐ€์Šด์„ ํ›„๋ฒผํŒŒ๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด ์ง„ ๊ฒŒ ์•„๋‹Œ๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.

Interviewer: ์ •๋ง ์–ด์ฒ˜๊ตฌ๋‹ˆ ์—†๊ตฐ์š”. ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๋ณด์ˆ˜๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ด ๋ชจ๋“  ๊ฑธ ํ–ˆ๋‹ค๊ตฌ์š”. ํ•œ์‹ฌํ•˜๊ตฐ์š”.
Stroustrup: ๊ผญ ๊ทธ๋ ‡์ง€๋งŒ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ์„ ํƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊นŒ์ง€ ๋ฌธ์ œ๊ฐ€ ์ปค์งˆ ์ค„์€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. C++๋Š” ์ด์ œ ์ฃฝ์–ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ์—ฌ์ „ํžˆ ๋†’์€ ๋ณด์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ด ๋ชจ๋“  ๋ฌธ์ œ๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ถˆ์Œํ•œ ์‚ฌ๋žŒ๋“ค์€์š”.. ๋‹น์‹ ์ด ์‹ค์ œ๋กœ ์ž‘์„ฑํ•œ ๊ฒŒ ์•„๋‹ˆ๋ฉด, ๋ฐฉ๋Œ€ํ•œ C++ ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ๋ถˆ๊ฐ€๋Šฅ ํ•œ ๊ฒƒ์„ ์•Œ๊ฒ๋‹ˆ๋‹ค.

Interviewer: ์–ด๋–ป๊ฒŒ์š”?
Stroustrup: ์•„๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๊ตฐ์š”, typedef ๊ธฐ์–ตํ•˜์„ธ์š”?

Interviewer: ๊ทธ๋Ÿผ์š”.
Stroustrup: ๋ณ€์ˆ˜ 'RoofRaised'๊ฐ€ double precision ์ด๋ž€๊ฑธ ๊ฒจ์šฐ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ํ—ค๋” ํ™”์ผ๋“ค์„ ๋’ค์ ธ์•ผ ํ•˜๋Š”์ง€ ์•„์‹œ์ฃ ? ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์—์„œ ๋ชจ๋“  ํด๋ž˜์Šค๋“ค์— ์žˆ๋Š” implicitํ•œ typedef๋“ค์„ ์ฐพ๋Š”๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆด์ง€ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”.

Interviewer: ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ํ•ด์„œ ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๊ฑฐ์ฃ ?

Stroustrup: ํ‰๊ท ์ ์ธ 'C' ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๊ฐ„์ด ์–ด๋Š ์ •๋„ ๊ฑธ๋ฆฌ์ฃ ? ์•ฝ 6๊ฐœ์›” ์ž…๋‹ˆ๋‹ค. ๋ถ€์ธ๊ณผ ์•„์ด๋“ค์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์—ฌ์œ ์žˆ๊ฒŒ ์‚ด๋งŒํผ ์ถฉ๋ถ„ํ•œ ๊ธฐ๊ฐ„์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ C++๋กœ ์„ค๊ณ„ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”? 1๋…„ ๋‚ด์ง€ 2๋…„์ž…๋‹ˆ๋‹ค. ๋Œ€๋‹จํ•˜์ง€์š”? ์ž˜๋ชป๋œ ๊ฒฐ์ •์ด ์ด ๋ชจ๋“  ์•ˆ์ •๋œ ์ง์—…์„ ๊ฐ€์ ธ์˜จ ์…ˆ์ž…๋‹ˆ๋‹ค. ๋˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋Œ€ํ•™์—์„œ C๋ฅผ ๊ฐ€๋ฅด์น˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ, ์ด์ œ ํ›Œ๋ฅญํ•œ C ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ Unix ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ „๋ฌธ๊ฐ€๊ฐ€์š”. ์˜ค๋žซ๋™์•ˆ 'new'์„ ์จ์˜จ ์ง€๊ธˆ, 'malloc'์„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ค„ ์•„๋Š” ์‚ฌ๋žŒ์ด ๋ช‡๋ช…์ด๋‚˜ ๋ ๊นŒ์š”? return ๊ฐ’์„ ์ฒดํฌํ•˜๋Š๋ผ ์‹ ๊ฒฝ์“ฐ๋Š” ์ผ๋„ ์—†์ฃ . ์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„ C++ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ return๊ฐ’์„ ๊ทธ๋ƒฅ ๋‚ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. '-1'์„ ์“ฐ๋Š” ์ผ์€ ์ด์ œ ์ถ”์–ต์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ 'throw', 'catch', 'try' ๊ฐ™์€ ๊ฑธ ์ซ“์•„๋‹ค๋‹ˆ์ง€ ์•Š๊ณ ๋„ ์—๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋˜ ์‹œ์ ˆ์ด์—ˆ์ฃ .

Interviewer: ํ•˜์ง€๋งŒ inheritance๋Š” ์‹œ๊ฐ„ ์ ˆ์•ฝ์„ ํ•ด์ฃผ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
Stroustrup: ๊ทธ๋Ÿด๊นŒ์š”? Cํ”„๋กœ์ ํŠธ ๊ณ„ํš๊ณผ C++ํ”„๋กœ์ ํŠธ ๊ณ„ํš์˜ ์ฐจ์ด๋ฅผ ์•„์‹ญ๋‹ˆ๊นŒ? C++ ํ”„๋กœ์ ํŠธ์˜ ๊ณ„ํš ๋‹จ๊ณ„๊ฐ€ 3๋ฐฐ๋Š” ๊ธธ๊ฒŒ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ถ€๋ถ„์ด inherit๋ฅผ ํ•ด์•ผ ํ•˜๊ณ ์–ด๋–ค ๋ถ€๋ถ„์ด ์•ˆ๋˜๋Š”์ง€ ์ •ํ™•ํžˆ ๊ฐ€๋ ค๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ๋Š”, ์—ฌ์ „ํžˆ ๋ญ”๊ฐ€ ์ž˜๋ชป๋˜์–ด์žˆ์ง€์š”. C ํ”„๋กœ๊ทธ๋žจ์—์„œ memory leaks์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ง€๊ธˆ์€ ์ด๊ฑธ ์ฐพ๋Š” ๊ฒŒ ํšŒ์‚ฌ๋“ค์˜ ์ค‘์š” ์ผ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ํšŒ์‚ฌ๋“ค์ด ํฌ๊ธฐํ•˜๊ณ ๋Š” ๊ทธ๋ƒฅ ์ œํ’ˆ์„ ๋‚ด๋†“์Šต๋‹ˆ๋‹ค. leak์ด ์žˆ๋‹ค๋Š” ๊ฑธ ๋‹ค ์•Œ๋ฉด์„œ๋„ ๋‹จ์ง€ ๊ทธ๊ฑธ ์ฐพ์•„๋‚ด๋Š” ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค.

Interviewer: ๊ทธ๊ฑธ ํ•ด์ฃผ๋Š” tool๋“ค์ด ์žˆ์ŸŽ์•„์š”...
Stroustrup: ๊ทธ๊ฒƒ๋“ค์˜ ๋Œ€๋ถ€๋ถ„๋„ C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์ฃ .

Interviewer: ์ด ์ธํ„ฐ๋ทฐ๊ฐ€ ์ถœํŒ๋˜๋ฉด, ๋‹น์‹ ์€ ์•„๋งˆ ๋ฆฐ์น˜๋ฅผ ๋‹นํ•  ๊ฒ๋‹ˆ๋‹ค. ์•ˆ๊ทธ๋ ‡์Šต๋‹ˆ๊นŒ?
Stroustrup: ๊ธ€์Ž„์š”. ๋ง์”€ ๋“œ๋ ธ๋“ฏ์ด C++๋Š” ์ด์ œ ์ „์„ฑ๊ธฐ๋ฅผ ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ •์ƒ์ ์ธ ํšŒ์‚ฌ๋ผ๋ฉด ์„ ํ–‰ ์‹œ๋„(pilot trial)์„ ์•ˆํ•ด๋ณด๊ณ  C++ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐฉ์ˆ˜ํ•˜์ง€ ์•Š์„ ๊ฒ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ์žฌ์•™์œผ๋กœ ๊ฐ€๋Š” ๊ธธ์ด๋ผ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๋‹ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋Š” ๊ทธ๋“ค์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ Dennis Ritchie์—๊ฒŒ C++๋กœ Unix๋ฅผ ์žฌ์ž‘์„ฑํ† ๋ก ํ•˜๋ ค ํ–ˆ๋‹จ ๊ฑธ ์•„์‹œ์ฃ ?

Interviewer: ๋ญ๋ผ๊ตฌ์š”. ๊ทธ๊ฐ€ ๋ญ๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ?
Stroustrup: ๋‹คํ–‰ํžˆ ๊ทธ๋Š” ์œ ๋จธ ๊ฐ๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์™€ Brian์ด ์ œ๊ฐ€ ๋ฌด์Šจ ์ง“์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„๋ƒˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Š” ์ œ๊ฐ€ ์ข‹์•„ํ•œ๋‹ค๋ฉด, C++ ๋ฒ„์ ผ์˜ DOS๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฑธ ๋•๊ฒ ๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

Interviewer: ํฅ๋ฏธ๊ฐ€ ์žˆ์œผ์…จ์Šต๋‹ˆ๊นŒ?
Stroustrup: ์‹ค์ œ๋กœ C++๋กœ DOS๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋๋‚˜๋Š” ๋Œ€๋กœ demo๋ฅผ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ์‹ค์˜ Sparc 20์ƒ์—์„œ ์‹คํ–‰์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 4 CPU์—์„œ ์—„์ฒญ๋‚œ ์†๋„๋กœ ์‹คํ–‰๋˜๊ณ , 70๋ฉ”๊ฐ€ ์ •๋„์˜ ๋””์Šคํฌ๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Interviewer: PC์—์„œ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
Stroustrup: ๋†๋‹ด์ด์‹ญ๋‹ˆ๊นŒ? Windows 95์•„์‹œ์ฃ ? ์ €๋Š” Windows 95๋ฅผ ์ €์˜ ์ตœ๋Œ€ ์„ฑ๊ณต์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋น„๋ก ์ œ๊ฐ€ ์ค€๋น„ํ•˜๊ธฐ๋„ ์ „์— ์‹œํ•ฉ์„ ๋๋‚ธ ์…ˆ์ด์ง€๋งŒ์š”.

Interviewer: Unix++์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋Š” ์ •๋ง ์ƒ๊ฐํ•ด๋ณผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋””์„ ๊ฐ€ ๋ˆ„๊ตฐ๊ฐ€ ์‹œ๋„๋ฅผ ํ•˜๊ฒ ์ง€์š”.
Stroustrup: ์ด ์ธํ„ฐ๋ทฐ๋ฅผ ์ฝ์€ ๋‹ค์Œ์—” ํฌ๊ธฐํ•˜๊ฒ ์ฃ .

Interviewer: ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค๋งŒ, ์ด ์ธํ„ฐ๋ทฐ๋ฅผ ์ถœํŒํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€ ์•Š๊ตฐ์š”.
Stroustrup: ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์„ธ๊ธฐ์˜ ์Šคํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋™๋ฃŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์„ ์œ„ํ•ด ํ•œ ์ผ๋กœ ์ธํ•ด ์ œ๊ฐ€ ๊ธฐ์–ต๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ์–ผ๋งˆ๋‚˜ ๋ฒ„๋Š”์ง€ ์•„์‹ญ๋‹ˆ๊นŒ?

Interviewer: ์ œ๊ฐ€ ์•Œ๊ธฐ๋กœ, ์ œ์ผ ์ž˜๋‚˜๊ฐ€๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์‹œ๊ฐ„๋‹น ์น ํŒ”์‹ญ๋ถˆ์ •๋„์ด์ง€์š”.
Stroustrup: ๊ทธ๋ ‡์ฃ ? ๊ทธ ์ •๋„ ๋ ๊ฒ๋‹ˆ๋‹ค. ์ œ๊ฐ€ C++์— ์ง‘์–ด๋„ฃ์€ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํŒŒ์•…ํ•˜๋Š”๊ฒŒ ๋ณดํ†ต ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ „์— ๋ง์”€๋“œ๋ ธ๋“ฏ์ด, ๋ชจ๋“  C++ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋˜์ง€, C++์˜ ๊ทธ ๋ชจ๋“  ๋นŒ์–ด๋จน์„ ์š”์†Œ๋“ค์„ ๋‹ค ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฐ•๋ฐ•๊ด€๋… ๊ฐ™์€ ๊ฑธ ๋Š๋‚๋‹ˆ๋‹ค. ์ด๊ฑด ๊ฐ€๋” ์ €๋ฅผ ํ™”๋‚˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค, ๊ทธ๊ฒŒ ์•„๋ฌด๋ฆฌ ์ €์˜ ์ฒ˜์Œ ์˜๋„ ์˜€์ง€๋งŒ์š”. ๊ฒฐ๊ตญ ์ €๋Š” C++์–ธ์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

Interviewer: ์ „์—” ์ข‹์•„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?
Stroustrup: ์‹ซ์–ดํ–ˆ์—ˆ์ฃ . ์‹ฌ์ง€์–ด C++๊ฐ€ ์ง€์ €๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ํ•˜์ง€๋งŒ ์ฑ…์˜ ์ธ์„ธ๊ฐ€ ๋“ค์–ด์˜ค๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ... ๊ธ€์Ž„์š”, ์•„์‹œ๊ฒ ์ง€์š”?

Interviewer: ์ž ๊น์š”. reference๋Š” ์–ด๋–ค๊ฐ€์š”? C ํฌ์ธํ„ฐ๋ณด๋‹ค ๊ฐœ์„ ๋œ ๊ฒƒ ์•„๋‹™๋‹ˆ๊นŒ?
Stroustrup: ์Œ.. ๊ทธ๊ฑฐ์— ๋Œ€ํ•ด ํ•ญ์ƒ ์˜๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—” ๊ฐœ์„ ์ด๋ผ๊ณ  ์—ฌ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ, ํ•˜๋ฃจ๋Š” C++๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์จ์˜จ ์นœ๊ตฌ์™€ ์–˜๊ธฐํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ๋ณ€์ˆ˜๋“ค์ด reference๋˜์—ˆ๋Š”์ง€ dereference๋˜์—ˆ๋Š”์ง€ ๋„๋ฌด์ง€ ๊ธฐ์–ต ํ•  ์ˆ˜๊ฐ€ ์—†์–ด์„œ ํ•ญ์ƒ ํฌ์ธํ„ฐ๋ฅผ ์“ด๋‹ค๋”๊ตฐ์š”. '*'๋•๋ถ„์— ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋”๊ตฐ์š”.

Interviewer: ๊ธ€์Ž„์š”, ๋ณดํ†ต ์ด๋•Œ์ฏค์ด๋ฉด '๋Œ€๋‹จํžˆ ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค'๋ผ๊ณ  ๋งํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์˜ค๋Š˜์€ ๊ทธ๋ ‡๊ธฐ ํž˜๋“ค๊ฒ ๋Š”๋ฐ์š”.
Stroustrup: ์ธํ„ฐ๋ทฐ๋ฅผ ์ถœํŒํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ์š”์ƒˆ ์ œ ์–‘์‹ฌ์ด ๋งŽ์ด ์ข‹์•„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Interviewer: ๋‚˜์ค‘์— ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ, ํŽธ์ง‘์žฅ๊ป˜์„œ ๋ญ๋ผ๊ณ  ํ• ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Stroustrup: ์–ด์จŒ๋“  ๋ˆ„๊ฐ€ ๋ฏฟ๊ฒ ์Šต๋‹ˆ๊นŒ? ํ…Œ์ž… ๋ณต์‚ฌํ•œ ๊ฑธ ๋ณด๋‚ด์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Interviewer: ๊ทธ๋Ÿผ์š”.


The Real Stroustrup Interview
C++์˜ ์•„๋ฒ„์ง€๊ฐ€ ์„ค๋ช…ํ•˜๋Š”, ํ‘œ์ค€ C++์ด ๋‹จ์ˆœํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๊ฐ€ ์•„๋‹Œ ์ด์œ 
"IEEE Computer", pp.110-114, June, 1998.

C++์˜ ๋””์ž์ธ๊ณผ ๋ฐœ์ „(Addison Wesley, 1994)์— ์žˆ์–ด์„œ, Bjarne Stroustrup ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋…ผ์˜ํ–ˆ๋‹ค. "ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์‹ค์ œ๋กœ ์„ธ๊ณ„(world)์˜ ๊ทนํžˆ ์ž‘์€ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ทธ๊ฒƒ์€ ๋„ˆ๋ฌด ์‹ฌ๊ฐํ•˜๊ฒŒ ๊ฐ„์ฃผ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€๋ถ„(proportion)์˜ ๊ฐ๊ฐ(์—ญ์ž์ฃผ: 'ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์ „ ์„ธ๊ณ„์— ๋น„ํ•˜๋ฉด, ๋งค์šฐ ์ž‘์€ ๋ถ€๋ถ„์ด๋‹ค'๋Š” ๊ฐ๊ฐ)์„ ์œ ์ง€ํ•˜๋ฉด์„œ, ๊ทธ๋ฆฌ๊ณ  ๋”์šฑ ์ค‘์š”ํ•˜๊ฒŒ ์œ ๋ชจ์–ด(humor) ๊ฐ๊ฐ์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ค‘์—์„œ, C++๋Š” ์ต์‚ด๊ณผ ๋†๋‹ด์˜ ํ’๋ถ€ํ•œ ์ž์›์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์šฐ์—ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค."

์ง€๋‚œ ๋ช‡ ๋‹ฌ ๋™์•ˆ, Stroustrup๊ณผ Computer์ง€์™€์˜ ๊ฐ€์งœ(hoax) ์ธํ„ฐ๋ทฐ๊ฐ€ ์‚ฌ์ด ๋ฒ„์ŠคํŽ˜์ด์Šค์—์„œ ํšŒ์ž(make round)๋˜์—ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ ์‚ฌ๊ฑด์— ๋Œ€ํ•ด ์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ (regret) ์ƒ๊ฐํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๋กœ ํ•˜์—ฌ๊ธˆ C++์˜ ๋Œ€๋ถ€์™€, ํ‘œ์ค€ C++๊ณผ ์ผ๋ฐ˜์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ๊ทธ์˜ ํ†ต์ฐฐ๋ ฅ(insight)์„ ๋‚˜๋ˆŒ ์ข‹์€ ๊ธฐํšŒ๋ฅผ ํ—ˆ๋ฝํ•˜์˜€๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๊ทธ์˜ ์ง€์†์ ์ธ ๋ถ€๋ถ„(proportion)๊ณผ ์œ ๋จธ(humor)์— ๋Œ€ํ•œ ๊ฐ๊ฐ์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค(๊ทธ๋Š” ๊ทธ ์šฐ์Šค๊ฝ์Šค๋Ÿฌ์šด ์ธํ„ฐ๋ทฐ๋ฅผ ๋งŒ์•ฝ ๊ทธ ์ž์‹ ์ด ์ผ๋‹ค๋ฉด, ๋” ์žฌ๋ฏธ์žˆ๋Š” ๊ฐœ์ž‘(parody)์ด ๋˜์—ˆ์„ ๊ฑฐ๋ผ๊ณ  ์ œ์•ˆํ–ˆ๋‹ค).

  • Scott Hamilton, Computer
    ํ‘œ์ค€ C++(STANDARD C++)
    Computer: ISO๋Š” ํ‘œ์ค€ C++์„ 1997๋…„ 11์›” ์Šน์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ๋‹น์‹ ์˜ ์ฑ… The C++ Programming Language(Addison Wesley, 1997)์˜ 3๋ฒˆ์งธ ํŒ์„ ์ถœํŒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ ๋ช‡ ๋…„๊ฐ„ C++๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐœ์ „ํ•˜์˜€์œผ๋ฉฐ, ISO ํ‘œ ์ค€์ด C++ ๊ณต๋™์ฒด(community)์— ๋ฌด์Šจ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”์ง€ ์ด์•ผ๊ธฐํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

Stroustrup: ๋งˆ์นจ๋‚ด ์™„๋ฒฝํ•˜๊ณ (complete), ์ƒ์„ธํ•˜๋ฉฐ(detailed), ๊ฒฌ๊ณ ํ•œ(stable) C++์˜ ์ •์˜๋ฅผ ๋‚ด๋ ธ๋‹ค๋Š” ๊ฒƒ์€ ์œ„๋Œ€ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ C++ ๊ณต๋™์ฒด์— ์ง์ ‘์ ์ด๊ณ  ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฌด์ˆ˜ํ•œ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ์ œ๊ณต์ž๋“ค์€, ํ‘œ์ค€ ์œ„์›ํšŒ์˜ ๋‚ด์šฉ๋“ค์„ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ(catching up with the standards committee)์—์„œ ์ด์ œ๋Š” ๊ตฌํ˜„์˜ ์งˆ์— ๊ด€ํ•œ ๋…ผ์Ÿ์œผ๋กœ ์Ÿ์ ์„ ์ด๋™์‹œํ‚ค๊ธฐ ์‹œ์ž‘ํ•จ์— ๋”ฐ๋ผ์„œ, ๋ถ„๋ช…ํžˆ ์šฐ๋ฆฌ๋Š” ๋” ์ข‹์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ ‘ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฏธ ์ง„ํ–‰์ค‘์ž…๋‹ˆ๋‹ค.

ํ‘œ์ค€์„ ์ˆ˜์šฉํ•˜๋Š” ๊ตฌํ˜„์€ ํˆด์˜ ํ˜œํƒ๊ณผ ํฐ ๊ณตํ†ต ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ๊ณต์ž์˜ ํ˜œํƒ์„ ๊ฒฝํ—˜ํ•˜๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ‘œ์ค€์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ๊ณผ ํ•จ๊ป˜ ๋” ๋„์ „์ ์ธ ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์ œํ’ˆ์˜ ์ฝ”๋“œ์—์„œ ๋น„์‹ค์ œ์ ์ธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–‘์‹์€ ์‹ค์ œ์ ์ธ ๊ณ„ํš(proposition)์ด ๋˜์–ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ, ๋” ์œ ์—ฐํ•˜๊ณ (flexible), ์ผ๋ฐ˜์ ์ด๊ณ (general), ๋น ๋ฅธ(faster), ๊ทธ๋ฆฌ๊ณ  ๋” ์œ ์ง€ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ, ์šฐ๋ฆฌ๋Š” ๋ƒ‰์ •์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ณ , "๊ฐœ์„ ๋œ" ๊ธฐ๊ต์˜ ์ฃผ์—ฐ(orgy)์— ํƒ๋‹‰(indulge)ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(์—ญ์ž์ฃผ: ๊ฐœ์„ ๋œ C++์˜ ๊ธฐ๊ต๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•œ ์ผ์ด ์•„๋‹ˆ๋ผ๋Š” ์ฃผ์žฅ). ๊ธฐ์ ์€ ์—ฌ์ „ํžˆ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ข‹์€ ์ฝ”๋“œ๋Š” ์—ฌ์ „ํžˆ ํƒ„ํƒ„ํ•œ ๋””์ž์ธ๊ณผ ๋Œ€๋ถ€๋ถ„ ์ง์ ‘์ ์œผ๋กœ ๋งค์น˜๋˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋ฐ”๋กœ ์ง€๊ธˆ์€, ์–ด๋–ค ๊ธฐ๊ต๊ฐ€ ํŠน์ •ํ•œ ์‚ฌ๋žŒ, ์กฐ์ง, ํ˜น์€ ํ”„๋กœ์ ํŠธ์— ์ ๋‹นํ•œ์ง€, ์‹คํ—˜ํ•˜๊ณ  ์‚ดํŽด๋ณผ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. The C++ Programming Language์˜ ๋งŽ์€ ๋ถ€๋ถ„์€ ์ด๋Ÿฌํ•œ ๊ธฐ๊ต์™€ ๊ทธ๊ฒƒ๋“ค์ด ์ œ๊ณตํ•˜๋Š” ํฅ์ •๊ด€๊ณ„(trade-offs)๋ฅผ ๊ธฐ์ˆ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ง„๋ณด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š”, ์šฐ๋ฆฌ๊ฐ€ ๋ˆˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€, ์–ธ์–ด์˜ ์ƒˆ ๋กœ์šด ํฐ ๊ธฐ๋Šฅ - ํ…œํ”Œ๋ฆฟ(template), ์˜ˆ์™ธ์ฒ˜๋ฆฌ(exception), ์‹คํ–‰์‹œ ํ˜• ์ •๋ณด (runtime type information), ์ด๋ฆ„๊ณต๊ฐ„(namespace) - ๊ณผ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์–ธ์–ด์˜ ์ž์„ธํ•œ ๋ถ€๋ถ„์˜ ์ž‘์€ ๊ฐœ์„  ๋˜ํ•œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ œ ์—ฌ๋Ÿฌ ํ•ด ๋™์•ˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ–ˆ๋˜ ์œ ์šฉํ•œ ๊ฒƒ๋“ค์„ ๋Œ€๋ถ€๋ถ„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ˜ธํ™˜์„ฑ๊ณผ ์ œํ’ˆ์˜ ํ’ˆ์งˆ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ณณ์— ๋Œ€ํ•ด์„œ๋Š” ๊ทธ๊ฒƒ๋“ค์— ํฌ๊ฒŒ ์˜์กดํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๋กœ ํ•˜์—ฌ๊ธˆ, ์šฐ๋ฆฌ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ์ตœ์ ์ด ์•„๋‹Œ ์ฐจ์„ (suboptimal)์„ ์„ ํƒํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๊ณง(์˜ฌ ํ•ด 1998๋…„) ๋ชจ๋“  ํฐ ๊ตฌํ˜„์ด ํ‘œ์ค€ C++๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ ์ง€์›ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ ๋‹ค.

์–ธ์–ด์™€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๊ต์˜ ๊ด€์ ์—์„œ C++์— ๊ฐ€ํ•ด์ง„ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ณ€ํ™”๋Š”, ์ • ์ ์œผ๋กœ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅํ•œ ํ˜• ์•ˆ์ •์„ฑ(staticaly verifiable type safety)์— ๋Œ€ํ•œ ๊ฐ•์กฐ์˜ ๊ณ„์†์ ์ธ ์ฆ๊ฐ€์™€ ํ…œํ”Œ๋ฆฟ์˜ ์ฆ๊ฐ€๋œ ์œ ์—ฐ์„ฑ์ž…๋‹ˆ๋‹ค. ์œ ์—ฐํ•œ ํ…œํ”Œ๋ฆฟ์€ ์šฐ์•„ํ•จ (elegance)(์—ญ์ž์ฃผ: ๋ช…์‹œ์ ์ธ ํ˜• ๋ณ€ํ™˜์ด ํ•„์š”์—†๋Š” C++ ํ”„๋กœ๊ทธ๋žจ์€ ์ฝ๊ธฐ ์‰ฝ๋‹ค. ์ด๊ฒƒ์„ ์šฐ์•„ํ•˜๋‹ค๊ณ  ํ‘œํ˜„ํ•œ ๊ฒƒ ๊ฐ™๋‹ค)๊ณผ ํšจ์œจ์„ฑ(efficiency)์— ์ฃผ๋ชฉํ•˜๋Š” ํ˜• ์•ˆ์ • ์„ฑ์„ ๊ฐ•์กฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์˜ ์‹คํ–‰๊ฐ€๋Šฅ์„ฑ(Feasibility of new techniques)
Computer: ๋‹น์‹ ์€ ๋งํ•˜๊ธฐ๋ฅผ "์ˆ™๋ จ๋œ C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ์กฐ์ฐจ๋„ ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์€ ๊ทธ๋Ÿฌํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ, ๊ธฐ๋ณธ์ ์ธ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๊ต๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค๊ฐ„์˜ ๊ด€๊ณ„์˜ ๋ณ€ํ™”์ด๋‹ค." ๋ผ๊ณ  ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ด๊ฒƒ์ด ํ‘œ์ค€ C++์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

Stroustrup: ์˜ค๋ฒ„๋กœ๋”ฉ์ด๋‚˜ ํ…œํ”Œ๋ฆฟ์ด ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ์šฐ์•„ํ•˜๊ณ  ํšจ๊ณผ์ ์ธ ํ˜• ์•ˆ์ • ์ปจํ…Œ์ด๋„ˆ์˜ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ชจ๋ฅด๊ณ ๋„, ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ํ…œํ”Œ๋ฆฟ์€ ๊ทœ์น™๋“ค์„ ๊ฐ๊ฐ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ(์—ญ์ž์ฃผ: ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ํ…œํ”Œ๋ฆฟ์˜ ์—ฐ๊ฒฐ)์€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ทผ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž์„ธํ•˜๊ฒŒ ์‚ดํŽด๋ณผ ๋•Œ์—๋งŒ ๋ช…ํ™•ํ•ด ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ฆผ 1a์˜ ํ”„๋กœ๊ทธ๋žจ ์กฐ๊ฐ(segment)์„ ๊ณ ๋ คํ•ด ๋ด…์‹œ๋‹ค. count()์˜ ์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœ์€ ์ •์ˆ˜ ๋ฒกํ„ฐ์—์„œ 7์˜ ํšŸ์ˆ˜๋ฅผ ํ—ค์•„๋ฆฝ๋‹ˆ๋‹ค. count()์˜ ๋‘ ๋ฒˆ์งธ ํ˜ธ์ถœ์€ ์ŠคํŠธ๋ง ๋ฆฌ์ŠคํŠธ์—์„œ "seven"์˜ ํšŸ์ˆ˜๋ฅผ ํ—ค์•„๋ฆฝ๋‹ˆ๋‹ค.

// Figure 1a:

void f(vector& vi, list& ls)
{
int n1 = count(vi.begin(),vi.end(),7);
int n2 = count(ls.begin(),ls.end(),"seven");
// ...
}

// Figure 1b:

template
int count(Iter first, Iter last, T value)
{
int c = 0;
while (first!=last) {
if (*first == value) c++;
++first;
}
return c;
}

๊ทธ๋ฆผ 1. ๊ธฐ๋Šฅ๋“ค๊ฐ„์˜ ๊ด€๊ณ„์˜ ์ฐจ์ด๋Š” ๊ทผ๋ณธ์ ์ธ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๊ต๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค: (a) ์ •์ˆ˜ ๋ฒกํ„ฐ์˜ 7์„ ํ—ค์•„๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ŠคํŠธ๋ง ๋ฆฌ์ŠคํŠธ์˜ "seven"์„ ํ—ค์•„๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ…œํ”Œ๋ฆฟ์„ ์ด์šฉํ•˜์—ฌ ๋‘˜ ๋ชจ๋‘๋ฅผ ๋‹ค๋ฃจ๋Š” (b) ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ง€์›ํ•˜๋Š” ๊ฐ๊ฐ์˜ ์–ธ์–ด์—์„œ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ์ด ์ฃผ์–ด์ง€๋ฉด, ๋‘˜ ๋ชจ๋‘์˜ ํ˜ธ์ถœ์„ ๋‹ค๋ฃจ๋Š” ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋ฆผ 1b์ฒ˜๋Ÿผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ…œํ”Œ๋ฆฟ์€ ๋‘˜์˜ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ์ตœ์ ์œผ๋กœ ํ™•์žฅ(์—ญ์ž์ฃผ: ์‹ค์ œ๋กœ ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ํ…œํ”Œ๋ฆฟ์„ ํ˜ธ์ถœํ•œ ๋ฌธ๋ฒ•์— ๋”ฐ๋ผ ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์ด๊ฒƒ์„ ํ™•์žฅ(expansion)์ด๋ผ ํ•œ๋‹ค)๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด count()๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ count()์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ count()๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•  ํ•„ ์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. count()ํ•จ์ˆ˜๋Š” ๊ทธ ์ž์ฒด๊ฐ€ ์˜ค๋ฒ„๋กœ๋”ฉ์— ์˜์กดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค: ๋ช…ํ™• ํžˆ ๋“ฑํ˜ธ ์—ฐ์‚ฐ์ž ==๋Š” ์ •์ˆ˜์™€ ์ŠคํŠธ๋ง์— ๋Œ€ํ•ด ์˜ค๋ฒ„๋กœ๋”ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ * ์™€ ++๋Š” ๊ฐ๊ฐ ๋ฒกํ„ฐ์™€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ฐ˜๋ณต ํ˜•(iterator type)์„ ์œ„ํ•˜์—ฌ "์—ญ์ฐธ์กฐ(dereference)"์™€ "๋‹ค์Œ ์š”์†Œ ์ฐธ์กฐ"๋กœ ์˜ค๋ฒ„๋กœ๋”ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ๋งํ•˜๋ฉด, *์™€ ++๋Š” ํฌ์ธํ„ฐ๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ๋“ค์ด ๊ฐ€์ง€๋Š” ์˜๋ฏธ๊ฐ€ ์ฃผ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

count()์˜ ์ด๋Ÿฌํ•œ ์ •์˜๋Š” C++ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ปจํ…Œ์ด๋„ˆ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์‚ฌ์šฉ๋œ ์ค‘์š” ๊ธฐ๊ต์˜ ๊ฒฐํ•ฉ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๊ต๋Š” ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์˜ค๋กœ์ง€ ๊ธฐ๋ณธ์ ์ธ ์–ธ์–ด์˜ ๊ทœ์น™์— ์˜ํ•ด์„œ๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

// Figure 2a:

template
int count_if(Iter first, Iter last, Predicate pred)
{
int c = 0;
while (first!=last) {
if (pred(*first)) c++;
++first;
}
return c;
}

// Figure 2b:

bool less_than_7(int i) { return i<7; }

void f2(vector& vi, list& li)
{
int n1 = count_if(vi.begin(),vi.end(),less_than_7);
int n2 = count_if(li.begin(),li.end(),less_than_7);
// ...
}

๊ทธ๋ฆผ 2. ์นด์šดํŠธ ์˜ˆ์ œ์˜ ๋” ์ง„๋ณด๋œ ๋ฒ„์ „: (a)๋Š” predicate๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ํ—ค์•„๋ฆฐ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด (b)๋Š” 7๋ณด๋‹ค ์ž‘์€ ์š”์†Œ์˜ ์ˆ˜๋ฅผ ํ—ค์•„๋ฆฐ๋‹ค.

๊ทธ๋ฆผ 2a์— ์ œ์‹œ๋œ ์ข€ ๋” ์ง„๋ณด๋œ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•ด ๋ด…์‹œ๋‹ค. ๊ฐ’์˜ ํšŸ์ˆ˜๋ฅผ ํ—ค์•„๋ฆฌ๋Š” ๋Œ€์‹ ์—, count_if()๋Š” predicate๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ํ—ค์•„๋ฆฝ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๊ทธ๋ฆผ 2b์ฒ˜๋Ÿผ 7๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ํ—ค์•„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ๊ต๋ฅผ ์ผ๋ฐ˜ํ™”ํ•˜์—ฌ, ์–ด๋– ํ•œ ํ˜•์˜ ์–ด๋– ํ•œ ๊ฐ’๋„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด(function object) - ๊ทธ๋ฆผ 3a์ฒ˜๋Ÿผ ๊ฐ์ฒด๊ฐ€ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋ถˆ๋Ÿฌ ๋‚ด์–ด์งˆ(invoke) ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค - ๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆผ 3b์ฒ˜๋Ÿผ ์ƒ์„ฑ์ž ๋น„๊ต๋ฅผ ์›ํ•˜๋Š” ๊ฐ’์˜ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  () ์—ฐ์‚ฐ์ž๋Š” ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๊พธ์–ด ๋งํ•˜๋ฉด, vi์— ์žˆ๋Š” ์š”์†Œ์ค‘์— 7๋ณด๋‹ค ์ž‘์€ ์š”์†Œ์˜ ์ˆ˜๋ฅผ ํ—ค์•„๋ฆฌ๊ณ , ls์— ์žˆ๋Š” ์š”์†Œ์ค‘์— "seven"๋ณด๋‹ค ์ž‘์€ ์š”์†Œ์˜ ์ˆ˜๋ฅผ ํ—ค์•„๋ฆฝ๋‹ˆ๋‹ค.

// Figure 3a:

template class Less_than {
const T v;
public:
Less_than(const T& vv) :v(vv) {} // constructor
bool operator()(const T& e) { return e };

// Figure 3b:

void f3(vector& vi, list& ls)
{
int n1 = count_if(vi.begin(),vi.end(),
Less_than(7));
int n2 = count_if(ls.begin(),ls.end(),
Less_than("seven"));
// ...
}

๊ทธ๋ฆผ 3. ์–ด๋–ค ํ˜•์˜ ์–ด๋–ค ๊ฐ’๋„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด, ์šฐ๋ฆฌ๋Š” ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋ถˆ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋Š” (a) ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค. ์ƒ์„ฑ์ž๋Š” (b)์—์„œ ์ฒ˜๋Ÿผ, ๋น„๊ตํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์˜ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•œ๋‹ค(์—ญ์ž์ฃผ: count_if()์˜ ์„ธ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” Less_than ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฌธ์žฅ์ด๋‹ค. ์ด ์ž„์‹œ ๊ฐ์ฒด๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ๋‹ค. ๋ฌผ๋ก  count_if()์˜ ๋‚ด๋ถ€์—์„œ๋Š” ์ด ๊ฐ์ฒด์˜ ์˜ค๋ฒ„๋กœ๋”ฉ๋œ ์—ฐ์‚ฐ์ž ()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค).

์ƒ์„ฑ๋œ ์ฝ”๋“œ๋Š” ๋งค์šฐ ํšจ์œจ์ ์ด๋ฉฐ, ํŠน๋ณ„ํžˆ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•˜๋Š”๋ฐ, ํ•จ์ˆ˜ ํ˜ธ์ถœ - ํ˜น์€ ๋น„์Šทํ•œ ๋Šฆ์€ ์—ฐ์‚ฐ์ž - ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ(์—ญ์ž์ฃผ: ์ž์„ธํ•œ ์‚ฌํ•ญ์€ 'ํ•จ์ˆ˜ ๊ฐ์ฒด'๋ฅผ ์ฐธ๊ณ ํ•˜๋ผ)์€ ์–ธ๊ธ‰ํ•  ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

์˜์‹ฌํ•  ์—ฌ์ง€๋„ ์—†์ด, ์ด ์ฝ”๋“œ๋Š” C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ์—๊ฒŒ, ํ˜น์€ ํ…œํ”Œ๋ฆฟ๊ณผ ์˜ค๋ฒ„๋กœ๋”ฉ์˜ ๊ฐœ๋…์„ ์ตํžˆ์ง€ ๋ชปํ•œ C++ ํ”„๋กœ๊ทธ๋žจ๋จธ์—๊ฒŒ ์กฐ์ฐจ๋„ ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๊ฒƒ์€ ์ด ์˜ˆ์ œ๋ฅผ ์—ฌ๊ธฐ์„œ ์ œ์‹œํ•œ ์ด์œ  ์ค‘์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ง„์งœ ์˜๋„(bottom line)๋Š” ์ด ๊ธฐ๊ต๊ฐ€ ๋‹น์‹ ์—๊ฒŒ ํšจ์œจ์ ์ด๊ณ , ํ˜• ์•ˆ์ •์  ์ด๊ณ , ์ผ๋ฐ˜์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ์–ธ์–ด(functional language)(์—ญ์ž์ฃผ: LIST๊ฐ™์€ ์–ธ์–ด๋ฅผ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๋ผ ํ•œ๋‹ค)์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์ด๋Ÿฌํ•œ ๊ธฐ๊ต๊ฐ€ ๊ทธ๋Ÿฌํ•œ ์–ธ์–ด์—์„œ ์„ ๊ตฌ์ ์œผ๋กœ ๊ฐœ์ฒ™๋œ ๊ธฐ๊ต์™€ ์œ ์‚ฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ ธ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ธ์–ด์˜ ๋ชจ์Šต์€ ๋ถ„๋ฆฌ๋˜์—ˆ์„ ๋•Œ ๊ทผ๋ณธ์ ์œผ๋กœ ์ง€๋ฃจํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์ข‹์€ ์‹œ์Šคํ…œ ์„ค๊ณ„๋กœ๋ถ€ํ„ฐ ํฉ๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ค์ง ์–ธ์–ด๊ฐ€ ์‚ด์•„๋‚จ์•„์•ผ ํ•  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๊ต์˜ ์ธก๋ฉด์—์„œ).
ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(The Standard Library)
Computer: ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋˜ํ•œ ๊ทธ๊ฒƒ์ด C++ ๊ณต๋™์ฒด์— ๋ฌด์Šจ ์˜ํ–ฅ์„ ๋ผ์น ๊นŒ์š”?

Stroustrup: ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ€์žฅ ์ƒˆ๋กญ๊ณ  ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„์€ ์ปจํ…Œ์ด๋„ˆ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ผ๋ฐ˜์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ณจ๊ฒฉ(framework)์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ข…์ข… STL ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š”๋ฐ, ๊ทผ๋ณธ์ ์œผ๋กœ Alex Stepanov์˜ ์ž‘ํ’ˆ์ž…๋‹ˆ๋‹ค(๊ทธ ๋‹น์‹œ Hewlett-Packard์—์„œ ์ง€๊ธˆ์€ Silicon Graphics์— ์žˆ๋‹ค).

Alex๋Š” ํ™•๊ณ ํ•˜๊ฒŒ(uncompromisingly) ์ผ๋ฐ˜์ ์ด๋ฉด์„œ ํšจ์œจ์ ์ธ ๊ทผ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ผ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ž๋ฃŒ ๊ตฌ์กฐ์—์„œ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ, ์ž๋ฃŒ ๊ตฌ์กฐ์—์„œ ๊ฐ’์˜ ํšŸ์ˆ˜๋ฅผ ํ—ค์•„๋ฆฌ๋Š” ๊ฒƒ ๋“ฑ์ž…๋‹ˆ ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋งŽ์€ ๊ณ„์‚ฐ์—์„œ ๊ทผ๋ณธ์ ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Alex๋Š” ๋งŽ์€ ์ข…๋ฅ˜์˜ ์–ธ์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๋…„๊ฐ„ ๊ณต๋™ ์—ฐ๊ตฌ์ž๋“ค์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋ชฉํ• ๋งŒํ•œ ์ด๋“ค์€ David Musser(Rensselaer Polytechnic Institute), Meng Lee(HP Labs), Andrew Koenig(AT&T Labs) ๋“ฑ ์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ STL์— ๊ณตํ—Œํ•œ ๋ถ€๋ถ„์€ ๋งค์šฐ ์ž‘์ง€๋งŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค: ์ €๋Š” ์–ด๋Œ‘ํ„ฐ(adapter)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” mem_fun()์„ ๋””์ž์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹คํ˜• ๊ฐ์ฒด(polymorphic object)์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์œ„ํ•ด์„œ ํ‘œ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(์—ญ์ž์ฃผ: ์–ด๋Œ‘ํ„ฐ๋Š” ํฌ๊ธฐ๊ฐ€ ๋™์ ์ธ ๊ฐ€๋ณ€ ๊ฐ์ฒด๋ฅผ ์ปจํ…Œ์ด๋„ˆ ์—ฐ์‚ฐ์˜ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์„ ๋งํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค). ์ด์ฒ˜๋Ÿผ, ๊ฐ์ฒด ์ง€ํ–ฅ ๊ธฐ์ˆ ์„ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์ด ๊น”๋”ํ•˜๊ฒŒ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณจ๊ฒฉ์— ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์†Œ ๋†€๋ž๊ฒŒ๋„, STL์€ ์ œ๊ฐ€ ๋ช‡๋…„ ์ „์— ๊ฐœ๋ฐœํ•œ C++์„ ์œ„ํ•œ ํ‘œ์ค€ ์ปจํ…Œ์ด๋„ˆ์˜ ์ข‹์€ ์ง‘ํ•ฉ์„ ๊ฒฐ์ •ํ•˜๋Š” ํŒ๋‹จ๊ธฐ์ค€๊ณผ ์ผ์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 1๋…„ ํ›„, STL์— ๋Œ€ํ•ด ์˜๋…ผํ•˜๊ณ  ๋งˆ๋ฌด๋ฆฌํ•œ ํ›„, ISO C++ ์œ„์›ํšŒ๋Š” STL์„ C++๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์œผ๋กœ ๋ฐ›์•„๋“ค์˜€์Šต๋‹ˆ๋‹ค. ์ €์˜ ํŒ๋‹จ๊ธฐ์ค€๋„ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ„๋‹จํ•œ ๊ธฐ๋ณธ ์—ฐ์‚ฐ์˜ ํ™•๊ณ ํ•œ ํšจ์œจ์„ฑ(์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋ฐฐ์—ด์˜ ์ธ๋ฑ์‹ฑ (subscripting)์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ๋น„์šฉ์„ ์œ ๋ฐœํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค);

ํ˜• ์•ˆ์ •์„ฑ(type-safety)(์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ์˜ ๊ฐ์ฒด๋Š” ๋ช…์‹œ์ ์ธ(explicit) ํ˜น์€ ํ•จ์ถ•์ ์ธ(implicit) ํ˜• ๋ณ€ํ™˜ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค);

์ผ๋ฐ˜์„ฑ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฒกํ„ฐ,๋ฆฌ์ŠคํŠธ,๋งต ๊ฐ™์€ ๋ช‡ ๊ฐœ์˜ ์ปจํ…Œ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค);

ํ™•์žฅ์„ฑ(๋‚ด๊ฐ€ ํ•„์š”๋กœํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ ์šฐ, ๋‚ด๊ฐ€ ์ปจํ…Œ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ํ‘œ์ค€ ์ปจํ…Œ์ด๋„ˆ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค).
์•ฝ๊ฐ„์˜ ์ˆ˜์ •๊ณผ ์ถ”๊ฐ€๋ฅผ ๊ฑฐ์นœ STL์„ ์ฑ„ํƒํ•จ์œผ๋กœ์จ, ์œ„์›ํšŒ์—์„œ ํ•ด์•ผ ํ•  ๋”์ฐํ•œ ๋””์ž์ธ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ช…ํ™•ํžˆ, C++ ํ‘œ์ค€ ์œ„์›ํšŒ์˜ ์‹œ๊ฐ„์ œ ๊ทผ๋ฌด์ž์˜ ๊ทธ๋ฃน์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์œ ์šฉํ•˜ ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ค‘ ์š”ํ•œ ์Ÿ์ ์€ ๋ฌด์—‡์ด ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๊ณ , ๋ฌด์—‡์ด ๊ธฐ์—…๊ณผ ๊ฐœ์ธ ์ด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚จ๊ฒจ์ ธ์•ผ ํ•˜๋Š” ๊ฒƒ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์ด ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€์˜ ๊ธธ์žก์ด๋กœ "๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ ๋ฆฌ ์‚ฌ์ด์˜ ํ†ต์‹  ์—ญํ• ์„ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ฒƒ"์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ, I/O, ์ŠคํŠธ๋ง, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํฐ ์ด›์ ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ˆ˜ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๋ช‡ ๊ธฐ๋Šฅ์„ ์—ญ์‚ฌ์ ์ธ ์ด์œ  ๋•Œ๋ฌธ์— ํฌํ•จ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ž  ์žฌ์ ์œผ๋กœ ์œ ์šฉํ•œ ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค - ๋‚ ์งœ์™€ ํ†ตํ™”, ์ •๊ทœ ํ‘œํ˜„ ๋งค์นญ, ๊ทธ๋ž˜ํ”ฝ - ์„ ๋‚จ๊ฒจ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ๋„, ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์€ ๊ณต๊ฐœ ํ˜น์€ ์ƒ์—…์ ์œผ๋กœ ์ด์šฉ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฐ”ํ€ด๋ฅผ ๋‹ค์‹œ ๋ฐœ๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๊ตฌํ•ด๋ƒ…๋‹ˆ๋‹ค. ํŠน๋ณ„ํžˆ, ํ‘œ์ค€ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ดˆ๋ณด์ž๋‚˜ ์ˆ™๋ จ์ž ๋ชจ๋‘์—๊ฒŒ ๋†’์€ ์ˆ˜์ค€์˜ ํ”„๋กœ๊ทธ๋žจ (high level programming)์„ ํ—ˆ๋ฝํ•ฉ๋‹ˆ๋‹ค. ์‰ฌ์šด ์ผ์„ ๊ฐ„๋‹จํžˆ ์ฒ˜๋ฆฌํ•˜๋Š”, ๊ทธ๋ฆผ 4 ์˜ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ ๋ คํ•ด ๋ด…์‹œ๋‹ค.

// Figure 4:

int main()
{
cout << "Please enter your first name:\n";
string name;
cin >> name; // read into name cout
<< "Hello" << name << "!\n";
}

๊ทธ๋ฆผ 4. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” "Hello" ํ”„๋กœ๊ทธ๋žจ

๋งคํฌ๋กœ๋„ ์ด์šฉํ•˜์ง€ ์•Š๊ณ , ๋ช…์‹œ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋‚˜ ๋‹ค๋ฅธ ๊ณ  ์ˆ˜์ค€ ์–ธ์–ด์˜ ๊ธฐ ๋Šฅ์„ ์ด์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฆฌ์†Œ์Šค์˜ ์ œํ•œ๋„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠน๋ณ„ํžˆ, ๋งŒ์•ฝ ์–ด๋–ค ์ต์‚ด๊พผ(joker)์ด ์ž์‹ ์˜ ์ฒซ ๋ฒˆ์งธ ์ด๋ฆ„์œผ๋กœ 30,000์ž๋ฅผ ์ ๋Š”๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ์—๋Ÿฌ ๋‚˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์—†์ด ํ”„๋กœ๊ทธ๋žจ์€ ์ถฉ์‹คํžˆ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์€ C++๊ฐ€ ๋ฐฐ์›Œ์ง€๋˜ ๋ฐฉ๋ฒ•์˜ ํ˜๋ช…์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ณ  ์ผ์œผ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ C++์„ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋กœ์จ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ ๋‹ˆ๋‹ค. ํ•™์ƒ๋“ค์€ ์ด์ œ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ๋“ค์„ ๋‹ค๋ฃจ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ˜น์€ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ๋“ค์„ ์–ธ๊ธ‰ํ•  ์ ์ ˆํ•œ ์‹ค๋ ฅ๋“ค์ด ์Œ“์ด ๊ณ  ๋‚˜์„œ ๋ณด์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ, ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋„๊ตฌ์™€ ๊ต์‚ฌ๋กœ์„œ์˜ ์—ญํ• ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ณต์žก์„ฑ, C++์™€ ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ(COMPLEXITY, C++, AND OOP)
Computer: The C++ Programming Language์—์„œ ๋‹น์‹ ์€ ๋งํ•˜๊ธฐ๋ฅผ "์ •์ƒ์  ์ธ ์‹ค์šฉ์ ์ธ(practical) ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ์ƒ์‚ฐ์„ฑ, ์œ ์ง€๋ณด์ˆ˜, ์œ ์—ฐ์„ฑ๊ณผ ์–ด๋– ํ•œ ์ข… ๋ฅ˜์™€ ์Šค์ผ€์ผ์˜ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ํ’ˆ์งˆ์— ๋Œ€ํ•ด์„œ๋„ ๋†€๋ž„๋งŒํ•œ ํ–ฅ์ƒ์„ ๋‹ฌ์„ฑํ–ˆ๋‹ค." ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„์ง ๋ช‡๋ช‡ ๋น„ํ‰๊ฐ€๋“ค์€ C++๊ณผ ์ผ๋ฐ˜์ ์ธ OO๋Š” ์—ฌ์ „ํžˆ ๋„ˆ ๋ฌด ๋ณต์žกํ•˜๊ณ , ๊ต์ • ์œ ์ง€๋ณด์ˆ˜(corrective-maintenance)๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋ฉฐ, ํฐ ์‹œ์Šค ํ…œ์—์„œ์˜ ์œ ์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋˜ ์ด๋Ÿฌํ•œ ๋น„ํ‰์ด, ๋‹น์‹  ์ž์‹ ์˜ ๊ฒฝ ํ—˜์œผ๋กœ ๋ณผ ๋•Œ, C++๋กœ ์„ค๊ณ„ํ•˜๋Š” ํฐ ์‹œ์Šคํ…œ์˜ ๊ฐœ๋ฐœ์— ์ ์šฉ๋˜๋Š” ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ ๋‹ˆ๊นŒ?

Stroustrup: ์ €์˜ ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜์œผ๋กœ, OO ์„ค๊ณ„์™€ OO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ „ํ†ต์ ์ธ ์ ˆ์ฐจ์ ์ธ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ ๋‹น์‹ ์ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ฝ”๋“œ๋Š” ๋”์šฑ ์œ ์—ฐํ•˜๊ณ (flexible), ๋”์šฑ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ (extensible), ์‹ฌ๊ฐํ•œ ์ˆ˜ํ–‰์ƒ์˜ ๋ถ€ํ•˜(overhead)์—†์ด ์œ ์ง€ ๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ (maintainable) ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์— ๋ฐ˜๋Œ€๋˜๋Š” ์ œ๊ฐ€ ์ข‹์•„ํ•  ๋งŒํ•œ ๊ฐ•ํ•œ ์ฆ๊ฑฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, AT&T ๋‚ด๋ถ€์—์„œ์˜ ๋ช‡๋ช‡ ์—ฐ๊ตฌ์™€ ๋‹ค๋ฅธ ์—ฐ๊ตฌ๋“ค ์€ ์ด๋Ÿฌํ•œ ์˜๊ฒฌ์„ ์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ์š”์†Œ๊ฐ€ ์Ÿ์ ์„ ๋‚œ์ฒ˜ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค: "๊ฐ์ฒด ์ง€ํ–ฅ์ "์ธ ๊ฒƒ์ด ์ •๋ง๋กœ ๋ฌด์—‡์ธ์ง€ ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๋™์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ† ๋ก ์€ ์ข€์ฒด ๊ฒฝํ—˜์„ ์ถฉ๋ถ„ํžˆ ์„ค๋ช…ํ•˜ ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. "OO์˜ ๋ฌธ์ œ"์˜ ๋งŽ์€ ๋ถ€๋ถ„์€ ์ •๋ง๋กœ OO๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์ ์ธ ์ดํ•ด๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์ด ์•ผ๋ง์ฐฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ์„œ ๋น„๋กฏํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด OO๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ™•์‹คํžˆ ์ข‹์€ ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋‘๊ฐ€ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ์ข‹์€ ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ทธ๋ ‡ ๋‹ค๋ฉด "๊ฐ์ฒด ์ง€ํ–ฅ์ "์ธ ๊ฒƒ์ด ๋‹จ์ˆœํžˆ "์ข‹์€ ๊ฒƒ"์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๋‹น์‹ ์ด ์‹ค์ œ์ ์ธ ๊ฒฐ์ •์„ ๋‚ด๋ ค์•ผ ํ•  ๋•Œ ๊ฐœ๋…์„ ํ˜ผ๋™ํ•˜๊ฒŒ ํ•˜๋Š” ํ•˜๋‚˜์˜ ์ถ”๊ฐ€๋œ ์ „๊ณต์šฉ์–ด(buzzword)์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” OOP๋ฅผ ํด๋ž˜์Šค์˜ ์ƒ์†๊ณผ ๊ฐ€์ƒํ•จ์ˆ˜(์–ด๋–ค ์–ธ์–ด์—์„œ๋Š” ๋ฉ”์„œ๋“œ(method)๋ผ๊ณ  ํ•˜๋Š”)๋ฅผ ๋งŽ์€ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋™์ผ์‹œํ•˜ ๊ณค ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ •์˜๋Š” ์—ญ์‚ฌ์ ์œผ๋กœ๋Š” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ํด๋ž˜์Šค ๊ณ„์ธต๊ณผ ๊ฐ€ ์ƒ ํ•จ์ˆ˜๋Š” ๊ทธ ๋‹น์‹œ ์‹œ๋ฎฌ๋ผ(Simula)์™€ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ๊ตฌ๋ถ„์ง“๋Š” ์ฒ ํ•™์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, Smalltalk์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ๊ฐ•์กฐ๋œ ๊ฒƒ์€ ์‹œ๋ฎฌ๋ผ ์œ ์‚ฐ์˜ ์ด๋Ÿฌํ•œ ๊ด€์  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ๊ณ„์ธต๊ณผ ๊ฐ€์ƒ ํ•จ์ˆ˜์— ๊ธฐ์ดˆํ•˜์—ฌ OO๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ OO๊ฐ€ ์„ฑ๊ณตํ•  ๊ฒƒ ๊ฐ™์€ ๊ณณ์œผ๋กœ์˜ ๋ช‡ ์ง€์นจ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์šฉ์ ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์€, ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ™ ์€ ํ˜•์ด ์•„๋‹ˆ์ง€๋งŒ ๊ณตํ†ต์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์กฐ์ž‘๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ, ๊ตฌํ˜„์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…๋“ค์˜ ๋ณ€์ฒด(variant)๋ฅผ ์œ„ํ•œ ๊ณ„์ธต์ ์ธ ์ˆœ์„œ๋ฅผ ๊ฐ€์ง„ ๊ฐœ๋…๋“ค ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋ช‡ ์˜ˆ์ œ์™€ ์•ฝ๊ฐ„์˜ ๊ฒฝํ—˜์„ ํ•œ๋‹ค๋ฉด, ์ด๊ฒƒ์ด ๋””์ž์ธ์„ ์œ„ํ•œ ๋งค์šฐ ๊ฐ• ๋ ฅํ•œ ์ ‘๊ทผ์˜ ๊ธฐ์ดˆ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ๋ชจ๋“  ๊ฐœ๋…์ด ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ์œ ์šฉํ•˜๊ฒŒ ๊ณ„์ธต(hierarchy)๊ณผ ์ ํ•ฉํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐœ๋…๋“ค๊ฐ„์˜ ๋ชจ๋“  ๊ด€๊ณ„๊ฐ€ ๊ณ„์ธต์ ์ธ ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ , ๋ชจ๋“  ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ฐ์ฒด์— ์ค‘์‹ฌํ•œ ์ ‘๊ทผ์ด ์ตœ์„ ์ธ ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋ช‡ ๋ฌธ์ œ๋“ค์€ ๊ทผ๋ณธ์  ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ (algorithmic)์ž…๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ, ์ผ๋ฐ˜ ๋ชฉ์ ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ ์–ด๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ๊ณ ์™€ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹ค ์–‘์„ฑ์€ ํ’€์ดํ•ด์•ผ ํ•  ๋ฌธ์ œ์˜ ๋‹ค์–‘์„ฑ๊ณผ ๋ฌธ์ œ ํ’€์ด์˜ ๋‹ค์–‘์„ฑ์— ๊ธฐ์ธํ•ฉ๋‹ˆ๋‹ค. C++ ์€ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๋ผ๊ธฐ ๋ณด๋‹ค๋Š” ๋ฉ€ํ‹ฐํŒจ๋Ÿฌ๋‹ค์ž„(multiparadigm) - ์ด๋ฆ„์„ ๊ผญ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค๋ฉด - ์–ธ์–ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์ด ๋” ์ ๋‹นํ•ฉ๋‹ˆ๋‹ค.

"์ข‹์€ ๊ฒƒ" - ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ , ์œ ์—ฐํ•˜๊ณ , ํšจ์œจ์ ์ธ - ์˜ ๊ธฐ์ค€์„ ๋Œ€๋ถ€๋ถ„ ๋งŒ์กฑ์‹œ ํ‚ค๋Š” ๋””์ž์ธ์˜ ์˜ˆ๋กœ ์ „ํ†ต์ ์ธ ์ ˆ์ฐจ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์žฌ๊ท€ ๊ฒฝํ–ฅ ํŒŒ์„œ(recursive descent parser)๊ฐ€(์—ญ์ž์ฃผ: ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฒˆ์—ญ๊ธฐ๋ฅผ ํŒŒ์„œ (parser)๋ผ ํ•˜๋Š”๋ฐ, ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฃผ๋กœ ์ˆ˜์‹์„ ๋ฒˆ์—ญํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๋‹ค) ์žˆ๋‹ค. ๋‹ค๋ฅธ ์˜ˆ๋กœ STL์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ „ํ†ต์ ์ธ ์ ˆ์ฐจ์ ์ธ ์ฝ”๋“œ์™€ ํŒŒ๋ผ๋ฏธํ„ฐ์ ์ธ ๋‹คํ˜•์„ฑ(์—ญ์ž์ฃผ: ์ด๋ฆ„์— ์˜ํ•œ ๋‹คํ˜•์„ฑ์ด ์•„๋‹Œ)์— ์ „์ ์œผ๋กœ ์˜์กดํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํฌํ•จํ•œ ์ผ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๋‹จ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„๋งŒ ์ง€์›ํ•˜๋Š” ์–ธ์–ด๋Š” ์ œํ•œ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ฐ„๋‹จํ•จ(simplicity)์„ ์‚ฌ๋Š” ๋Œ€์‹ , ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๊ตฌ์†๋ณต (straitjacket)์„ ์ž…ํžˆ๊ฑฐ๋‚˜, ์–ธ์–ด์˜ ๋ณต์žกํ•จ์„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์žกํ•จ์œผ๋กœ ์ „๊ฐ€ ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŠน์ • ๋ชฉ์  ์–ธ์–ด(special-purpose language)์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ, ๋ฒ”์šฉ ์–ธ์–ด(general-purpose language)์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์ข…์ข… C++๋ฅผ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํŽธํ–ฅ๋œ ๋ฒ”์šฉ ์–ธ์–ด๋ผ๊ณ  ํŠน์ง• ์ง€์› ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ง€์›ํ•˜๋Š” "๋” ๋‚˜์€ C"๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด์ฃ .
๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”,

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๊ทธ๋ฆฌ๊ณ 

์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๋ฅด๋ž˜๋ฐ(generic programming).
์ž์—ฐํžˆ, ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ์ ‘๊ทผ๋ฒ•๋งŒ์„ ํ—ˆ์šฉํ•˜๋Š” ์–ธ์–ด์— ๋น„ํ•ด ๋ณต์žกํ•จ์„ ์ฆ๊ฐ€์‹œ ํ‚ต๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋Ÿฌํ•œ ๊ด€์  - ๋ฌธ์ œ ์˜์—ญ๋งˆ๋‹ค ์ตœ์„ ์ธ ๊ฐ๊ฐ์˜ ๋””์ž์ธ๊ณผ ํ”„๋กœ๊ทธ๋ž˜ ๋ฐ ์ ‘๊ทผ๋ฒ•์ด ์žˆ๋‹ค - ์ด ์–ด๋–ค ์ด๋“ค์„ ํ™”๋‚˜๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ฃผ๋ชฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹ค ํžˆ, ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ํ˜น์€ ๋ชจ๋“  ๋ฌธ์ œ์— ์˜ฌ๋ฐ”๋ฅธ ํ•œ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋Š” ๊ด€์ ์€ ๊ฑฐ ์ ˆํ•ฉ๋‹ˆ๋‹ค. ์„ธ๊ณ„๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์—ด์ •์ ์œผ๋กœ ๋ฏฟ๊ณ  ์‹ถ์–ดํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ œ๊ฐ€ ์ด๊ฒƒ์„ ๋‹จ์ง€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ๋Š” ์ƒ๊ด€์—†์ด ๊ฒฉ๋…ธ(fury)ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๋งŽ์€ ๋„๊ตฌ๋“ค ์ค‘์˜ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋‘ ๊ด€์ ์„ ๋ชจ๋‘ ํ•ด๊ฒฐํ•˜๋Š” ์ด์ƒ์ ์ธ ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ ์„ ํšจ์œจ์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ(primitive)์˜ ์ง‘ํ•ฉ์„ ์ง€์›ํ•˜๋Š” ์–ธ ์–ด๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ„์† ์‹œ๋„๋˜๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ, ๋‹ฌ์„ฑ๋˜์ง€ ๋Š” - ์ €์˜ ์˜๊ฒฌ์— - ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
์ž๋ฐ”์™€ C++(JAVA AND C++)
Computer: ์œ„์—์„œ์™€ ๊ฐ™์€ ๋…ผ์Ÿ์ด ๋‚ฉ๋“ํ• ๋งŒํ•˜๊ฒŒ ์ž๋ฐ”(Java)๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค ๊ณ  ๋ด…๋‹ˆ๋‹ค. Sun์ด ์ฃผ์žฅํ•˜๊ธฐ๋ฅผ 700,000๋ช…์˜ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค (๋น„๊ตํ•ด์„œ C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” 1,500,000๋ช… ์ •๋„). ๋‹น์‹ ์€ C++๊ฐ€ C์™€ ํ˜ธํ™˜๋  ํ•„ ์š”๋„ ์—†์œผ๋ฉฐ, ์ž๋ฐ”๊ฐ€ ๋‹น์‹ ์ด ๊ณ ์•ˆํ•œ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ฃผ์žฅ์„ ๊ณ ์ง‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌ ํ•œ ์งˆ๋ฌธ์„ 1000๋ฒˆ ์ด์ƒ ๋ฐ›์•˜๋‹ค๋ฉด ๋‹น์‹ ์€ ๋ฌด์Šจ ๋ง์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๊นŒ?

Stroustrup: ์˜ค๋Š˜๋‚ , ์ €๋Š” ํ•ญ์ƒ ์ž๋ฐ”์— ๋Œ€ํ•ด์„œ ์งˆ๋ฌธ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ๋Œ€๋‹ตํ•˜๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋งŒ์•ฝ ์•ฝ๊ฐ„ ๋ถ€์ •์ ์ธ ๊ฒƒ์„ ๋งํ•œ๋‹ค๋ฉด, ๋ฌด๋ก€ํ•œ ๊ฒƒ์œผ๋กœ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋งŒ์•ฝ ์•ฝ๊ฐ„ ๊ธ์ •์ ์ธ ๊ฒƒ์„ ๋งํ•œ๋‹ค๋ฉด, ์ž๋ฐ”๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ์ƒ์—… ์ ์ธ ๊ณต๊ฐ„(commercial hype)์— ๋›ฐ์–ด๋“œ๋Š” ๊ฒƒ ๊ฐ™๊ณ , ์ž๋ฐ” ๊ณต๋™์ฒด์˜ ๋ถ€๋ถ„์œผ๋กœ๋ถ€ ํ„ฐ ํ˜๋Ÿฌ๋‚˜์˜ค๋Š” ๋ถˆ์šดํ•œ ๋ฐ˜ C++ ์„ ์ „(the unfortunate anti-C++ propaganda)์— ๋›ฐ์–ด๋“œ๋Š” ๋Š๋‚Œ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ƒ์—…์ ์ธ ๋ผ์ด๋ฒŒ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ, ์ž์‹ ์ด ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๋Š” ๋””์ž ์ธ ๊ธฐ์ค€์— ๋”ฐ๋ผ ๋‘ ๊ฐœ์˜ ์–ธ์–ด ์ค‘ ์ ์ ˆํ•œ ๊ฒƒ์„ ์„ ํƒํ•˜๋ผ๊ณ  ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” C++์„ ์œ„ํ•œ ๋””์ž์ธ ํ‘œ์ค€(cirteria)์„ The Design and Evolution of C++์—์„œ ๊ฐœ๊ด„ํ•ด ๋†“์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ์ค€์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ์‹œ์ž‘์กฐ์ฐจ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”๋ฅผ ๋งŒ๋ณ‘ํ†ต์น˜์•ฝ์œผ๋กœ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•˜๋‚˜๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์€ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, C++๋Š” ์ž๋ฐ”์˜ ๋””์ž์ธ ๋ชฉํ‘œ์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ผ ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ž๋ฐ”๊ฐ€ ์œ ์ผํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ์จ ์ง„๊ธ‰๋œ๋‹ค๋ฉด, ์ž๋ฐ”์˜ ๊ฒฐํ•จ๊ณผ ์ œํ•œ์€ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

C++์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์ ์šฉ๋œ ๊ธฐ์ค€์ด ์ž๋ฐ”์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๊ฐ€ ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค.
์„œ๋กœ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ๋ถ€ํ„ฐ ์“ฐ์—ฌ์ง„ ํ”„๋กœ๊ทธ๋žจ ๋ถ€๋ถ„๋“ค์„ ํšจ๊ณผ์ ์œผ๋กœ ์กฐํ•ฉํ•˜๋Š” ๋Šฅ๋ ฅ

๋‹ค์–‘ํ•œ ๋””์ž์ธ ์Šคํƒ€์ผ๊ณผ ํ”„๋กœ๊ทธ๋žจ ์Šคํƒ€์ผ

๊ธฐ์ •์˜ ํƒ€์ž…(built-in type)๊ณผ ๋งž๋จน๋Š” ํšจ์œจ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…

๊ธฐ์ •์˜ ํƒ€์ž…๊ณผ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์˜ ์ผ๊ด€๋œ ์ฒ˜๋ฆฌ(treatment)

STL์ฒ˜๋Ÿผ ์‹คํ–‰์‹œ ๋ถ€๋‹ด์—†๋Š” ์ผ๋ฐ˜ ์ปจํ…Œ์ดํ„ฐ(generic container)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Šฅ๋ ฅ
ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ์šฐ์•„ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ฐ€ C++์„ ๋””์ž์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•ด์„œ, ์šฐ์•„ํ•จ๊ณผ ํšจ์œจ์„ฑ์„ ํƒ€ํ˜‘ํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š์„ ๋•Œ C++์€ ์—ฌ์ „ํžˆ ์ตœ์ƒ์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ๋žŒ๋“ค์ด "ํ”„๋กœ๊ทธ๋ž˜๋จธ"๋ฅผ ์„ธ๋Š”์ง€ ์˜๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•™์ƒ์ด ํ”„๋กœ๊ทธ๋ž˜ ๋จธ์ž…๋‹ˆ๊นŒ? PC์— ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ์€ ๋ชจ๋‘ ํ”„๋กœ๊ทธ๋ž˜๋จธ์ž…๋‹ˆ๊นŒ? ์ €๋Š” C++ ์„ ์œ„ํ•ด์„œ ์ธ์šฉ๋œ ์ˆซ์ž๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ณด์ˆ˜์ ์ด๊ณ  ๊ทธ๋Ÿด๋“ฏํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ ์€ ์ง€๋‚œ ํ•ด ์‹ค์ œ ํŒ”๋ฆฐ ๊ธˆ์•ก์„ ์œ„ํ•œ C++ ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆ˜๋ฅผ ์ ์ ˆํžˆ ๊ทผ์‚ฌํ™”ํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์ €๋Š” Sun์—์„œ ์ฃผ์žฅํ•˜๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ทผ๊ฑฐ์ธ์ง€ ์˜๋ฌธ ์ž…๋‹ˆ๋‹ค. ๋ถ€์ˆ˜์ ์œผ๋กœ, ์ปดํŒŒ์ผ๋Ÿฌ ํŒ๋งค, ์ฑ… ํŒ๋งค, C++ ์ˆ˜๊ฐ•์ƒ ์ˆ˜ ๋“ฑ์˜ ํ™•์‹คํ•œ ์ˆ˜ ์— ๊ทผ๊ฑฐํ•ด์„œ, ์ œ๊ฐ€ ์ถ”์ธกํ•˜๊ธฐ๋กœ C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋งค๋…„ 10%โˆผ20%์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ์ž๋ฐ” ํŒฌ(fan)์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ €๋Š” ๊ณผ๋Œ€ ์„ ์ „(hype)์„ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ์—๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํˆด์„ ํŒ๋งคํ•˜๋Š” ์‹œ์žฅ ์ „๋žต์„ ์‹ซ ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ๋…์ ์ ์ธ ์–ธ์–ด๋ฅผ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ ์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์ธ ์ธก๋ฉด์—์„œ, ์ž๋ฐ”๋Š” ์ €์—๊ฒŒ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ๋ฐ›์•˜๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ, "์™€ ๊น”๋”ํ•œ๋ฐ!"๋ž€ ์ธ์ƒ์„ ์ฃผ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”๋Š” ์ œ๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ์ œํ•œ์ ์ธ ํ˜•ํƒœ๋กœ ๋‹ค๋ฅธ ์œ ๋ช…ํ•œ ์–ธ์–ด์˜ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”๋Š” ๋งŽ์€ ๊ฒƒ์„ C++๋กœ๋ถ€ํ„ฐ ๋นŒ๋ ค ์™”์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด๋Š” ์•„๋‹ˆ๋ฉฐ, ์›ํ•˜๋Š” ๋งŒํผ์˜ ์ดํ•ด์™€ ๋ง›(taste)๋„ ๋นŒ๋ ค์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”๋ฅผ ์œ„ํ•œ ์ค‘์š”ํ•œ ์•ฝ์†๋“ค์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด์„ , ์ž๋ฐ”๋Š” ์„ฑ์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ „๊ฐœ๋Š” C++๋ณด๋‹ค ๊ฐ„ ๋‹จํ•˜๊ฒŒ ๋ผ๋Š” ์ž๋ฐ”์˜ ์ฃผ์žฅ๊ณผ ํƒ€ํ˜‘ํ• ์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ €์˜ ์ถ”์ธก์— ๊ทธ๋Ÿฌํ•œ ๋…ธ๋ ฅ์€ ํ˜„์žฌ์˜ ๊ฒƒ๋ณด๋‹ค ๋” ์ข‹์€ ์ž๋ฐ” ์–ธ์–ด๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ, ์ž๋ฐ”๋Š” ์–ธ์–ด ์˜ ํŠน์ง•๋“ค๊ณผ "ํ‘œ์ค€" ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฝค(quite a pace) ์ถ•์ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ž๋ฐ” ๋ฒ„์ „์˜ ํ…œํ”Œ๋ฆฟ์ด ๋‚˜ํƒ€๋‚  ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์™€ ๊ทธ์˜ ๊ณต๋™์ฒด๊ฐ€ ์„ฑ์ˆ™ํ•ด๊ฐ€๋ฉด์„œ, ํ™œ๊ธฐ์žˆ๊ณ  ํ™œ๊ธฐ์žˆ๊ฒŒ ํ•˜๋Š” ์ฒ ํ•™ (live-and-let-live philosophy)์„ ํฌ๋ง์ ์œผ๋กœ ์ฑ„ํƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž๋ฐ”๊ฐ€ ํ”„๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์˜ ์†Œ์ค‘ํ•œ ๋„๊ตฌ(tool chest)์ค‘์˜ ํ•œ ์–ธ์–ด๋กœ ์ž๋ฆฌ์žก๊ฒŒ ํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
๋„๊ตฌ(TOOLS)
Computer: ์ง€๋‚œ ๋ช‡ ๋…„๊ฐ„ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ์Šคํ…œ์ด ๋ณ€ํ™”ํ–ˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  C++์˜ ํ™œ๋™๋ฒ”์œ„(arena)์™€ ์ผ๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ ๋””์ž์ธ์— ๋ฌด์—‡์ด ๋” ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? C++๊ฐ€ ๋น„๊ต์  ์„ฑ์žฅํ•œ ์ด ์‹œ์ ์—์„œ, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” C++ ํˆด(tool)๋“ค์„ ์–ด๋–ป๊ฒŒ ํ‰๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ๊ฐœ์„ ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ค ๊ฒƒ๋“ค์ž…๋‹ˆ๊นŒ?

Stroustrup: ๋จผ์ €, ์ปดํŒŒ์ผ๋Ÿฌ, ๋””๋ฒ„๊ฑฐ, ํ”„๋กœํŒŒ์ผ๋Ÿฌ(profiler)(์—ญ์ฃผ: ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ ๋ถ„์„์„ ์œ„ํ•œ ๋„๊ตฌ), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธํ„ฐํŽ˜์ด์Šค, GUI ๋นŒ๋”, CAD ํˆด๊ณผ ISO ํ‘œ์ค€์„ ์ง€์›ํ•˜๋Š” ๊ธฐํƒ€ ๊ธฐ๋ณธ ํˆด๋“ค์„ ์‚ดํŽด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ €๋Š” ๋ฐ์ด ํ„ฐ๋ฒ ์ด์Šค ์งˆ์˜์˜ ๊ฒฐ๊ณผ๋ฅผ STL ์ปจํ…Œ์ด๋„ˆ ํ˜น์€ ์ ์ ˆํ•œ ๊ฐ์ฒด ํ˜•์˜ istream์œผ๋กœ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํˆด ๋ฒค๋”(vendor)๋Š” ์ข‹์€ ์ถœ๋ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์†Œ์Šค ์ฝ”๋“œ ๋ถ„์„๊ธฐ์— ์˜์กด์ ์ธ ์ž‘์—…์„ ๋„ˆ๋ฌด ๋งŽ์ด ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๋ฆฌ์ŠคํŠธํ•œ ๊ธฐ๋ณธ ๋„๊ตฌ๋“ค์€ ๋ฌด์—‡์ด ๋ฐ”๋€์ง€์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ ์ธ ๋Œ€๋‹ต์— ๋ถˆ๊ณผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ ๋ช‡ ๋…„ ๋™์•ˆ, ๋งŽ์€ ์ˆ˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์™€ ์‹œ์Šคํ…œ ๊ธฐ ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ฝ”๋“œ์— ์˜์กดํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์€ ์ง€๋ฃจํ•˜ ๊ณ , ์—๋Ÿฌ ๋ฐœ์ƒ์ด ์‰ฌ์šด ์ž‘์—…์œผ๋กœ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์„ ๊ตฌ์ œํ•˜๋Š”๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€(ํ˜น์€ ๊ณ ์šฉ์ธ์ด) ํˆด ์ œ๊ณต์ž์˜ ํฌ๋กœ๊ฐ€ ๋˜๋Š” ์œ„ํ—˜์— ์ฒ˜ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ข…์ข… ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์€ ์ „ํ†ต์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋น„ํ•ด ๋”์šฑ ๋ณต์žกํ•˜๋ฉฐ, ํ‘œ ์ค€์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋…์ ์„ฑ์ด(nonproprietary) ์—†๋Š” ๋„๊ตฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฅผ ์ถ”์ฒœํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์งง์€ ์•ˆ๋ชฉ์œผ๋กœ ๋ณด๋ฉด, ์˜ˆ๋ฅผ ๋“ค๋ฉด 10๋…„ ์ •๋„, ๋งŽ์€ ๊ทธ๋Ÿฌ ํ•œ ํ‘œ์ค€์€ ํ˜•์‹์ ์ธ ISO๋‚˜ IEEE์˜ ํ‘œ์ค€๋ณด๋‹ค ์‚ฐ์—…๊ณ„์˜ ํ‘œ์ค€์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ฑด๊ฐ•ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‚ฐ์—…์„ ์œ„ํ•ด, ์ค‘์š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ž˜ ์ •์˜๋˜๊ณ  ๋Œ€์ค‘ ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

COM์ด๋‚˜ CORBA๊ฐ™์€ ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ํ‘œ์ค€์˜ ์ค‘์š”์„ฑ์ด ์ฆ๊ฐ€ํ•˜๋Š” ๊ฐ€์šด๋ฐ, C++๊ฐ€ ๊ทธ๋Ÿฌํ•œ ๊ฒƒ๋“ค๊ณผ ๊นจ๋—ํ•˜๊ณ (clean), ์ž˜ ๋ฌธ์„œํ™”๋˜์–ด, ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ฒฐํ•ฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ํŠน๋ณ„ํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํ•˜๊ฒŒ๋„, ๊ทธ๋Ÿฌํ•œ "ํ‘œ์ค€ ์ž‘์—…" - ๋ชจ๋‘์—๊ฒŒ ์ด๋กœ์šด - ์€ ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ์งง์€ ์•ˆ๋ชฉ์˜ ์ด์ ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์†Œํ˜ํžˆ ๋ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ C++ ํˆด๋“ค์„ ํ‰๊ฐ€ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋งค์šฐ ํ›Œ๋ฅญํ•˜ ๋ฉฐ, ๋‹ค๋ฅธ ์–ธ์–ด์˜ ์–ด๋–ค ํˆด๋ณด๋‹ค ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ์„œ, ์ €๋Š” ๋‹น์—ฐ ํžˆ ๋” ์ข‹์€ ํ’ˆ์งˆ์˜ ํˆด๋“ค์„ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ, C++ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋” ์ข‹์€ ํˆด๋“ค์„ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋˜ํ•œ C++ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฒค๋”๋“ค์ด ์‹ ์ œ ํ’ˆ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, ์ž์‚ฌ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ํ’ˆ์งˆ๊ณผ ์ˆ˜ํ–‰ ๋Šฅ๋ ฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š”๋ฐ ์˜ˆ ์‚ฐ์„ ์กฐ๊ธˆ ๋” ํˆฌ์žํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์‹ค์ œ์ ์ธ ์„ฑ๋Šฅํ–ฅ์ƒ์€ ์ƒˆ๋กœ ์šด ๋ฒ„์ „์˜ ์™„์ „ํ•œ C++ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์œ„ํ•œ ์‹œ๊ฐ„๋ณด๋‹ค ๋‹ค์†Œ ์ €๋ ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ค‘์š”ํ•œ ์‚ฌ์šฉ์ž๋“ค์ด ์ ์‘ ํ…Œ์ŠคํŒ…(conformance testing)์ด๋‚˜ ๋ฒค์น˜๋งˆํ‚น (benchmarking)์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ฒค๋”๋“ค์ด ๊ด‘๊ณ ์ƒ ์ข‹๊ฒŒ ๋ณด์ด๋Š” ๊ฒƒ์„ ์œ„ํ•ด ์ž์›์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๋Š๋‚๋‹ˆ๋‹ค.
๋ฏธ๋ž˜(THE FUTURE)
Computer: ์ €๋Š” ๋‹น์‹ ์ด C++ํ‘œ์ค€ํ™” ์ž‘์—…์— ๋งŽ์ด ์ฐธ์—ฌํ•œ ๊ฒƒ์œผ๋กœ ์•Œ๊ณ ์žˆ์Šต๋‹ˆ ๋‹ค. ํ•˜์ง€๋งŒ, ํ˜„์žฌ ๋‹น์‹ ์ด ์ฐธ์—ฌํ•œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ์œผ๋ฉฐ, C++์„ ๋ฐœ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์ž‘์—…์„ ๊ณ„์†ํ•  ๊ฒƒ์ž…๋‹ˆ๊นŒ?

Stroustrup: ๋‚˜๋Š” ๋งค์šฐ ํฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์™„์„ฑํ•˜๊ณ  ๋‚˜์„œ ๊ณ ํ†ต๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ISO C++ ํ‘œ์ค€์ด ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. The C++ Programming Language์˜ ์ œ 3ํŒ์—๋Š” ํ‘œ์ค€ C++์ด ๋ฌด์—‡์„ ์ œ๊ณตํ•˜๋Š”์ง€ ์–ด๋–ป๊ฒŒ ๊ฐ€์žฅ ์ž˜ ์‚ฌ์šฉ ํ•˜๋Š”์ง€ ์ง„์ง€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์—๊ฒŒ ์•Œ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Design and Evolution์€ C++์— ์žฅ์ฐฉ๋œ(shaped) ๋””์ž์ธ ๊ฒฐ์ •๋“ค์„ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด ์•ผํ•  ๊ฒƒ๋“ค์ด ์•„์ง ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ „์‹œ๊ฐ„ ์–ธ์–ด ๋””์ž์ด๋„ˆ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ ์€ ์•„๋ฌด๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ฐ€๋Šฅํ•œ ๋ณ€ํ™”๋“ค์— ์ง‘์ค‘ํ•˜๊ธฐ ๋ณด๋‹ค๋Š”, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•จ ์œผ๋กœ์จ C++์˜ ํž˜๊ณผ ์œ ์—ฐ์„ฑ์„ ์ฆ๊ธธ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ๊ณผ๋Š” ๋ณ„๋„๋กœ, ์ €๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์‹ค๋“ค์„ ๋ฐฐ์šธ ๊ธฐํšŒ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ์–ธ์–ด์™€ ํฐ ์‚ฌ์—…์—์„œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€์— ๊ด€ํ•œ ๊ฒƒ์ด ๊ทธ๊ฒƒ์ž… ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ถ„์‚ฐ ์ปดํ“จํŒ…์—์„œ ๋ช‡ ์‹คํ—˜๋“ค์„ ๊ณ„ํš์ค‘์ž…๋‹ˆ๋‹ค.

Is it better to use C void arguments "void foo(void)" or not "void foo()"?

There are two ways for specifying parameters in C. One is using an identifier list, and the other is using a parameter type list. The identifier list can be omitted, but the type list can not. So, to say that one function takes no arguments in a function definition you do this with an (omitted) identifier list

void f() {
    /* do something ... */
}

And this with a parameter type list:

void f(void) {
    /* do something ... */
}

If in a parameter type list the only one parameter type is void (it must have no name then), then that means the function takes no arguments. But those two ways of defining a function have a difference regarding what they declare.

Identifier lists
The first defines that the function takes a specific number of arguments, but neither the count is communicated nor the types of what is needed - as with all function declarations that use identifier lists. So the caller has to know the types and the count precisely before-hand. So if the caller calls the function giving it some argument, the behavior is undefined. The stack could become corrupted for example, because the called function expects a different layout when it gains control.

Using identifier lists in function parameters is deprecated. It was used in old days and is still present in lots of production code. They can cause severe danger because of those argument promotions (if the promoted argument type do not match the parameter type of the function definition, behavior is undefined either!) and are much less safe, of course. So always use the void thingy for functions without parameters, in both only-declarations and definitions of functions.

Parameter type list
The second one defines that the function takes zero arguments and also communicates that - like with all cases where the function is declared using a parameter type list, which is called a prototype. If the caller calls the function and gives it some argument, that is an error and the compiler spits out an appropriate error.

The second way of declaring a function has plenty of benefits. One of course is that amount and types of parameters are checked. Another difference is that because the compiler knows the parameter types, it can apply implicit conversions of the arguments to the type of the parameters. If no parameter type list is present, that can't be done, and arguments are converted to promoted types (that is called the default argument promotion). char will become int, for example, while float will become double.

Composite type for functions
By the way, if a file contains both an omitted identifier list and a parameter type list, the parameter type list "wins". The type of the function at the end contains a prototype:

void f();
void f(int a) {
    printf("%d", a);
}

// f has now a prototype. 

That is because both declarations do not say anything contradictory. The second, however, had something to say in addition. Which is that one argument is accepted. The same can be done in reverse

void f(a) 
  int a;
{ 
    printf("%d", a);
}

void f(int);

The first defines a function using an identifier list, while the second then provides a prototype for it, using a declaration containing a parameter type list.
https://stackoverflow.com/questions/693788/is-it-better-to-use-c-void-arguments-void-foovoid-or-not-void-foo

todo list

Check cpplint:

  • 01

  • 02

  • 03

  • 04

  • 05

  • 06

  • 07

  • 08

  • 09

  • 10

  • 11

  • p01

์ƒ์† ๋ฐ›์€ ํด๋ž˜์Šค, ํด๋ž˜์Šค ์•ˆ์— ์ •์˜๋œ ํด๋ž˜์Šค

#include <iostream>

class Foo {
 public:
  Foo() { std::cout << "+Foo" << std::endl; }
  ~Foo() { std::cout << "-Foo" << std::endl; }

  class Bar {
   public:
    Bar() { std::cout << "+Bar" << std::endl; }
    ~Bar() { std::cout << "-Bar" << std::endl; }
  };
};

int main() {
  Foo* f = new Foo;
  delete f;

  Foo::Bar* b = new Foo::Bar;
  delete b;

  return 0;
}

์†Œ๋ฉธ์ž ํ˜ธ์ถœ ์ˆœ์„œ ํ™•์ธํ•  ๊ฒƒ

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.