머 리 말 어떤 책이 좋은 책일까? 한 번 쓰고 버려지는 책이 되지 않기 위해 지난 20개월간 무던히도 애를 썼습니 다. 이제 책이 나왔지만, 여전히 세상에 내놓기가 두렵습니다. C 언어가 최고의 언어라고 생각하고 있었던 1980년대 후반, 저자는 C++를 처음 접하곤

Size: px
Start display at page:

Download "머 리 말 어떤 책이 좋은 책일까? 한 번 쓰고 버려지는 책이 되지 않기 위해 지난 20개월간 무던히도 애를 썼습니 다. 이제 책이 나왔지만, 여전히 세상에 내놓기가 두렵습니다. C 언어가 최고의 언어라고 생각하고 있었던 1980년대 후반, 저자는 C++를 처음 접하곤"

Transcription

1

2 국립중앙도서관 출판시도서목록(CIP) (명품) C++ programming / 황기태 지음. -- 파주 : 생능출판사, 2013 p. ; cm ISBN : \29000 C++ 프로그래밍[C++ programming] KDC DDC21 CIP

3 머 리 말 어떤 책이 좋은 책일까? 한 번 쓰고 버려지는 책이 되지 않기 위해 지난 20개월간 무던히도 애를 썼습니 다. 이제 책이 나왔지만, 여전히 세상에 내놓기가 두렵습니다. C 언어가 최고의 언어라고 생각하고 있었던 1980년대 후반, 저자는 C++를 처음 접하곤 객체 지향 개념의 새로움과 묘미에 흥분을 감추지 못했던 경험이 있습니다. 그리고 얼마 있지 않아 Unix 운영체제에서 대규모 VOD(Video On Demand) 시스템 을 시뮬레이션하는 멀티태스킹 프로그램을 C++로 작성하면서, 객체 지향 프로그래 밍의 파워와 아름다움에 완전히 빠져들게 되었습니다. 만일 클래스, 객체, 상속 등 의 개념이 없는 일차원적인 C 언어로 프로그램을 작성해야 했다면 얼마나 고생하였 을까? C++는 1979년 Bjarne Stroustrup에 의해 "C with Classes"라는 이름으로, C 언 어에 객체 지향 개념을 추가하는 정도로 시작되었지만, 지금은 시스템 소프트웨어, 응용 소프트웨어, 게임, 디바이스 드라이버, 임베디드 소프트웨어, 모바일 프로그 램 등 소프트웨어의 전 분야에 활용되고 있습니다. C++는 운영체제, 하드웨어, 응 용 분야를 가리지 않으며, 다른 객체 지향 언어인 Java나 C#에 비해 실행 속도가 빠 르다고 알려져 있고(다소 논쟁의 소지는 있지만), 메모리나 I/O 포트를 직접 세밀 하게 접근하므로 하드웨어 제어에 강점을 가집니다. 이처럼 C++는 광범위하면서도 파괴력 있는 프로그래밍 언어이고, Java나 C# 등 현대적 객체 지향 언어를 낳게 한 모태 언어이므로, 소프트웨어 전문가로서 탄탄한 기반을 갖추기 위해서라면 C++ 언어에 대한 충실한 이해가 필요합니다. 이 책은 C 언어를 알거나 다른 고급 언어의 프로그래밍 경험을 가진 독자들을 대 상으로 하는 책입니다. 변수, 함수, 순환문, 조건문 등 C 언어의 기본 지식들에 대 해서는 다루지 않고, 객체 지향 프로그래밍 및 C++만의 고유한 기능에 집중합니다. 이 책은 15주 한 학기 동안 학습할 수 있도록 총 13장으로 되어 있습니다. 본문 으로 다루기에 벅찬 고급 지식은 특별히 부록에 심화 학습으로 편성하였습니다. 읽 P R E F A C E 3

4 P R E F A C E 기 쉽고, 이해하기 쉽고, 활용 예제와 실전 연습 거리가 풍부하도록 책을 구성하였 습니다. 강조 단어, 하이라이팅, 말풍선, 그림, 삽화, 다양한 색으로 눈과 직관만으 로도 이해할 수 있도록 하고, 틈틈이 테스트를 위한 Check Time 문제들을 삽입하였 습니다. 연습문제에는 더욱 정성을 쏟았습니다. 이론 문제와 실습 문제로 나누고, 정곡을 찌르는 핵심을 담아 이론 문제를 만들었습니다. 실습 문제의 경우, 문제를 명료하게 제시하고 실행 결과를 삽입하여, 독자가 어떤 코드를 작성해야 하는지 분 명히 하였습니다. 또한 각 장의 주제에 맞는 독창적인 코딩 문제와 함께 난이도를 삽입하였습니다. 특별히 각 장의 마지막에는 재미있는 Open Challenge 문제를 두 어 스스로 도전해 볼 수 있도록 하였습니다. 이 책을 쓰는 동안 많은 사람들의 도움을 받았습니다. 필요할 때마다 시간을 내 준 이신영, 소스 정리를 도와준 서영덕, 한혜림, 김태완, 배진식 학생에게 감사하 고, 교정과 함께 알찬 조언을 주신 유상미 교수님께 감사드립니다. 마지막까지 책 의 디테일을 살리기 위해 애쓴 생능출판사 직원 분들께 진심으로 감사드립니다. 격 려와 관심으로 늘 지켜준 사랑하는 원선, 수연, 연수, 수희에게 감사하고, 겸손한 마음으로 하나님께 영광을 돌립니다. 2013년 7월 촉촉한 장맛비가 내리는 날에, 황기태 4

5 이 책의 구성과 강의 계획 이 책은 15주의 한 학기 강의에 맞추어 13장으로 구성하였습니다. 초보자에게 3, 4장을 2주에 걸쳐 강의하기에는 다소 부담될 수 있습니다. 16주 강의의 경우 3, 4장을 3주에 걸쳐 강의하는 것도 좋은 방법입니다. 진도가 충분한 경우 부 록의 일부 내용을 1주에 강의해도 됩니다. 과제 - 복습에 적합한 이론 연습문제와, 실습 과제로 풀어 볼 만한 재미있고 유익한 많은 연습 문제들과 Open Challenge 문제가 있습니다. 시험 문제 - Check Time 문제와 각 장의 이론 연습문제는 시험 문제로도 적절합니다. 예제 소스와 정답이 공개된 연습문제의 소스는 Visual Studio 2008과 Visual Studio 2010 용으로 따로 CD에 제공됩니다. 주 내용 목표 1 1장 C++ 시작 C++ 기초 이해, Visual C++ 사용 2 2장 C++ 프로그래밍의 기본 C++ 프로그램 구성, 키 입력, 화면 출력 3 3장 클래스와 객체 클래스 만들기, 객체 생성, 기타 C++의 주요 특징 이해 4 4장 객체 포인터와 객체 배열, 객체의 동적 생성 5 5장 함수와 참조, 복사 생성자 6 6장 함수 중복과 static 멤버 7 7장 프렌드와 연산자 중복 8 중간고사 객체 포인터, 객체의 동적 생성 및 소멸, 동적 배열 다루기, this, string 클래스 사례 활용 값에 의한 호출의 문제점 이해, 참조와 참조에 의한 호출, 복사 생성자 작성 중복 함수 만들기, 중복으로 인한 모호성 이해, 디폴트 매개 변수를 가진 함수 만들기, static 멤버 활용 프렌드 개념 이해 및 활용, 다양한 연산자 중복과 프렌드가 필요한 연산 자 만들기 9 8장 상속 상속 만들기와 파생 클래스의 객체 이해, 다중 상속, 가상 상속 10 9장 가상 함수와 추상 클래스 11 10장 템플릿과 표준 템플릿 라이브러리(STL) 12 11장 C++ 입출력 시스템 13 12장 C++ 파일 입출력 14 13장 예외 처리와 C 언어와의 링크 지정 가상 함수와 오버라이딩 활용, 동적 바인딩 이해, 추상 클래스를 이용하 는 프로그래밍 연습 일반화의 개념 이해, 템플릿 함수와 클래스 만들기, 간단한 STL 라이브러 리 활용 스트림 입출력에 대한 이해, 문자 입출력, 포맷 입출력, 사용자 삽입 연산 자와 추출 연산자 만들기, 사용자 조작자 만들기 텍스트 파일과 바이너리 파일에 대한 이해, 파일 읽기 및 쓰기, 스트림 상태 이해, 임의 접근으로 파일 입출력 실행 오류와 오류 처리 방법 이해, 예외 처리 코드 작성, C++에서 C 코드 링킹 이해 P R E F A C E 15 기말고사 5

6 이 책 의 특 징 잠깐! 지나치기 쉬운 내용들을 환기시키기 위 해 주의 사항 등을 설명하였습니다. Tip 학습한 내용의 보충 설명이나 참고 사항 등을 정리하였습니다. CHECK TIME 배운 내용을 점검하기 위해 단답형 문제 를 제시하였습니다. 요약 SUMMARY 배운 내용을 정리하기 쉽도록 주요 용 어를 중심으로 주요 내용을 요약하였습 니다. 6

7 Open Challenge 프로젝트 문제로 그 장에서 학습한 내용 을 응용하여 프로그램을 작성할 수 있도 록 하였습니다. 연습문제 EXERCISE 배운 내용을 정확히 이해하고 있는지 스 스로 검토하도록 하기 위한 이론 문제 와 이론을 바탕으로 실전 응용프로그램 을 작성하도록 하는 다양한 실습 문제 를 수록하였습니다. 본문을 쉽게 이해하도록 돕는 그림 과 삽화 내용을 쉽게 이해하고 지루하지 않도 록 그림과 삽화를 다양하게 사용하였습 니다. 7

8 차 례 머리말 3 C O N T E N T S CHAPTER 01 CHAPTER 02 이 책의 구성과 강의 계획 5 이 책의 특징 6 C++ 시작 1.1 컴퓨터와 프로그래밍 C++ 언어의 역사 C++ 언어의 특징 C++ 프로그램 개발 과정 C++ 표준 라이브러리 Visual C++를 이용한 C++ 프로그램 개발 35 요약 44 Open Challenge 45 연습문제 46 C++ 프로그래밍의 기본 2.1 C++ 프로그램의 기본 요소와 화면 출력 namespace와 std:: 키 입력 받기 키보드로 문자열 입력 #include <iostream>에 숨은 진실 75 요약 80 Open Challenge 81 연습문제 82 8

9 CHAPTER 03 클래스와 객체 3.1 객체에 대한 이해 C++ 클래스 만들기 객체 생성과 객체 활용 생성자 소멸자 접근 지정 인라인 함수 C++ 구조체 바람직한 C++ 프로그램 작성법 130 요약 136 Open Challenge 137 CHAPTER 04 연습문제 138 객체 포인터와 객체 배열, 객체의 동적 생성 4.1 객체 포인터 객체 배열 동적 메모리 할당 및 반환 객체와 객체 배열의 동적 생성 및 반환 this 포인터 string 클래스를 이용한 문자열 사용 184 요약 197 Open Challenge 198 연습문제 199 C O N T E N T S 9

10 CHAPTER 05 함수와 참조, 복사 생성자 5.1 함수의 인자 전달 방식 리뷰 함수 호출시 객체 전달 216 C O N T E N T S CHAPTER 객체 치환 및 객체 리턴 참조와 함수 복사 생성자 240 요약 258 Open Challenge 259 연습문제 260 함수 중복과 static 멤버 6.1 함수 중복 디폴트 매개 변수 함수 중복의 모호성 static 멤버 288 요약 300 Open Challenge 301 연습문제 302 CHAPTER 07 프렌드와 연산자 중복 7.1 C++ 프렌드 개념 연산자 중복 이항 연산자 중복 단항 연산자 중복 프렌드를 이용한 연산자 중복 341 요약

11 Open Challenge 350 연습문제 351 CHAPTER 08 상속 8.1 상속의 개념 클래스 상속과 객체 상속과 객체 포인터 protected 접근 지정 상속과 생성자, 소멸자 상속의 종류 : public, protected, private 상속 다중 상속 가상 상속 395 CHAPTER 09 요약 400 Open Challenge 401 연습문제 402 가상 함수와 추상 클래스 9.1 상속 관계에서의 함수 중복 가상 함수와 오버라이딩 가상 함수와 오버라이딩의 활용 사례 추상 클래스 438 요약 445 Open Challenge 446 연습문제 448 C O N T E N T S 11

12 CHAPTER 10 템플릿과 표준 템플릿 라이브러리(STL) 10.1 일반화와 템플릿 다양한 제네릭 함수 만들기 470 C O N T E N T S CHAPTER 제네릭 클래스 만들기 C++ 표준 템플릿 라이브러리(STL)와 활용 483 요약 496 Open Challenge 497 연습문제 498 C++ 입출력 시스템 11.1 C++ 입출력 기초 ostream의 멤버 함수를 이용한 문자 출력 istream의 멤버 함수를 이용한 문자 입력 포맷 입출력 삽입 연산자(<<)와 추출 연산자(>>) 사용자 조작자 만들기 548 요약 552 Open Challenge 553 연습문제 554 CHAPTER 12 C++ 파일 입출력 12.1 텍스트 파일과 바이너리 파일 파일 입출력 개요 <<와 >> 연산자를 이용한 간단한 텍스트 파일 입출력 파일 모드 멤버 함수를 이용한 텍스트 I/O

13 12.6 바이너리 I/O 스트림 상태 검사 임의 접근 601 요약 607 Open Challenge 608 연습문제 609 CHAPTER 13 예외 처리와 C 언어와의 링크 지정 13.1 실행 오류와 오류 처리 예외와 예외 처리 예외 처리에 대한 자세한 설명 예외 클래스 만들기 C++ 코드와 C 코드의 링킹 640 요약 647 Open Challenge 648 연습문제 650 Check Time 정답 661 찾아보기 668 C O N T E N T S 13

14

15 01 C++ 시작 1.1 컴퓨터와 프로그래밍 1.2 C++ 언어의 역사 1.3 C++ 언어의 특징 1.4 C++ 프로그램 개발 과정 1.5 C++ 표준 라이브러리 1.6 Visual C++를 이용한 C++ 프로그램 개발

16 01 CHAPTER C++ 시작 1.1 컴퓨터와 프로그래밍 세상을 먹어치우는 소프트웨어(Why Software Is Eating The World?) 최초로 모자이크(Mosaic)라는 인터넷 웹 브라우저를 만들고 넷스케이프를 공동 창업 한 마크 앤드리슨은 2011년 8월 20일 월 스트리트 저널(Wall Street Journal)에 실은 글에서 '소프트웨어 기업이 세상을 지배'하는 전쟁이 시작되었음을 힘주어 말한다. 소프트웨어 ebay, Facebook, Groupon, Skype, Twitter, Android 등 최근 IT 분야는 소프트웨어 기업들이 앞 다투어 이름을 올리면서 세상을 삼킬 듯이 휘저어대고 있다. 철옹성이라 고 믿었던 미국의 대형 서점 보더스(Borders)가 2011년 9월 13일 아마존에 의해 결국 문을 닫고, 블록버스터(Blockbuster)라는 대형 비디오 대여 체인은 네플릭스(Neflix) 라는 온라인 비디오 대여 기업에 의해 완전히 무너지는 등 소프트웨어 기업이 일어서 고 있으며, 아이튠스, 판도라, 애니메이션 기업 픽사(Pixar) 등 소프트웨어 기업이 세 상을 지배하기 시작하였다. 특히 분야를 가리고 않고 모든 분야에서 소프트웨어 혁명 이 일고 있다고 주장한다. 거대 소프트웨어 기업인 마이크로소프트나 오라클 등도 세 일즈포스닷컴이나 안드로이드 같은 새로운 소프트웨어의 물결에 위협을 받고 있다. 앞으로의 10년은 기존 업계의 강자와 새로운 소프트웨어로 무장한 반란군의 엄청난 대결이 예상된다고 힘주어 말한다. [그림 1-1] 세상을 지배하는 소프트웨어

17 01 CHAPTER C++ 시작 17 "Over the next 10 years, the battles between incumbents and softwarepowered insurgents will be epic." 이제, 소프트웨어가 주목받는 세상이 이미 왔고 이 시대의 IT 세계를 지배할 것이 다. [그림 1-1]은 소프트웨어가 세상을 지배함을 은유적으로 보여준다. 소프트웨어와 컴퓨터 컴퓨터 하드웨어 소프트웨어 컴퓨터의 형태는 [그림 1-2]와 같이 방 하나를 차지하는 메인 프레임, 친숙한 PC, 손안 의 컴퓨터라고 불리는 태블릿(tablet)이나 스마트폰(smartphone), 더 작게는 장난 감에 들어 있는 원 칩 컴퓨터(one-chip computer) 등과 같이 다양해졌다. 컴퓨터 하 드웨어(hardware)를 작동시켜 쇼핑을 하고 신문을 보고 음악을 듣고 게임을 할 수 있 게 하는 것을 소프트웨어(software)라고 하며, 프로그램(program)이라고 부르기도 한다. 소프트웨어는 컴퓨터의 중앙처리장치(CPU)가 이해할 수 있는 일련의 명령들 (instructions)과 데이터로 구성되며, CPU는 이 명령들을 순차적으로 해석하여 실행 함으로써 요구된 기능을 수행한다. 소프트웨어는 보통 CD나 DVD 같은 저장 매체로 제공되지만, 최근에는 인터넷에서 직접 다운로드받을 수 있는 형태로 제공되기도 한다. 특히 태블릿이나 스마트폰에서 작동하는 소프트웨어를 앱(APP)이라고 부르며, 이들은 인터넷 앱 스토어에서 사용자 가 바로 구입하기도 한다. 애플의 아이폰에서 볼 수 있듯이 사용자들이 열광하는 사용자 인터페이스, 앱 스토 어, 시리 등과 같은 것들은 모두 소프트웨어를 통해 이뤄진 혁신들로서, 소프트웨어가 제품 경쟁력을 좌우하는 가장 중요한 요소가 되었다. 하드웨어 경쟁력에 치중하던 국 내 전자업계에서도 최근에는 소프트웨어 경쟁력 강화를 목표로 세우고 있으며 이를 위 해 엄청난 소프트웨어 인력들을 필요로 하고 있다. [그림 1-2] 컴퓨터와 소프트웨어

18 18 명품 C++ 프로그래밍 프로그래밍과 프로그래밍 언어 프로그래밍 프로그래밍 언어 기계어 어셈블리어 어셈블러 고급 언어 컴파일러 컴파일 컴퓨터가 처리할 일련의 작업을 묘사하는 것을 프로그래밍(programming)이라 하고, 이때 사용하는 컴퓨터 언어를 프로그래밍 언어(programming language)라고 한다. 이것은 마치 사람이 다른 사람에게 뜻을 전달하기 위해 글로 문서를 작성하는 것과 같다. 프로그래밍 언어에는 여러 가지 종류가 있다. 컴퓨터의 두뇌인 CPU는 이진수 (binary code)인 0과 1밖에 이해하지 못한다. 컴퓨터가 바로 이해하고 처리할 수 있 는 0과 1만의 이진수를 사용하는 가장 원시적인 언어를 기계어(machine language)라 고 한다. 그러나 기계어는 사람이 작성하기에는 매우 불편한 저수준 프로그래밍 언어 (low-level programming language)로서, 컴퓨터가 등장한 1950년대 초기에는 기계 어를 사용하여 프로그램을 작성하기도 하였지만, 프로그램을 만들기도 어렵고 작성된 프로그램을 읽고 수정하는 것 또한 어려웠다. 이러한 어려움을 해결하기 위해 0과 1로 구성되는 기계어의 각 명령어를 ADD, SUB, MOVE 등과 같이 사람이 표현하기 쉬운 상징적인 니모닉 기호(mnemonic symbol)로 일 대일 대응시킨 어셈블리어(assembly language)가 만들어졌다. 어셈블리어로 작성된 프로그램은 어셈블러(assembler)라고 부르는 시스템 프로그램에 의해 기계어 프로그 램으로 변환되어 컴퓨터에서 실행된다. 그러나 어셈블리어 역시 사람이 다루기 힘든 저수준 언어로서 복잡한 구조의 프로그램 작성이나 다양한 형태의 자료를 표현하기에 는 한계가 있다. 이에 사람이 이해하고 표현하기 쉬우며, 복잡한 알고리즘이나 다양한 프로그램 구 조 및 자료를 효율적으로 표현할 수 있는 Fortran, Pascal, Basic, C/C++, C#, Java 등 의 고급 언어(high-level programming language)가 생겨나게 되었다. 고급 프로그래 밍 언어로 작성된 프로그램은 컴파일러(compiler)라고 부르는 시스템 프로그램에 의 해 기계어로 변환되어 컴퓨터에서 실행된다. 고급 프로그램을 기계어 프로그램으로 변환하는 과정을 컴파일(compile)이라고 부른다. 그러나 보이지는 않지만 고급 프로 그램은 어셈블리어로 먼저 변환되고 다시 기계어로 변환되는 두 단계의 변환 과정을 거친다. [그림 1-3]은 프로그래밍 언어와 CPU, 사람 사이의 관계를 보여준다 =? LOAD AX 35 LOAD BX 56 ADD AX BX int i; i = ; 기계어 어셈블 어셈블리어 컴파일 C++ [그림 1-3] 사람과 고급 언어, 그리고 컴퓨터와 기계어 사이의 친밀성

19 01 CHAPTER C++ 시작 19 CHECK TIME 많은 전문가들이 미래 세상을 바꾸고 지배할 것으로 예측하는 것은? 1 CPU 2 소프트웨어 3 C++ 4 스티브잡스 다음 중 가장 고급 언어는? 1 C++ 2 기계어 3 어셈블리어 4 자바의 바이트 코드 1.2 C++ 언어의 역사 프로그래밍 언어의 진화와 C++ 언어 BCPL B 언어 C 언어 C++ 언어 객체 지향 Java [그림 1-4]는 C++ 언어를 기준으로 지금까지 개발된 프로그래밍 언어의 진화 과정을 축 소하여 보여준다. 1950년대부터 어셈블리어의 한계를 극복한 고급 언어들이 개발되 기 시작했다. 1954년에 Fortran이 개발되었으며, 1967년에 운영체제나 컴파일러와 같 은 시스템 소프트웨어(system software)를 작성하기 위한 용도로 BCPL이라는 언어가 Martin Richards에 의해 개발되었다. Ken Tompson은 1970년 BCPL을 개선하여 B 언어 를 만들었고, 1972년에 Ken Tompson과 Dennis Ritchie는 DEC PDP-11 컴퓨터에서 실 행되는 유닉스 운영체제(UNIX)를 작성하기 위해 B 언어를 개선한 C 언어를 만들었다. 그 후 C 언어는 가장 강력한 언어로 많은 프로그램 개발자들의 사랑을 받아 왔으며, 많 은 소프트웨어 작성에 사용되었고, 지금도 여전히 활발히 사용되고 있다. C 언어는 시 스템 소프트웨어뿐만 아니라 모바일, 게임, 그래픽, 임베디드 등 다양한 응용프로그램 의 개발에 이르기까지 광범위하게 사용되고 있다. 한편, 컴퓨터의 속도가 빨라짐에 따라 소프트웨어의 크기도 커지게 되었고, C 언 어로 덩치 큰 소프트웨어를 개발할 때 프로그램 코드 관리에 어려움을 겪게 되었 다. 이러한 어려움을 개선하기 위해 C 언어에 객체 지향 특성(object oriented programming) 및 기능을 추가하여 1983에서 1985년 사이에 Bell 연구소의 Bjarne Stroustrup은 C++ 언어를 만들었다. 객체 지향 프로그래밍 기법은 클래스와 상속을 이용하여 소프트웨어의 재사용성을 높이고 소프트웨어의 개발과 관리를 쉽게 한다. C++ 언어는 C 언어의 모든 기능을 가지고 있기 때문에 이미 작성된 C 소스 프로그램을 그대로 혹은 조금만 수정하면 C++ 프로그램으로 재사용할 수 있고, 이미 컴파일된 C 목적 코드도 C++ 프로그램에서 링크하여 사용할 수 있다. 객체 지향 특성의 장점은 다른 언어가 태동하는데 큰 기여를 하였다. 1995년에는 C++의 영향을 받은 또 하나의 객체 지향 언어인 Java가 선마이크로시스템(현재는 오

20 20 명품 C++ 프로그래밍 C# 언어 라클에 인수됨)의 제임스 고슬링에 의해 만들어졌으며, 2000년에는 마이크로소프트에 서 C++와 Java의 개념을 섞은 C# 언어를 만들었다. C#은.NET 프레임워크가 설치된 마 이크로소프트의 플랫폼 상에서만 실행된다. C++, C#, Java는 모두 C 언어에 바탕을 두 었기 때문에 서로 매우 유사하며, C 언어를 잘 알면 이들 언어의 습득은 매우 쉽다. Assembly 1954 Fortran 1958 Algol Martin Richards 1967 BCPL 1964 Basic Ken Tompson 1970 B Ken Tompson과 Dennis Ritchie 1972 C Bjarne Stroustrup 1983 C Objective-C 1987 Perl 1991 Visual Basic 1995 PHP 1995 Java 1995 Javascript 2000 C# [그림 1-4] 프로그래밍 언어의 진화와 C++의 기원 표준 C++ 프로그램의 중요성 ANSI C++ 표준 산업의 모든 분야에서 그렇지만 소프트웨어 개발 분야에서도 표준(standard)은 중요 하다. 1998년 미국 국립 표준원인 ANSI(American National Standards Institute)에 서 C++ 언어에 대한 표준을 정하였다. 그 후 2003년, 2007년, 2011년, 표준을 갱신하면 서 C++ 표준은 계속 진화해가고 있다. 현재 C++ 표준은 ISO/IEC14882 문서에 작성되어 있으나 아쉽게도 이 문서는 공짜가 아니다. 현재 대부분의 컴파일러 회사들은 이 ANSI

21 01 CHAPTER C++ 시작 21 표준의 중요성 비주얼 C++만의 전용 키워드 표준을 따르는 C++ 컴파일러를 제작 공급하고 있다. 그러므로 ANSI 표준에 따라 만들 어진 C++ 프로그램 소스는 모든 플랫폼, 모든 C++ 컴파일러에 의해 컴파일 가능하고, 모두 동일한 실행 결과를 보장한다. 이것이 바로 표준의 중요성이다. 한편, 볼랜드 사의 C++, 마이크로소프트의 비주얼 C++ 등 컴파일러를 제작하는 대 부분의 회사들은 표준 C++ 기능에 자신만의 기능을 첨가한다. 현재 PC에서 많이 사 용하는 비주얼 C++의 경우, C++ 표준에 자신만의 독특한 기능을 추가하고 있기 때문 에, C++ 언어 표준에 대한 이해 없이 비주얼 C++로 C++ 프로그램을 작성하였을 때, 다른 C++ 컴파일러나 표준 C++ 컴파일러에서는 컴파일되지 않는 문제가 나타날 수 있다. [그림 1-5]를 보자. 왼쪽의 경우, 표준 C++ 규칙에 따라 작성된 C++ 프로그램은 어떤 컴파일러에 의해서도 컴파일되고 타겟 컴퓨터에서 동일하게 실행되지만, 오른쪽 경우 cdecl이라는 비주얼 C++만의 전용 키워드를 사용하여 비주얼 C++ 컴파일러가 아닌 다른 컴파일러에 의해서는 컴파일되지 않는다. 표준 C++ 칙에 라 작성된 C++ 프로그램 표준 C++ 칙에 라 작성되지 않는 비주얼 C++ 프로그램 모든 C++ 컴파일러에 의해 컴파일 #include <iostream> int main() { std::cout << "Hello"; return 0; } 비주얼 C++ 전용 키워드 #include <iostream> int cdecl main() { std::cout << "Hello"; return 0; } 드 C++ 컴파일러 비주얼 C++ 컴파일러 GNU C++ 컴파일러 드 C++ 컴파일러 비주얼 C++ 컴파일러 GNU C++ 컴파일러 실행 파일 실행 파일 실행 파일 실행 파일 실행 파일 실행 파일 컴퓨터 컴퓨터 [그림 1-5] C++ 표준으로 작성된 C++ 프로그램은 모든 컴파일러에 의해 컴파일됨 ANSI 표준의 C++ 비주얼 C++ 도구를 이용하되 C++ 언어 표준에 준하여 프로그래밍하면 컴파일러나 플랫폼에 상관없이 컴파일되고 실행 가능하다. C++ 언어로 소프트웨어를 개발하여 세 상의 모든 컴퓨터와 플랫폼 사용자에게 판매하고자 한다면, 표준 C++ 언어로 프로그램 을 작성하는 것이 바람직하다. 이 책은 ANSI 표준의 C++에 대해서만 다룬다.

22 22 명품 C++ 프로그래밍 잠깐! 컴파일러와 목적 코드 컴파일러 회사는 자사의 독자적 기술을 사용하기 때문에, 컴파일러마다 컴파일한 실행 파일이 서로 다르다. 컴파일러 회사들은 목적 코드의 길이를 줄이고, 실행 속도를 높이고, 혹은 전력 소모를 적게 하는 기계어 명령들로 컴파일하기 위해 서로 경쟁하고 있다. CHECK TIME 다음 언어들을 만들어진 연대순으로 나열하라. Java, C, C#, C++ 다음 언어 중에서 가장 관련성이 떨어지는 것은? 1 C 2 C++ 3 Basic 4 Java C++ 표준이 중요한 이유는? 1 개발 속도 2 호환성 3 특수성 4 정확성 1.3 C++ 언어의 특징 C++ 언어의 주요한 설계 목표 호환성 객체 지향 개념 타입 체크 엄격 효율성 저하 최소화 C++ 언어의 기본적인 설계 목표에 대해 알아보자. 첫째, C 언어로 작성된 프로그램과의 호환성(compatability)을 유지한다. 기존 에 작성된 C 프로그램을 그대로 사용할 수 있도록 C 언어의 문법적 체계를 그대로 계 승한다. 또한 C 언어로 작성되어 컴파일된 목적 파일(object file)이나 라이브러리 (library)를 C++ 프로그램에서 링크하여 사용할 수 있도록 한다. 둘째, 소프트웨어의 재사용을 통해 소프트웨어 생산성을 높이고, 복잡하고 큰 규모 의 소프트웨어 작성, 관리, 유지 보수를 쉽게 하기 위해 데이터 캡슐화, 상속, 다형성 등 객체 지향 개념을 도입한다. 셋째, 타입 체크를 엄격히 하여 실행 시간 오류의 가능성을 줄이고 디버깅을 돕는다. 넷째, 실행 시간의 효율성 저하를 최소화한다. 객체 지향 개념의 도입으로 멤버 함 수의 호출이 잦아지고 이로 인해 발생하는 실행 시간 저하의 비효율성을 막기 위해 인 라인 함수의 도입 등 함수 호출로 인한 시간 저하를 막는다.

23 01 CHAPTER C++ 시작 23 C 언어에 추가한 기능 C++ 언어는 C 언어의 문법적 규칙을 그대로 승계하며, 프로그래밍의 편리와 다양성을 위해 다음과 같은 기능을 추가하였다. 인라인 함수 함수 중복 디폴트 매개 변수 참조 참조에 의한 호출 new와 delete 연산자 연산자 재정의 제네릭 함수와 클래스 인라인 함수(inline function) 자주 호출되는 함수의 경우 함수 호출 대신 함 수 코드를 확장 삽입하는 방식이며, 실행 시간을 줄인다(3장). 함수 중복(function overloading) 매개 변수의 개수나 타입이 서로 다른 동일 한 이름의 함수들을 선언할 수 있게 한다(6장). 디폴트 매개 변수(default parameter) 매개 변수에 값이 전달되지 않는 경우 디폴트 값이 전달되도록 함수를 선언할 수 있게 한다(6장). 참조(reference)와 참조 변수 변수에 별명을 붙여 변수 공간을 같이 사용할 수 있는 참조의 개념을 도입한다(5장). 참조에 의한 호출(call-by-reference) 함수 호출시 참조를 전달할 수 있게 한 다(5장). new와 delete 연산자 동적 메모리 할당, 해제를 위한 new, delete 연산자를 도 입한다(4장). 연산자 재정의(operator overloading) 기존의 연산자에 새로운 연산을 정의할 수 있게 한다(7장). 제네릭 함수와 클래스(generics) 함수나 클래스를 데이터 타입에 의존하지 않 고 일반화시킬 수 있게 한다(10장). C++의 객체 지향 특성 C++는 객체 지향 언어로서 다음과 같은 객체 지향 특성을 가지고 있다. 객체와 캡슐화(Encapsulation) 캡슐화 클래스 객체 실체 캡슐화는 데이터를 캡슐로 싸서 외부의 접근으로부터 데이터를 보호하는 객체 지향 특성이다. C++에서 캡슐의 역할을 하는 것이 클래스이며 class 키워드를 이용하여 작 성한다. 클래스는 객체를 정의하는 틀이며, 객체는 클래스라는 틀에서 생겨난 실체 (instance)이다. C++ 클래스는 멤버 변수들과 멤버 함수들로 이루어지며, 멤버들은 캡슐 외부에 공개하거나(public), 보이지 않게(private) 선언할 수 있다. 이중 공개 된 멤버들만 외부 객체들이 접근할 수 있다. C++ 프로그램 개발 시, 멤버 변수들은 외 부에 보이지 않게(private) 선언하여 외부에 노출시키지 않는 것이 좋다. 대신 일부 멤버 함수들을 외부에 공개하여(public), 이 멤버 함수를 통해서 멤버 변수에 간접적 으로 접근하게 한다. [그림 1-6]은 원 객체를 C++로 추상화한 Circle 클래스를 작성한 사례이다.

24 24 명품 C++ 프로그래밍 원 객체들 class Circle { 버들 private: int radius; // 지름 public: Circle(int r) { radius = r; } double getarea() { return 3.14*radius*radius; } }; [그림 1-6] 원 객체를 정의하는 C++ 클래스 상속 상속성(Inheritance) 객체 지향 언어에서 상속이란, 자식이 부모로부터 유산을 물려받는 개념이라기보다 는, 자식이 부모의 유전자를 물려받는 것과 유사하다. C++에서 상속은 객체를 정의하 는 클래스 사이에 상속 관계를 두어, 자식 클래스의 객체가 생성될 때 자식 클래스에 선언된 멤버뿐 아니라 부모 클래스에 선언된 멤버들도 함께 가지고 탄생하게 한다. 상 속은 구현된 코드의 재사용성을 높여서 소프트웨어 생산성을 높인다. [그림 1-7]은 상 속 관계로 선언된 3개의 클래스를 보여준다. MobilePhone(휴대 전화기) 클래스는 Phone(전화기) 클래스의 기능을 물려받고, MusicPhone(음악 기능 전화기) 클래스는 MobilePhone 클래스의 기능을 물려받는다. Phone 전화 기 전화 기 상속 기 MobilePhone 무선 기지 연결 배터리 전하기 상속 기 MusicPhone 음 다 기 음 재생하기 상속 관계 표현 class Phone { void call(); void receive(); }; class MobilePhone : public Phone { void connectwireless(); void recharge(); }; MobilePhone을 상속 는다. class MusicPhone : public MobilePhone { void downloadmusic(); void play(); }; C++로 상속 선언 Phone을 상속 는다. 전화기 대 전화기 음 기능 전화기 [그림 1-7] 상속 관계와 C++로 클래스 상속을 선언한 예 다형성 다형성(Polymorphism) 다형성은 하나의 기능이 경우에 따라 서로 다르게 보이거나 다르게 작동하는 현상을 일컫는다. 다형성의 한 예로서 더하기 연산자(+)를 보자. + 연산자는 다음과 같이 정 수 덧셈이나 문자열 연결(concatenation), 객체 더하기 등 피연산자에 따라 서로 다

25 01 CHAPTER C++ 시작 25 른 연산이 이루어질 수 있다 > 5 "남자" + "여자" --> "남자여자" redcolor 객체 + bluecolor 객체 --> purplecolor 객체 연산자 중복 operator overloading 함수 중복 function overloading 이것을 C++에서는 연산자 중복(operator overloading)이라고 부른다. 또한 같은 이름의 함수가 매개 변수의 개수나 타입이 다르면 서로 다른 함수로 인식되는 함수 중 복(function overloading)도 다형성의 하나이다. 다음 3개의 함수 add()는 C++에서 서로 다른 함수로 다루어진다. void add(int a, int b) {... } void add(int a, int b, int c) {... } void add(int a, double d) {... } 함수 재정의 함수 오버라이딩 function overriding C++에서 다형성은 상속 관계에서도 나타난다. [그림 1-8]은 상속 관계의 다형성을 보 여주는 한 예로서, 강아지, 고양이, 닭은 모두 동물 클래스의 속성을 상속받고, '소리 내기' 함수를 강아지, 고양이, 닭에서 모두 서로 다르게 구현하였다. 이것은 부모 클 래스에 구현된 함수를 동일한 이름으로 자식 클래스에서 다르게 구현하는 함수 재정의 혹은 함수 오버라이딩(function overriding)으로 불린다 소리내기 상속 기 [그림 1-8] 상속 관계에서 다형성 사례. 각 객체들의 소리내기 함수가 다르게 구현됨 C++ 언어에서 객체 지향 개념을 도입한 목적 C++는 C, Pascal 등 기존의 절차 지향 언어가 가진 단점을 보완하고 다음과 같은 목적 으로 객체 지향 개념을 도입하였다.

26 26 명품 C++ 프로그래밍 소프트웨어의 생산성 향상 컴퓨터 산업이 발전함에 따라 소프트웨어의 생명 주기(life cycle)가 짧아졌다. 이로 인해 제품이 기획되면 짧은 시간 내에 소프트웨어를 만들어야만 한다. C++는 상속, 다 형성, 객체, 캡슐화 등 소프트웨어의 재사용을 위한 객체 지향적 장치를 내장하고 있 기 때문에, 이미 만들어진 C++ 클래스를 상속받거나 C++ 객체를 가져다 재사용하거나, 부분 수정을 통해, 소프트웨어를 작성하는 부담을 대폭 줄일 수 있다. 소프트웨어의 생산성이 향상된다. 실세계에 대한 쉬운 모델링 과거의 소프트웨어는 수학 계산이나 통계 처리 등 대체로 처리 과정이나 계산의 절차 가 중요하므로 절차 지향 언어가 적합하였다. 그러나 컴퓨터가 산업 전반에 다양하 게 활용되는 요즘 시대에는 응용 소프트웨어를 하나의 절차로 모델링하기 어렵다. 산 업 전반에서 요구되는 응용 소프트웨어 특성상, 절차나 과정보다 관련된 많은 물체(객 체)들의 상호 작용으로 묘사하는 것이 더 쉽고 적합하다. 이에 실세계의 현상을 보다 쉽게 프로그래밍하기 위해 객체를 중심으로 하는 객체 지향 언어가 나타나게 되었다. 게임을 예로 들어보자. 게임은 하나의 흐름도(flow chart)에 의해 진행되지 않는다. 게 임에는 인물, 무기, 배경 등의 요소들이 등장하며, 이들은 프로그램이 실행되는 동안 그래, 이 모든 것들을 객체로 프로그래밍하니 쉽구나. [그림 1-9] 실세계의 일을 프로그래밍하기 적합한 객체 지향 언어

27 01 CHAPTER C++ 시작 27 사용자의 입력에 의해 죽고, 살고, 움직이는 등 상호 작용하기 때문에 여기에 흐름도 는 힘을 쓰지 못한다. 객체 지향 언어는 게임에 등장하는 각 요소를 객체로 정의하고, 객체의 속성과 행위를 묘사하고 객체 사이의 상호 작용을 표현하는 방법으로 효과적인 프로그래밍을 할 수 있게 한다. 절차 지향 프로그래밍과 객체 지향 프로그래밍 C 언어 등을 이용하여 실행하고자 하는 절차대로 일련의 명령어를 나열하여 프로그래 절차 지향 프로그래밍 밍하는 방법을 절차 지향 프로그래밍(procedural programming)이라고 부르며, 이런 방법론에 사용되는 언어를 절차 지향 언어라고 한다. 절차 지향 프로그래밍은 작업을 절차로 표현하며, 명령들의 순서나 흐름에 중점을 둔다. 자판기 시뮬레이터를 구현하 는 경우를 예로 들어보자. 절차 지향 프로그래밍은 [그림 1-10](a)와 같이 흐름도(flow chart)를 설계하고 흐름도상의 동작들을 함수로 작성하여 흐름도에 따라 일련의 동작 들이 순서에 맞추어 실행되도록 작성한다. 그러나 실제 응용의 세계는 일련의 행위뿐만 아니라 각 물체 간의 관계, 상호 작용 시작 동전 입력 돈이 충분 한가? 아니오 예 돈통 커피통 물통 프림통 컵통 버튼2 버튼3 상품 선택 상품 재고 있나? 아니오 자판기 엔진 예 상품 인도 디스플레이 버튼1 종료 (a) 절차 지향 프로그래밍으로 구현할 때의 흐름도 (b) 객체 지향 프로그래밍으로 구현할 때의 객체 관계도 [그림 1-10] 자판기 시뮬레이터를 구현하는 절차 지향 프로그래밍과 객체 지향 프로그래밍의 비교

28 28 명품 C++ 프로그래밍 객체 지향 프로그래밍 등 훨씬 복잡하게 구성되어 있다. 이것을 절차 지향 언어로 표현하기에는 한계가 있 다. 객체 지향 개념은 이런 단점을 극복하며 프로그램을 보다 실제 세상에 가깝게 모 델링(modeling)하여 실제 세상의 물체를 객체로 표현한다. 그리고 객체들의 관계, 상 호 작용을 객체 지향 기법으로 구현한다. 자판기 시뮬레이터를 객체 지향 프로그래밍 으로 구현하는 경우, [그림 1-10](b)와 같이 객체를 추출하고 객체들의 관계를 결정하고 이들의 상호 작용을 멤버 함수와 멤버 변수로 구현한다. 11장 연습문제에서 커피자판 기 시뮬레이터를 작성하는 실습 문제를 풀어보라. C++ 언어와 제네릭 프로그래밍 제네릭 프로그래밍 generic programming 제네릭 함수 제네릭 클래스 템플릿 STL 최근에 제네릭 프로그래밍(generic programming)이라는 새로운 프로그래밍 패러 다임이 사용되고 있다. 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있 도록 함수와 클래스를 일반화시킨 제네릭 함수(generic function)와 제네릭 클 래스(generic class)를 만들고, 제네릭 함수와 제네릭 클래스에서 개발자가 원하 는 데이터 타입을 적용시켜 프로그램 코드를 틀에서 찍어내는 듯이 생산하는 기법 이다. 2003년 ANSI C++ 표준에서 전격적으로 C++ 표준 라이브러리의 2/3를 제네릭으로 표 준화하였다. 입출력 라이브러리를 과감하게 템플릿(template)으로 선언하여 제네릭 화하고, 응용프로그램 개발에 필요한 대부분의 자료 구조를 제네릭 함수와 제네릭 클 래스로 구현한 STL(Standard Template Library)을 도입하여, 제네릭 프로그래밍 시 대를 출범시켰다. 제네릭은 C++뿐 아니라 Java, C# 등 다른 객체 지향 언어에서도 이미 도입하여 사용 하고 있으며 점점 그 중요성이 높아지고 있으므로 독자들이 잘 알아두어야 할 것이다. 10장에서는 제네릭 함수와 제네릭 클래스를 만들고 활용하는 방법과 C++ 표준 STL 라 이브러리를 사용하는 방법을 다루며, 부록 G에서는 STL의 고급 활용에 대해서 추가적 으로 설명한다. C++ 언어의 아킬레스 캡슐화 전역 변수 C++ 언어는 C 코드와의 호환성이라는 중요한 목표로 설계되어 기존의 C 코드 를 재사용할 수 있게 되었지만, 그것으로 인해 객체 지향의 핵심 개념인 캡슐화 (encapsulation)의 원칙이 다소 무너졌다. 캡슐화의 기본 원칙은 코드와 데이터를 외부의 접근으로부터 보호하기 위해, 변수 와 함수를 캡슐 즉 클래스 안에 선언하도록 하는 강력한 원칙이다. Java 언어는 이 원 칙을 굳건히 지키고 있지만, C++에서는 C 언어로 작성된 프로그램을 수용하기 위해, 함수 바깥에 전역 변수를 선언할 수 있는 C 언어의 특성을 받아들일 수밖에 없었다. 결

29 01 CHAPTER C++ 시작 29 국 이것 때문에, C++에서 클래스라는 캡슐 바깥에 함수나 전역 변수를 만들 수 있게 허 용하였으며, C 프로그래밍에 있었던 전역 변수의 사용에 따른 부작용(side effect)이 여전히 존재하게 된다. 비유하자면, 집 안에 있어야 하는 내 소유물들을 집 바깥에 두 어서 오가는 사람들이 함부로 건드릴 수 있게 된 것과 같다. CHECK TIME C 언어와 호환성을 유지하기 위해 원칙이 무너지게 된 C++ 언어의 객체 지향 특성은? 1 캡슐화 2 다형성 3 상속성 4 데이터 추상화 C++에서 C 언어에 새로 추가한 기능이 아닌 것은? 1 멀티스레딩 2 인라인 함수 3 연산자 중복 4 참조에 의한 호출 1.4 C++ 프로그램 개발 과정 [그림 1-11]을 통해 C++로 프로그램을 개발하는 과정을 알아보자. 이 과정은 C++ 소스 프 로그램(source program) 작성, 컴파일(compile), 링킹(linking)을 통해 하나의 실행 파일(executable file)을 만드는 과정으로 세분화된다. 일단 실행 파일이 생성되면 실 행 파일은 독립적으로 실행 가능하므로, 실행되는 동안 소스 파일이나 목적 파일이 필 요 없다. 이제 [그림 1-11]을 보면서 이 과정을 하나씩 살펴보자. C++ 소스 프로그램 작성 통합 개발 환경 C++ 소스 프로그램은 표준 확장자가 cpp인 텍스트 파일이므로 아무 텍스트 편집기를 이용하여도 작성 가능하다. [그림 1-11]에서 hello.cpp는 화면에 "Hello" 문자열을 출력 하는 간단한 C++ 소스 프로그램이다. 대부분의 컴파일러 회사들이 C++ 소스 프로그램 의 작성 및 편집, 컴파일, 링킹, 실행, 디버깅 등 C++ 프로그램 개발의 모든 단계를 지 원하는 통합 개발 환경(Integrated Development Environment)을 제공하고 있기 때문 에, 독자들은 허접한 텍스트 편집기를 이용하지 말고 C++ 통합 개발 소프트웨어를 이 용하기 바란다. 마이크로소프트의 Visual C++(비주얼 C++)는 PC에서 사용되는 대표적 인 통합 개발 소프트웨어이다.

30 30 명품 C++ 프로그래밍 C++ 라이브러리 cout... << Hello C++ 소스 프로그램 작성 #include <iostream> int main() { std::cout << "Hello"; return 0; } 소스 파일 (hello.cpp) _main,12# 컴파일 $<< 링킹 _Hello001 실행 오 발생 목적 파일 (hello.obj) 실행 파일 (hello.exe) 오 수정 디버깅 [그림 1-11] C++ 프로그램 개발 과정 컴파일(compile) C++ 소스 프로그램 작성이 완료되었으면, C++ 컴파일러를 이용하여 C++ 소스 프로그램 을 컴파일한다. C++ 컴파일러는 C++ 소스 프로그램이 문법에 맞게 작성되었는지 검사 하고, 기계어 코드로 변환하여 목적 파일(object file)을 생성한다. 만일 문법에 맞지 않게 작성된 C++ 코드를 발견하면 컴파일 오류를 발생시킨다. 컴파일 후 기계어로 변환된 모양을 보여 주기 위해, [그림 1-12]를 마련하였다. [그 림 1-12]는 hello.cpp를 컴파일한 기계어 코드 리스트를 보여준다. C++ 소스의 각 라인 별로 컴파일된 기계어 코드와 각 기계어 코드에 해당하는 어셈블리어 코드도 함께 보 인다.

31 01 CHAPTER C++ 시작 #include <iostream> int main() { std::cout << "Hello"; return 0; } (a) hello.cpp 소스 파일 _main PROC ; COMDAT int main() { 라인을 어셈블리어 코드 ; 3 int main() { 컴파일한 기계어 코드 push ebp b ec mov ebp, esp ec c sub esp, 192 ; c0H push ebx 0000a 56 push esi 0000b 57 push edi 0000c 8d bd 40 ffff ff lea edi, DWORD PTR [ebp -192] b mov ecx, 48 ; H b8 cc cc cc cc mov eax, ; cccccccch 0001c f3 ab rep stosd ; 4 : std::cout << "Hello"; 0001e push OFFSET??_C@_05COLMCDPH@Hello?$AA@ a mov eax, DWORD PTR imp_?cout@std@@3v?$basic_ostream@du?$ push eax e call??$?6u?$char_traits@d@std@@yaaav?$basic_ostream@du?$ 0002e 83 c4 08 add esp, 8 ; 5 : return 0; c0 xor eax, eax ; 6 : } f pop edi e pop esi b pop ebx c4 c add esp, 192 ; c0H 0003c 3b ec cmp ebp, esp 0003e e call RTC_CheckEsp b e5 mov esp, ebp d pop ebp c3 ret 0 _main ENDP (b) hello.cpp를 컴파일한 기계어와 어셈블리어 코드 리스트 [그림 1-12] hello.cpp를 컴파일하여 생성된 기계어와 어셈블리어 코드 리스트

32 32 명품 C++ 프로그래밍 잠깐! 컴파일 시 어셈블리어 출력 결과 얻기 [그림 1-12]는 비주얼 C++로 hello.cpp를 컴파일할 때, 기계어와 어셈블리어 코드 리스트를 파일로 저장하도록 한 후, 설명을 위해 파일을 보기 좋게 정리한 것이다. C++ 소스 파일을 컴파일한 기계어 나 어셈블리어 코드 리스트를 얻고 싶다면, 비주얼 C++의 프로젝트 메뉴에서 속성 메뉴를 선택하여 속성 창을 출력하고, 이 창에서 구성 속성/C/C++/출력 파일/어셈블러 출력 메뉴를 차례로 선택하고, 어셈블리, 기계어 코드, 소스 (/FAcs) 옵션을 선택한 후, 창을 닫고 나와서 프로젝트를 빌드하면 프 로젝트 폴더의 Debug 폴더 안에 hello.cod 파일이 생성된다. 이 파일은 텍스트 파일이므로 비주얼 C++에서 열어 볼 수 있다. 링킹(linking) 컴파일 후 기계어로 구성된 목적 파일(object file)이 생성되었다 하더라도 목적 파일 은 바로 실행될 수 없다. 개발자가 작성한 C++ 프로그램이 표준 C++ 라이브러리나 다 른 C++ 프로그램에 있는 함수, 객체, 데이터를 이용하는 경우, 개발자가 작성한 C++ 소 스의 목적 파일에는 이들에 대한 참조 표시만 있을 뿐 이들 코드를 포함하지 않는다. 그러므로 목적 파일은 온전한 실행 파일이 아니며 이들과 결합되어야만 비로소 실행 가능한 파일이 된다. [그림 1-11]의 hello.cpp 예를 들어보자. 다음 라인은 "Hello"를 화면에 출력하기 위 해 cout 객체와 << 연산자를 사용하고 있다. std::cout << "Hello"; 링킹 하나의 실행 파일로 만드는 과정 cout 객체와 << 연산자 함수 코드는 C++ 표준 라이브러리에 컴파일된 형태로 존재 하며, hello.obj에는 이들에 대한 참조 표시만 있다. 그러므로 hello.obj와 cout, << 연산자 함수의 코드를 함께 결합하는 링킹 과정이 필요하다. 링킹(linking)이란 어떤 목적 파일이 참조하는 C++ 표준 라이브러리나 다른 목적 파일 속에 있는 함수, 객체, 데이터를 포함하여 실행에 필요한 모든 기계어 코드를 확 보하여, 하나의 실행 파일로 만드는 과정이다. 링킹의 결과 비로소 실행에 필요한 모 든 요소를 포함한 하나의 실행 파일(exe 파일)이 만들어진다. 실행 파일에는 실행 에 필요한 모든 요소들이 들어 있다. [그림 1-13]은 hello.obj와 표준 C++ 라이브러리 로부터 cout 객체와 << 연산자 함수를 합쳐 hello.exe 파일로 링킹하는 과정을 보여 준다. 만일 링킹 과정 동안 목적 파일에서 참조하는 코드를 다른 목적 파일이나 C++ 표준 라이브러리 속에서 발견할 수 없다면 링크 오류가 발생한다.

33 01 CHAPTER C++ 시작 33 hello.obj 표준 C++ 라이브러리 hello.exe << << 링킹 cout cout [그림 1-13] 링킹은 목적 파일이 필요로 하는 함수나 객체를 다른 목적 파일이나 라이브러리로부터 찾고 결합하여 실행 파일을 만드는 과정 잠깐! 링킹과 DLL(Dynamic Linking Library) 일반적으로 개발자가 작성한 C++ 소스와 이 소스에서 필요한 모든 라이브러리는 링킹 단계에서 완전 히 결합되어 하나의 온전한 실행 파일이 만들어지며, 실행 시 이 실행 파일 외에 다른 코드는 필요 없 다. 하지만, 링킹 단계에서 결합하지 않고, 실행 중 필요한 순간에 결합하도록 만들어진 라이브러리가 있는데, 이것이 바로 DLL이다. DLL은 실행 파일의 크기를 줄이는 역할과 함께 여러 응용프로그램이 실행 중에 공유하는 특징이 있다. 프로그램 실행과 디버깅 디버깅 디버거 링킹의 과정에 의해 생성된 실행 파일(exe 파일)은 컴퓨터에서 바로 실행 가능하다. 만일 프로그램에 논리적 오류가 있다면, 실행 중 프로그램이 중단되거나 잘못된 결 과를 내게 된다. 이런 경우, 프로그램 내에 오류 위치를 발견하거나 문제의 원인을 찾아 수정하는 과정을 디버깅(debugging)이라고 부른다. 디버깅은 일반적으로 디 버거(debugger)라는 특별한 소프트웨어를 이용한다. 디버거는 C++ 프로그램을 라 인 단위로 실행시키면서 변수 값의 변화를 관찰하거나, 원하는 소스 라인에 정지점 (breakpoint)을 설정하여 프로그램이 정상적인 경로로 실행되는지 관찰하는 등 다양 한 오류 수정 방법을 제공한다. 디버거는 일반적으로 컴파일러를 공급하는 회사에서 함께 공급한다. 잠깐! C++ 프로그램의 확장자 ANSI C++ 표준에서 C++ 소스 프로그램의 확장자는.cpp이다. 컴파일러에 따라.cxx,.c++,.cc,.C,.CC 등 다양한 확장자를 사용하고 있으므로, 해당 컴파일러의 매뉴얼을 참조할 필요가 있다. 목적 파 일의 확장자 역시 운영체제에 따라 조금씩 다르다. 윈도우 운영체제에서는.obj이며 유닉스 운영체제 의 경우.o를 사용한다. 실행 파일의 경우, 윈도우 운영체제에서는.exe이며 유닉스에서는 정해진 확 장자가 없고 개발자가 마음대로 사용하면 된다.

34 34 명품 C++ 프로그래밍 CHECK TIME C++ 프로그램 개발에서 링킹이 필요한 이유가 아닌 것은? 1 C++ 코드의 디버깅을 효율적으로 하기 위해 2 C++ 프로그램에서 표준 C++ 라이브러리의 함수를 호출한 경우, 개발자가 작성한 코드와 표준 라 이브러리 코드를 합쳐 실행 파일을 만드는 과정이 필요하기 때문 3 C++ 프로그램을 여러 개의 C++ 소스 파일로 나누어 작성할 때, 한 소스 파일에서 다른 소스 파일 의 함수를 호출하면 두 프로그램을 합치는 과정이 필요하기 때문 4 C++ 언어로 작성된 목적 파일과 C 언어로 작성된 목적 파일을 합쳐 실행 파일을 만드는 과정이 필요하기 때문 main.cpp, f.cpp, g.cpp로 구성되는 C++ 프로그램 개발 과정에 대해 다음에 답하라. (1) main.cpp, f.cpp, g.cpp를 각각 컴파일하여 생성되는 목적 파일은 무엇인가? (2) 목적 파일들을 연결하여 하나의 실행 파일을 만드는 과정을 무엇이라고 하는가? 1.5 C++ 표준 라이브러리 C++ 표준 라이브러리 C 라이브러리 C++ 입출력 라이브러리 C++ STL 라이브러리 개발자들은 자신이 필요한 함수나 클래스를 스스로 작성하기도 하지만, 이미 만들어 진 함수나 클래스를 활용하여 프로그램 개발에 걸리는 시간을 단축하고 프로그램의 확 장성이나 정확성을 높인다. C++ 표준 라이브러리는 개발자들이 불러 쓸 수 있는 다양 한 종류의 함수와 클래스가 컴파일된 목적 파일(object file)들이다. 이들 함수나 클 래스 이름이 표준화되어 있기 때문에 C++ 표준 컴파일러 사이에 호환된다. C++ 표준 라이브러리는 컴파일된 목적 파일로만 제공되고 원시 소스 코드는 공개되지 않는다. C++ 표준 라이브러리에 포함된 함수와 클래스는 <표 1-1>과 같이 수십 개의 헤더 파 일에 분산되어 있으며 다음 3그룹과 기타 기능으로 나뉜다. C 라이브러리 기존 C 표준 라이브러리를 수용하여 C++에서 사용할 수 있게 한 함수들로서, <표 1-1>에 이름이 c로 시작하는 헤더 파일에 선언됨 C++ 입출력 라이브러리 콘솔 및 파일 입출력을 위한 함수와 클래스들로서, 제 네릭 프로그래밍을 지원하기 위해 템플릿으로 작성. <표 1-1>에서 초록색 글자로 표기된 것들 C++ STL 라이브러리 제네릭 프로그래밍을 지원하기 위해 템플릿으로 작성된 유 용한 함수와 클래스를 포함하는 라이브러리. <표 1-1>에서 검은색 글자로 표기된 것들 C++ 표준 라이브러리에 대한 구체적인 설명은 다음 사이트를 참고하기 바란다.

35 01 CHAPTER C++ 시작 35 <표 1-1> C++ 표준 라이브러리를 구성하는 헤더 파일들 algorithm complex exception list stack bitset csetjmp fstream locale stdexcept cassert csignal functional map strstream cctype cstdarg iomanip memory streambuf cerrno cstddef ios new string cfloat cstdio iosfwd numeric typeinfo ciso646 cstdlib iostream ostream utility climits cstring istream queue valarray clocale ctime iterator set vector cmath deque limits sstream * <new> 헤더 파일은 STL에 포함되지 않는 기타 기능을 구현함 1.6 Visual C++를 이용한 C++ 프로그램 개발 Visual C++ 통합 개발 환경 Visual C++는 마이크로소프트의 Visual Studio 패키지에 포함된 C++ 통합 개발 환경 (IDE, Integrated Development Environment)으로서, C++ 소스 편집기, C++ 컴파일러 및 링커, 소스 레벨 디버거 등을 모두 갖추고 있으므로, Visual C++만 있으면 C++ 프로 그램을 개발하는데 다른 도구가 필요 없다. 이 책에서는 누구나 무료로 다운받아 사용할 수 있는 Visual C Express 판 을 사용한다. 다음 사이트는 Visual C++ 등 Visual Studio의 각종 Express 판(평가판) 을 무료로 다운받을 수 있는 사이트이다. Visual C Express는 이 사이트에서 제품 메뉴를 선택하면 다운받을 수 있 다. 현재 Visual C 판이 출시되어 있지만, 많이 배포되어 있지 않기 때문에 이 책에서는 2010 Express 판으로 선택하였다. 원하는 독자는 2012 Express 판을 다운받 고 제품 등록하여 키를 입력하면 영구적으로 사용할 수 있다.

36 36 명품 C++ 프로그래밍 Visual C++ 시작 Visual C Express를 설치하였으면 윈도우의 왼쪽 하단에 시작 버튼을 클릭하 고 모든 프로그램 을 선택한다. 여기서 다시 Microsoft Visual C Express 를 선택하면 3가지 메뉴가 보이고 이 중 첫 번째 메뉴로 보이는 Microsoft Visual C Express 를 선택하면 Visual C++가 실행되어 [그림 1-14]와 같은 창이 출력된다. [그림 1-14] Visual C Express를 처음 실행한 화면 프로젝트 만들기 프로젝트 솔루션 C++ 프로그램을 작성하기 위해서는 프로젝트(project)를 생성하는 작업부터 시작해 야 한다. 하나의 프로젝트는 하나의 C++ 프로그램을 작성하기 위해 필요한 소스 파일, 헤더 파일, 리소스 파일, 그리고 컴파일된 목적 파일과 실행 파일, 마지막으로 이들을 관리하기 위한 메타 파일 등을 포함하는 폴더의 개념이다. Visual C++에는 프로젝트보다 큰 개념으로 솔루션(solution)이 있다. 솔루션이란 개발자가 작성하고자 하는 소프트웨어를 구성하는 모든 프로젝트를 담는 컨테이너이 다. 솔루션은 하나의 프로젝트로만으로 이루어질 수도 있고, 여러 개의 프로젝트로 이 루어질 수도 있다. [그림 1-14]의 왼쪽에 보이는 솔루션 탐색기 창은 솔루션에 포함된 여러 프로젝트와 각 프로젝트에 포함된 파일들을 보여 주는 탐색기 창이다.

37 01 CHAPTER C++ 시작 37 이제, 다음과 같은 솔루션과 프로젝트를 만들어보자. 솔루션명 : chap1 프로젝트명 : Hello C++ 소스 파일명 : hello.cpp 프로그램 내용 : 화면에 "Hello" 문자열 출력 우선 솔루션과 프로젝트를 생성하기 위해 파일/새로 만들기/프로젝트 메뉴를 차례 로 선택하면 [그림 1-15]와 같은 창이 출력된다. 왼쪽의 템플릿 창에서 Win32 를 선택하 면 오른쪽 창에 2가지 종류의 프로젝트가 보인다. 여기서 Win32 콘솔 응용 프로그램 을 선택한다. 그리고 아래에 있는 이름 칸에 프로젝트 이름 Hello를, 위치 칸에 솔루 션을 담을 폴더를, 솔루션 이름 칸에 chap1을 입력한 후, 확인 버튼을 누른다. 프로젝트 이름 C:\C++\chap1\Hello 폴더가 생 다. 솔루션 위 C:\C++\chap1 폴더를 생성한다. [그림 1-15] 프로젝트 메뉴에서 프로젝트 이름, 솔루션 이름 등을 입력하는 창 프로젝트 생성 그러면 생성된 프로젝트에 대한 간략한 설명과 함께 마법사의 실행을 알리는 창이 [그림 1-16]과 같이 출력된다. 여기서 다음> 버튼을 누르면, 마법사는 다시 [그림 1-17]과 같은 창을 보여주며, 독자들은 추가 옵션 란에 빈 프로젝트 를 체크하고 마침 버튼을 누르면 된다. 이제 프로젝트 생성이 완료되었다.

38 38 명품 C++ 프로그래밍 [그림 1-16] 생성된 프로젝트에 대한 확인 창 체크해 함 [그림 1-17] Win32 응용 프로그램 마법사에서 빈 프로젝트 선택 C++ 소스 프로그램 편집 프로젝트가 생성되면 [그림 1-18]의 Visual C++ 인터페이스를 가진 창이 보인다. 왼쪽 의 솔루션 탐색기 창에 솔루션 chap1 과 프로젝트 Hello 가 보이고, 프로젝트에 포함 된 4개의 요소(리소스 파일, 소스 파일, 외부 종속성, 헤더 파일)가 보인다.

39 01 CHAPTER C++ 시작 39 [그림 1-18] Hello 프로젝트 생성 후 이제, C++ 소스 프로그램을 작성할 차례이다. [그림 1-19]와 같이 솔루션 탐색기 창에 서 소스 파일 위에 마우스 오른쪽 버튼을 누르면 콘텍스트 메뉴가 보이며 여기서 추 가/새 항목 메뉴를 선택한다. 그러면 [그림 1-20]의 새 항목 추가를 위한 창이 출력되며, 왼쪽 창에서 코드 를 선택 하고 오른쪽 창에서 C++ 파일(.cpp) 를 선택한다. 그리고 마지막으로 [그림 1-20] 아래 부분의 이름 란에 hello.cpp 를 입력하고 추가 버튼을 누른다. 이제, [그림 1-21] 창이 보이고 빈 hello.cpp 파일이 생성되었다. [그림 1-19] 소스 파일 에 마우스 오른쪽 버튼을 눌러 새 항목을 만드는 메뉴 선택

40 40 명품 C++ 프로그래밍 코드 선택 C++ 소스 파일 이름 입력 hello.cpp가 생기는 폴더 [그림 1-20] hello.cpp 소스 파일 생성 빈 hello.cpp 파일 생성 [그림 1-21] hello.cpp가 생성된 초기 모습 비야네 스트롭스트룹(덴마크어 : Bjarne Stroustrup 비아르네 스트 로우스트루프, ~ )은 C++ 프로그래밍 언어를 개발한 것으 로 유명한 덴마크의 컴퓨터 과학자이며, 2004년 현재 텍사스 A&M 대학 의 컴퓨터과 학과장으로 재직 중이다. 그는 1975년 덴마크의 Aarhus 대학에서 수학과 컴퓨터 과학 석사를 받았고, 1979년 영국 케임브리 지 대학교에서 컴퓨터 과학 분야의 박사학위를 받았다. 2002년까지는 (사진 출처 : 위키백과)

41 01 CHAPTER C++ 시작 41 독자들은 [그림 1-22]와 같이 소스 프로그램을 입력하라. hello.cpp는 화면에 "Hello"를 출력하고 종료하는 간단한 프로그램이다. 프로그램 작성 [그림 1-22] hello.cpp를 작성한 모습 컴파일과 빌드 컴파일 빌드 hello.cpp 파일의 작성이 끝났으면 컴파일을 해보자. [그림 1-23]과 같이 솔루션 탐색 기 창에서 hello.cpp 위에 마우스 오른쪽 버튼을 눌러 콘텍스트 메뉴를 출력하고 컴파 일 메뉴를 선택한다. 혹은 Ctrl+F7 키를 입력한다. 그 결과, hello.cpp만 컴파일하여 hello.obj가 만들어진다. 컴파일과 링킹을 모두 시행하여 실행 파일 Hello.exe를 만 들려고 하면 빌드(build) 명령을 시행하여야 한다. 빌드는 [그림 1-24]와 같이 프로젝 트명 Hello 위에 마우스 오른쪽 버튼을 눌러 콘텍스트 메뉴를 출력하고 빌드 메뉴를 선택하면 된다. 빌드 명령 실행 결과 컴파일과 링킹을 거쳐 Hello.exe가 만들어진다. AT&T 벨연구소에서 대형 프로그래밍 연구부(Large-scale Programming Research Department)를 이끌었었다. 그리고 지금까지 20여 년 동안 ISO에서 활동하면서, C++ 언어를 소프트웨어 개발을 위한 안 전성과 최신 기반을 제공하는 언어로 만들기 위해 애쓰고 있다.

42 42 명품 C++ 프로그래밍 hello.cpp 컴파일, 컴파일만 수행 [그림 1-23] 솔루션 탐색기에서 hello.cpp에 마우스 오른쪽 버튼을 누를 때 컴파일 메뉴 빌드 메뉴를 선택하면, 컴파일과 링크 후 Hello.exe 생성 [그림 1-24] Hello 프로젝트의 빌드로 Hello.exe 생성 프로그램 실행 컴파일 된 프로그램을 실행시키기 위해서는 메인 메뉴에서 디버거/디버깅하지 않고

43 01 CHAPTER C++ 시작 43 Ctrl+F5 시작 메뉴를 선택하든지 Ctrl+F5 키를 선택하면 된다. 그 결과 [그림 1-25]와 같이 빌드 할 것인지를 묻는 창이 출력된다. 여기서 예 를 선택하면 빌드가 이루어지고 프로그램 이 실행된다. 그 결과 [그림 1-26]과 같은 DOS 윈도우가 나타나며 프로그램의 실행 결과 가 출력된다. 컴파일과 빌드의 과정을 한 번에 하려면 앞의 [그림 1-23]의 컴파일 과정을 생략하고 바로 Ctrl+F5 키를 치면 된다. F5 키만 입력하면 디버거 모드에서 실행되어 실행 결과 를 보여주고 바로 DOS 윈도우를 닫아버리므로 사용자는 출력 결과를 볼 수 없음에 주 의하기 바란다. [그림 1-25] Ctrl+F5(디버깅하지 않고 실행하기 메뉴) 키로 실행하였을 때 빌드를 묻는 창 Hello 프로젝트 빌드 성. Hello.exe 생성 [그림 1-26] Hello 프로젝트가 실행되는 화면

44 44 명품 C++ 프로그래밍 요약 SUMMARY 컴퓨터와 프로그래밍 전문가들은 소프트웨어가 주목받는 세상이 왔고, 이 시대의 IT 세계를 지배할 것으로 예측한다. 소프트웨어는 컴퓨터의 중앙처리장치(CPU)가 이해할 수 있는 일련의 명령들과 데이터로 구성되며, CPU는 이 명령들을 실행함으로써 요구된 기능을 수행한다. 프로그래밍 언어는 0과 1의 이진수로 구성되는 기계어(machine language), 기계어의 각 명령어를 ADD, SUB, MOVE 등과 같은 상징적 니모닉 기호로 일대일 대응시킨 어셈블리어(assembly language), 사람의 언어에 보다 가까운 C, C++, Java 등의 고급 언어로 진화하였다. 고급 언어는 컴파일러에 의해 기계어로 변환되고, 어셈블리어 프로그램은 어셈블러라는 시스템 프로 그램에 의해 기계어로 변환된다. 대부분의 경우 컴파일러는 기계어로 변환할 때 어셈블러를 이용한다. C++ 언어의 역사 C++는 1967년 BCPL 언어에서 태동하여, 1970년 B, 1972년 C 언어로 진화하고, 1983년 Bjarne Stroustrup에 의해 만들어졌다. 표준 C++ 규칙에 맞게 작성된 C++ 프로그램은 하드웨어, 운영체제 플랫폼에 상관없이 표준 C++ 컴파 일러에 의해 컴파일되고 동일한 실행 결과가 보장된다. C++ 언어의 특징 C++ 언어의 주요한 설계 목표는 C 언어와의 호환성, 객체 지향 개념 도입, 엄격한 타입 체크, 실행 시 간의 효율성 저하 최소화 등이다. C++ 언어에서 C 언어에 추가적으로 도입한 기능은, 인라인 함수, 함수 중복, 디폴트 매개 변수, 참조와 참조 변수, 참조에 의한 호출, new와 delete 연산자, 연산자 재정의, 제네릭 함수와 제네릭 클래스 등 이다. C++의 객체 지향 특성으로는 캡슐화, 상속, 다형성 등이며, C++에서 객체 지향 특성을 도입한 목적은 소프트웨어의 생산성을 향상하고, 실세계 문제를 쉽게 모델링하기 위한 것이다. 실행하고자 하는 절차대로 명령어를 나열하여 프로그램을 작성하는 방법을 절차 지향 프로그래밍 (procedural programming)이라고 부른다. 실제 세상과 가깝게 모델링하기 위해, 응용에 필요한 물체(객체)를 모델링하고, 이들 간의 관계, 상호 작용을 표현하는 프로그래밍 기법이 객체 지향 프로그래밍(object oriented programming)이다. 제네릭 프로그래밍은 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있도록 클래스와 함 수를 일반화시킨 제네릭 함수와 제네릭 클래스를 활용하는 기법이다. C++ 언어는 C 언어와의 호환성으로 인해 클래스 바깥에 변수를 선언할 수 있도록 허용함에 따라 캡슐 화의 원칙이 무너졌다. C++ 프로그램의 개발 과정 C++ 프로그램은 C++ 소스 프로그램의 편집, 컴파일, 링킹 과정으로 세분화된다. 그리고 실행 오류를 수정하는 작업을 디버깅이라고 부른다. C++ 소스 프로그램은 표준 확장자가.cpp인 텍스트 파일로서 아무 텍스트 편집기로 작성 가능하다. C++ 컴파일러로 생성된 목적 코드는 바로 실행할 수 없고, 링킹 과정을 거쳐야 한다. Visual C++와 같이 C++ 프로그램 작성, 컴파일, 링킹, 실행, 디버깅 등 C++ 프로그램 개발에 필요한 모든 도구를 지원하는 C++ 통합 개발 환경을 사용하는 것이 좋다. C++ 표준 라이브러리 C++ 표준 라이브러리는 C 라이브러리, C++ 입출력 라이브러리, STL 라이브러리의 3그룹과 기타로 구 분되며, C 라이브러리를 제외한 두 그룹은 템플릿(제네릭)으로 작성되어 있다.

45 01 CHAPTER C++ 시작 45 Open Challenge 기본 C++ 프로그램 작성 목 적 Visual C++로 솔루션과 프로 젝트 만들기, 기본 C++ 프로 그램 작성 Visual Studio를 활용하여 다음에 지시한 대로 C++ 프로그램을 작성하고 실행하라. 난이도 3 솔루션명 : OpenChallenge 프로젝트명 : chap1 소스 파일명 : add.cpp add.cpp 코드와 실행 결과는 아래와 같다. 30계속하려면 아무 키나 누르십시오...

46 46 명품 C++ 프로그래밍 연습문제 EXERCISE 이론 문제 홀수 문제는 정답이 공개됩니다. 1. 전문가들은 IT 분야에서 어떤 종류의 기업이 미래를 지배할 것이라고 예측하는가? 1 가전 기업 2 소프트웨어 기업 3 증권사 4 석유회사 2. 다음 설명 중에서 틀린 것은? 1 사람과 가장 친밀한 프로그래밍 언어가 고급 언어이다. 2 CPU는 기계어만 이해하고 처리할 수 있다. 3 고수준 언어를 저수준 언어로 번역할 컴파일러가 필요하다. 4 기계어를 익혀서 프로그램을 작성하는 것이 좋은 개발자가 되는 지름길이다. 3. 다음 언어 중에서 계보가 다른 것은? 1 Java 2 C 3 C++ 4 Fortran 4. 다음 중 객체 지향 언어가 아닌 것은? 1 Java 2 C 3 C++ 4 C# 5. 객체 지향 언어가 태동하게 된 원인이 아닌 것은? 1 소프트웨어의 크기가 점점 커지게 되어 관리의 어려움을 극복하기 위해 2 소프트웨어의 생명 주기가 짧아지게 됨에 따라 빠른 소프트웨어 작성이 요구되어 3 운영체제 독립적인 프로그램 작성이 필요해서 4 실세계의 문제를 모델링하는데 객체의 개념이 적합해서 6. 다음 중 객체 지향 개념에 포함되지 않는 것은? 1 상속 2 흐름도 3 캡슐화 4 다형성 7. C++ 언어가 C 언어의 문법적 체계를 계승받음으로써 좋은 점은? 1 C 언어로 작성된 프로그램과 호환성을 가질 수 있다. 2 C 언어처럼 빠르게 실행될 수 있다. 3 C 언어처럼 절차 지향 프로그래밍도 할 수 있다. 4 전역 변수를 만들어서 여러 함수에서 공유할 수 있다.

47 01 CHAPTER C++ 시작 C++ 언어가 C 언어의 문법적 체계를 계승받음으로써 나타난 문제점은? 1 개발 과정이 복잡해졌다. 2 프로그램 관리가 어려워졌다. 3 C 라이브러리를 사용할 수 없게 되어 불편하다. 4 전역 변수가 존재하게 되어 캡슐화의 원칙이 무너졌다. 9. 다음 빈칸에 적절한 단어를 기입하라. C++는 언어와의 호환성을 목표로 하여 설계되었으며 객체 지향 개념을 추가하였다. 그러 나 클래스 바깥에 전역 변수나 함수들을 선언하게 됨으로써 객체 지향의 핵심 개념인 의 원칙이 무너지게 되었다. 10. ANSI C++ 표준으로 C++ 프로그램을 작성할 때의 장점은? 1 확장성 2 호환성 3 실행 성능 4 개발 용이성 11. C++의 객체 지향 특징이 아닌 것은? 1 상속 3 인라인 함수 2 함수 중복 4 클래스 12. C++ 언어가 가지고 있는 3가지 객체 지향 특성을, 주어진 예를 이용하여 설명하라. (1) 캡슐화 : TV 객체로 캡슐화를 설명하라. (2) 다형성 : > 연산자로 다형성을 설명하라. (3) 상속성 : 메뚜기는 생물이다 라는 문구로 상속성을 설명하라. 13. C++에서는 C 언어와 달리 다음 3개의 함수를 함께 작성하고 구분하여 호출할 수 있다. 어떤 객체 지향 특성을 말하는가? int big(int a, int b); int big(int a[], int size); int big(int a, int b, int c); 14. C++ 언어가 C 언어에 추가한 내용이 아닌 것은? 1 인라인 함수 2 함수 중복 3 참조에 의한 호출 4 타입 변환

48 48 명품 C++ 프로그래밍 15. C와 C++ 언어에 대해 말한 것 중 틀린 것은? 1 C++ 코드는 객체 지향 개념의 도입에 따라 C 코드에 비해 실행 속도가 떨어질 우려 가 있다. 2 C++ 표준에 따라 소스 프로그램을 작성하면 높은 호환성으로 인해 거의 모든 종류 의 C++ 컴파일러에 의해 컴파일 가능하다. 3 C++ 프로그램은 C 소스 프로그램을 수용하여 사용할 수 있지만, 이미 컴파일된 C 언어의 목적 파일은 링크시켜 사용할 수 없다. 4 C 소스 파일의 표준 확장자는.c이고 C++ 소스 파일의 표준 확장자는.cpp이다. 16. C++ 프로그램에 대해 다음 중 틀린 것은? 1 C++ 소스 파일은 텍스트 파일이 아니라 바이너리 파일이다. 2 C++ 소스 파일의 표준 확장자는.cpp이지만 컴파일러에 따라.cc,.CC,.c++ 등의 확장자를 갖기도 한다. 3 C++ 소스 파일을 컴파일한 목적 파일의 확장자는.obj 혹은.o와 같이 운영체제에 따라 다를 수 있다. 4 C++ 프로그램의 디버깅이란 실행 파일(exe 파일)을 실행할 때 나타나는 오류를 발 견하고 수정하는 과정이다. 17. 링킹에 대한 설명 중 바른 것은? 1 C++ 소스 파일을 컴파일하여 생긴 목적 파일(obj 파일)은 기계어로 이루어져 있기 때문에 바로 실행 가능하다. 2 링킹 후 생성되는 실행 파일(exe 파일)을 컴퓨터에서 실행시키기 위해서는 목적 파일(obj 파일)도 함께 필요하다. 3 링킹은 C++ 프로그램 개발 과정에서 실행 파일을 만들기 위해 반드시 필요하다. 4 링킹을 통해 실행 파일(exe 파일)과 다른 실행 파일을 합쳐서 하나의 실행 파일 (exe 파일)을 만들 수 있다. 18. 다음 그림에서 링킹의 의미를 구체적으로 설명하라. hello.obj 표준 C++ 라이브러리 hello.exe << << 링킹 cout cout

49 01 CHAPTER C++ 시작 C++ 프로그램의 확장자에 대한 설명 중 틀린 것은? 1 C++ 소스 파일의 확장자는.cpp,.cxx,.c++ 등 운영체제에 따라 다양하다. 2 비주얼 C++에서.c 확장자를 가진 파일은 C 컴파일러가,.cpp 확장자를 가진 파일 은 C++ 컴파일러가 자동으로 컴파일한다. 3 목적 파일의 확장자는.obj나.o 등 운영체제에 따라 다르다. 4 실행 파일의 확장자는 운영체제에 관계없이.exe로 표준화되어 있다. 20. C++ 표준 라이브러리에 포함되지 않는 것은? 1 C++ 통신 라이브러리 2 C++ 입출력 라이브러리 3 STL 라이브러리 4 C 라이브러리 21. 다음 빈칸에 적절한 단어를 기입하라. 최근에 동일한 프로그램 코드에 구체적인 타입을 적용할 수 있도록 함수나 클래스를 일반화시 킨 함수와 클래스를 이용하여 프로그램을 작성하는 새로운 프로그래밍 패러다임인 이 활발히 사용되고 있다. 이것은 흐름도를 중심으로 작업의 실행 순 서에 따라 프로그램을 작성하는 프로그래밍 기법에서, 객체 사이의 상호 작용과 관계 를 중심으로 프로그램을 작성하는 프로그래밍 기법 이후에 도입된 것이다. 22. C++ 통합 개발 환경이란 무엇을 말하는가? 실습 문제 표시가 있는 문제는 정답이 공개됩니다. 1. Visual C++를 활용하여 다음에 지시한 대로 C++ 프로그램을 작성하고 실행하라. 솔루션명 : prac1 프로젝트명 : 1-1 소스 파일명 : name.cpp 난이도 3 #include <iostream> int main() { std::cout << "My name is Mike.\n"; return 0; } My name is Mike. 계속하려면 아무 키나 누르십시오...

50 50 명품 C++ 프로그래밍 2. 다음 지시대로 자신의 학과, 나이, 희망 직업을 화면에 출력하는 C++ 프로그램을 Visual C++로 작성하라. 난이도 3 솔루션명 : prac1 프로젝트명 : 1-2 소스 파일명 : me.cpp 컴퓨터공학과 21세 대통령 계속하려면 아무 키나 누르십시오 에서 10까지 더하여 결과를 화면에 출력하는 C++ 프로그램을 Visual C++로 작성하 라. 난이도 3 1에서 10까지 더한 결과는 55입니다 계속하려면 아무 키나 누르십시오... std::cout을 이용하여 숫자, 문자, 문자열 등을 출력할 수 있다. std::cout << "결과는 " << 55 << "입니다"; 4. 다음과 같이 출력하는 C++ 프로그램을 Visual C++로 작성하라. 난이도 3 * ** *** **** 계속하려면 아무 키나 누르십시오...

51 저 자 약 력 황기태 현 한성대학교 컴퓨터공학과 교수 서울대학교 컴퓨터공학과 박사 서울대학교 컴퓨터공학과 석사 서울대학교 컴퓨터공학과 학사 비트교육센터 센터장 IBM Watson Research Center 방문 연구원 University of California, Irvine 방문 교수 University of Florida 방문 교수 저자와의 협의에 의해 인지를 생략합니다. 명품 C++ Programming 황기태 지음 초 판 인 쇄 : 초 판 발 행 : 발 행 인 : 김 승 기 발 행 처 : 생능출판사 신 고 번 호 : 제 호 신 고 일 자 : 경기도 파주시 문발동 파주출판도시 대표전화 : (031) , FAX : (031) 홈페이지 : I S B N : (93000) * 파본 및 잘못된 책은 바꾸어 드립니다. 정가 29,000원

52 부록-심화학습

53

54 머 리 말 한 권의 책에 C++에 관한 이론과 연습을 담는 것은 거의 불가능합니다. 명품 C++ 프로그래밍 책은 C 언어를 아는 독자들이 15주 한 학기에 C++를 학습할 수 있도록 구성하였으며, 책에서 다루지 못한 심화 내용과 실전에서 필요한 지식은 부록에 보 충하였습니다. 부록에 담은 내용을 간략히 요약하면 다음과 같습니다. 부록 A. C와 C++ 비교 C++를 처음 공부하는 사람들은 공통적으로 C++와 C의 다른 부분에 대해 궁금해 합니다. 부록 A는 큰 관점에서 이들을 간략히 비교합니다. 부록 B. namespace 2003년 C++의 새로운 표준에서 namespace의 개념이 수용됩니다. 부록 B는 이름 공간과 namespace에 대한 개념, 자신만의 이름 공간을 만드는 방법 등에 초점을 맞 추어 설명합니다. 부록 C. 키 입력 시 흔히 발생하는 문제 키 입력을 받는 프로그램을 작성할 때 개발자들이 당면하는 두 가지 문제와 해결 방법을 설명합니다. cin >>로 정수를 입력받고자 하는데, 사용자가 문자를 입력해 서 프로그램이 무한 루프를 돌거나 실행이 종료되는 상황을 경험하였을 것입니다. 또 cin >>와 get(), getline() 등을 섞어서 키 입력을 받으면, <Enter> 키 때문에 오류가 발생하기도 합니다. 부록 C는 이 두 가지 문제에 대한 해결 방안을 설명합 니다. 부록 D. private이나 protected 생성자 : singleton 사례 생성자를 private이나 protected로 작성하는 경우가 있을까요? 있습니다. 부록 D는 이런 경우에 대해 설명하고, 대표적인 사례로 singleton 프로그래밍 기법을 설명합니다. P R E F A C E 3

55 부록 E. 한글 문자열과 한글 입출력 한글 입출력은 과거부터 지금까지 여전히 다루기 힘든 부분입니다. char 타입의 변수에 한글 한 글자를 저장할 수 없고, cin으로 한글 문자열을 입력받을 수는 있 지만, 한글 문자를 입력받을 수는 없습니다. 또한 cin으로 한글과 영어가 섞인 문 자열을 입력받았다 할지라도 글자 단위로 떼어서 사용하려고 할 때 문제가 생깁니 다. 부록 E는 한글 문자와 입출력에 관해 자세히 설명합니다. P R E F A C E 부록 F. 연산자 중복 추가 설명 책의 본문에서 다루지 못했던 [], new, delete, (), = 연산자를 작성하는 방법에 대해 사례와 함께 설명합니다. 부록 G. STL 고급 활용 STL을 잘 알면 프로그래밍이 쉬워집니다. 책의 본문에서는 초보자의 수준에 맞 추어 STL의 기초 개념과 vector 클래스의 기초적인 사용법에 관해서만 소개하였습 니다. 부록 G에서는 STL에 관한 고급 활용에 대해 설명합니다. 실전에서는 객체를 vector의 원소로 주로 사용하기 때문에, vector에 객체나 객체 포인터를 삽입 삭 제하는 응용 사례를 소개하고, vector에 삽입된 객체들에 알고리즘 함수 sort()를 적용하는 방법과 함수 객체(predicate)를 이용하여 소팅하는 방법을 설명합니다. 또한 연관 컨테이너 클래스인 map 컨테이너로 객체를 관리하는 방법을 자세히 소 개합니다. 부록 H. RTTI 실행 중에 포인터로 실제 타입 알아내기 실행 중에 포인터가 가리키는 객체와 관련된 정보를 알아낼 필요가 있습니다. 부록 H는 이를 위해, typeid 연산자, type_info 클래스, dynamic_cast 연산자에 대해 소개합니다. 부록 I. 파일 입출력 팁과 응용 사례 파일 입출력과 관련된 몇 가지 이슈를 설명하고, 점수 관리 응용프로그래밍 사 례를 통해 파일 입출력 코드 작성에 대해 설명합니다. 부록 J. ASCII 코드 책의 본문에서 필요한 ASCII 코드표를 첨부합니다. 4

56 차 례 부록 A. C와 C++ 비교 6 부록 B. namespace 10 부록 C. 키 입력 시 흔히 발생하는 문제 18 부록 D. private이나 protected 생성자 : singleton 사례 23 부록 E. 한글 문자열과 한글 입출력 25 부록 F. 연산자 중복 추가 설명 38 부록 G. STL 고급 활용 50 부록 H. RTTI-실행 중에 포인터로 실제 타입 알아내기 74 부록 I. 파일 입출력 팁과 응용 사례 79 부록 J. ASCII 코드 88 C O N T E N T S 5

57 APPENDIX A C와 C++ 비교 1. 기초 문법 비교 C++ 언어는 C 언어의 키워드와 문법 구조를 그대로 계승한다. 지금부터 C 언어를 기준 으로 C++ 언어가 C 언어에 추가한 내용을 간단히 요약해보자. bool true false 데이터 타입과 변수 선언 C++는 C 언어의 데이터 타입과 리터럴을 그대로 계승하며, bool 타입과 bool 타입의 리터럴인 true와 false를 추가하였다. 3, -1, 3.3, 0x1a, 'a', "hello", true, false // 리터럴 bool isvisible = true; // bool 타입의 사례 객체 배열 배열 C 언어의 배열 선언과 사용은 C++에서 모두 동일하다. 다만 C++에서는 객체 배열을 선 언할 수 있다. 참조 개념 도입 포인터와 참조 C++는 C 언어의 포인터 개념을 그대로 계승하였으며, C 언어에는 없는 참조(reference) 개념을 새로 도입하였다. 참조는 기존 변수에 대한 별명으로서 변수 공간을 따로 만들 지 않고 기존 변수 공간을 공유한다. 다음은 참조 변수 country를 선언하고 사용하는 사례이다. int nation; int & country = nation; // country는 nation과 동일한 공간을 공유. 참조 변수 country = 1; // nation과 country 모두 값 1을 가짐

58 APPENDIX 부록 A. C와 C++ 비교 7 주석 // C 언어에서 주석을 다는 방법은 /* */뿐이지만 C++에서는 /* */ 외에 //를 추가하였 다. //부터 시작하여 라인의 끝까지 주석으로 처리한다. /* 이 프로그램은 정수 배열을 정렬하여 출력합니다. 작성자 : 황기태 작성일 : 2013년 9월 */ int main() { // C++ 프로그램은 main()에서 실행을 시작한다. return 0; } 문장과 식, 연산자 C++는 C 언어와 동일하게 문장 끝에 세미콜론(;)을 붙인다. 그리고 C++ 연산자는 C 언 어의 연산자를 그대로 계승하고, dynamic_cast, static_cast, reinterpret_cast, const_cast, typeid, new, delete 연산자를 새로 추가하였다. 조건문 C++는 C 언어의 조건문을 그대로 계승하며 추가된 것은 없다. if, else, else if, switch, break, continue, goto 반복문 C++는 C 언어의 3개의 반복문을 그대로 계승하며 추가된 것은 없다. for, while, do-while 동적 메모리 할당 new delete C 언어에서 힙으로부터 동적으로 메모리를 할당받아 사용하기 위해 malloc()과 calloc()을, 반환하기 위해서는 free() 함수를 이용한다. 그러나 C++에서는 힙으로부터 메모리를 할당받는 특별한 라이브러리 함수가 필요 없도록, new와 delete 연산자를 도입 하였다. 그러므로 C++에서는 언어 차원에서 메모리 할당 해제를 지원하고 있다.

59 8 명품 C++ 프로그래밍 함수 원형 선언 C++ 함수를 작성하는 방법은 C 언어의 함수 작성 방법을 그대로 계승한다. 그러나 함 수의 원형을 선언하는 방식은 다르다. C 언어에서는 함수의 매개 변수가 있든 없든 함 수 이름만으로 선언한다. 예를 들면 다음과 같다. int add(); // C 언어 함수 원형 선언. 본래는 int add(int x, int y)이지만 매개 변수 선언이 필요 없음 매개 변수의 타입을 반드시 기입 그러나 C++에서는 함수의 원형을 선언할 때 매개 변수의 타입을 반드시 기입하여야 한다. int add(int x); // C++에서 함수 원형 선언 int add(int x, int y); // C++에서 함수 원형 선언 return 문 main() 함수만 return 문을 생략 또한 C 언어에서는 int를 리턴하는 함수의 경우 return 문이 없어도 되지만, C++에 서 리턴 타입에 적합한 return 문이 반드시 있어야 한다. 예외적으로 main() 함수만 return 문을 생략할 수 있으며 이때 return 0;로 처리된다. 함수의 인자 전달 참조에 의한 호출 매개 변수가 참조 타입 C 언어에서 함수의 인자 전달 방식은 '값에 의한 호출', '주소에 의한 호출'의 2 가지 방식만 있지만, C++에서 '참조에 의한 호출'을 새로 도입하였다. '참조에 의한 호출' 은 매개 변수가 참조 타입으로 선언된 경우이다. 인라인 함수 inline 인라인 함수 실행 속도 향상 C++에서 인라인 함수를 새로 도입하였다. 함수 앞에 inline으로 선언하여 인라인 함수 를 만든다. 컴파일러는 인라인 함수를 호출하는 위치에 인라인 함수의 코드를 확장하 는 방식으로 컴파일하여 함수 호출 과정이 없게 한다. 이로 인해 프로그램의 실행 속 도가 향상된다. 헤더 파일의 확장자 헤더 파일은 확장자가 없다 C 언어에서 헤더 파일의 확장자는.h이다. 구버전 C++에서도.h의 확장자를 사용하였 지만, 2003년 이후 새 버전의 C++ 표준에서 헤더 파일은 확장자가 없다. 입출력 방법 C++와 C 언어의 입출력 혹은 파일 입출력 라이브러리는 확연히 다르다. C++ 프로그램

60 APPENDIX 부록 A. C와 C++ 비교 9 istream ostream iostream ifstream ofstream fstream 개발자는 C 언어의 입출력 방식을 완전히 잊고 C++ 입출력 라이브러리를 사용하는 것 이 좋다. C 언어에서는 <stdio.h> 헤더 파일에 선언된 scanf(), printf(), getchar(), putchar() 등의 함수를 사용하지만, C++에서는 이들 기능을 모두 캡슐화한 istream, ostream, iostream 클래스를 이용한다. 파일 입출력 또한 C 언어에서는 fopen(), fread(), fwrite(), fseek() 등의 함수를 이용하지만 C++에서는 이들 기능을 캡슐화 한 ifstream, ofstream, fstream 클래스를 사용한다. 2. 객체 지향 특성 함수 중복 C++에서는 같은 이름의 함수를 매개 변수 타입이나 개수만 다르면 얼마든지 중복하여 작성할 수 있다. 연산자 중복 C++에서는 피연산자가 다른 경우 기존의 연산자에 새로운 연산을 실행하는 연산자 중 복을 허용한다. 'cout <<'이나 'cin >>'에서 << 와 >> 연산자는 입출력 라이브러리에 새로 중복된 연산자이다. 클래스와 상속 C++에서는 객체를 캡슐화하는 클래스를 선언하고, 클래스 사이에 상속을 선언할 수 있다. 템플릿과 제네릭 프로그래밍 template 키워드 C++에서는 template 키워드를 이용하여 함수나 클래스를 데이터 타입에 의존하지 않 고 일반화시킨 템플릿 함수나 템플릿 클래스를 작성할 수 있다. 템플릿에서 구체적인 타입을 대입하여 구체적인 타입만 처리할 수 있는 구체화된 버전의 함수나 클래스를 이용하여 프로그램을 작성하는 제네릭 프로그래밍을 지원한다. namespace namespace C++에서 namespace는 이름 공간을 만드는 키워드로서 개발자가 작성하는 프로그램에 이름 공간을 선언할 수 있게 하여, 동일한 이름의 변수나 함수, 클래스가 이름 공간이 다르면 서로 다르게 인식되어 이름 충돌을 막는다.

61 저 자 약 력 황기태 현 한성대학교 컴퓨터공학과 교수 서울대학교 컴퓨터공학과 박사 서울대학교 컴퓨터공학과 석사 서울대학교 컴퓨터공학과 학사 비트교육센터 센터장 IBM Watson Research Center 방문 연구원 University of California, Irvine 방문 교수 University of Florida 방문 교수 저자와의 협의에 의해 인지를 생략합니다. 명품 C++ Programming 부록-심화학습 황기태 지음 - 경기도 파주시 문발동 파주출판도시 대표전화 : (031) , FAX : (031) 홈페이지 : * 파본 및 잘못된 책은 바꾸어 드립니다. 초 판 인 쇄 : 초 판 발 행 : 발 행 인 : 김 승 기 발 행 처 : 생능출판사 신 고 번 호 : 제 호 신 고 일 자 :

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

프입2-강의노트-C++배경

프입2-강의노트-C++배경 Chapter 00. C++ 배경 박종혁교수 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr SeoulTech 2019-2 nd 프로그래밍입문 (2) 2 프로그래밍과프로그래밍언어 2 프로그래밍언어 기계어 (machine language) 0, 1 의이진수로구성된언어 컴퓨터의 CPU 는본질적으로기계어만처리가능 어셈블리어

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

C 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상 Android 용 Brother Image Viewer 설명서 버전 0 KOR 아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상표입니다. Android는

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

Microsoft PowerPoint - 2주차.pptx

Microsoft PowerPoint - 2주차.pptx 1 2주차 C 에서 C++로 세상을 먹어 치우는 소프트웨어 2 소프트웨어 기업의 세상 미국의 대형 서점 보더스 -> 아마존에 대패 블록버스터(Blockbuster) -> 네플릭스(Neflix)에 대패 ebay, Facebook, Groupon, Skype, Twitter, Android, 아이튠스, 판도라, 픽사 등 엄청난 소프트웨어 인력들을 필요로 하는 세상이

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

회원번호 대표자 공동자 KR000****1 권 * 영 KR000****1 박 * 순 KR000****1 박 * 애 이 * 홍 KR000****2 김 * 근 하 * 희 KR000****2 박 * 순 KR000****3 최 * 정 KR000****4 박 * 희 조 * 제

회원번호 대표자 공동자 KR000****1 권 * 영 KR000****1 박 * 순 KR000****1 박 * 애 이 * 홍 KR000****2 김 * 근 하 * 희 KR000****2 박 * 순 KR000****3 최 * 정 KR000****4 박 * 희 조 * 제 회원번호 대표자 공동자 KR000****1 권 * 영 KR000****1 박 * 순 KR000****1 박 * 애 이 * 홍 KR000****2 김 * 근 하 * 희 KR000****2 박 * 순 KR000****3 최 * 정 KR000****4 박 * 희 조 * 제 KR000****4 설 * 환 KR000****4 송 * 애 김 * 수 KR000****4

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

초보자를 위한 C++

초보자를 위한 C++ C++.., C# Java C++., C++. C++,. C++.,,.. C++. C++,,., C++.. C++,,, C++..,. C++ C++. C++. 24?. 12, C++.... A..... /... 25.,.,. Java C#., C++., Java C#, C++., Microsoft Visual C++ Borland C++ Builder C++.

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

<B3EDB9AEC0DBBCBAB9FD2E687770>

<B3EDB9AEC0DBBCBAB9FD2E687770> (1) 주제 의식의 원칙 논문은 주제 의식이 잘 드러나야 한다. 주제 의식은 논문을 쓰는 사람의 의도나 글의 목적 과 밀접한 관련이 있다. (2) 협력의 원칙 독자는 필자를 이해하려고 마음먹은 사람이다. 따라서 필자는 독자가 이해할 수 있는 말이 나 표현을 사용하여 독자의 노력에 협력해야 한다는 것이다. (3) 논리적 엄격성의 원칙 감정이나 독단적인 선언이

More information

hlogin2

hlogin2 0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS

More information

No Slide Title

No Slide Title Copyright, 2017 Multimedia Lab., UOS 시스템프로그래밍 (Assembly Code and Calling Convention) Seong Jong Choi chois@uos.ac.kr Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea

More information

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - chap04-연산자.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에

More information

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a 6 장복사생성자 객체의생성과대입객체의값에의한전달복사생성자디폴트복사생성자복사생성자의재정의객체의값에의한반환임시객체 C++ 프로그래밍입문 1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y;

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

More information

SBR-100S User Manual

SBR-100S User Manual ( 1 / 13 ) SBR-100S 모델에 대한 사용자 펌웨어 업그레이드 방법을 안내해 드립니다. SBR-100S 는 신규 펌웨어가 있을시 FOTA(자동업데이트) 기능을 통하여 자동 업그레이드가 되며, 필요시 사용자가 신규 펌웨어를 다운받아 수동으로 업그레이드 할 수 있습니다. 1. 준비하기 1.1 연결 장치 준비 펌웨어 업그레이드를 위해서는 SBR-100S

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

View Licenses and Services (customer)

View Licenses and Services (customer) 빠른 빠른 시작: 시작: 라이선스, 라이선스, 서비스 서비스 및 주문 주문 이력 이력 보기 보기 고객 가이드 Microsoft 비즈니스 센터의 라이선스, 서비스 및 혜택 섹션을 통해 라이선스, 온라인 서비스, 구매 기록 (주문 기록)을 볼 수 있습니다. 시작하려면, 비즈니스 센터에 로그인하여 상단 메뉴에서 재고를 선택한 후 내 재고 관리를 선택하십시오. 목차

More information

강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상 2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌

강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상  2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌 강의계획서. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 학점교 강사명교 강사전화번호 강의시간 시간강의실수강대상 E-mail. 교과목학습목표 차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌어나갈핵심기술의기초로프로그래밍에주목하고있다. 이에본교과목에서객체지향언어의기본개념을학습한후구조적프로그래밍언어와의차이점을학습한다.

More information

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 11 장상속 1. 상속의개념을이해한다. 2. 상속을이용하여자식클래스를작성할수있다. 3. 상속과접근지정자와의관계를이해한다. 4. 상속시생성자와소멸자가호출되는순서를이해한다. 이번장에서만들어볼프로그램 class Circle { int x, y; int radius;... class Rect { int x, y; int width, height;... 중복 상속의개요

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

C++ Programming

C++ Programming C++ Programming 상속과다형성 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 상속의이해 상속과다형성 다중상속 2 상속과다형성 객체의이해 상속클래스의객체의생성및소멸 상속의조건 상속과다형성 다중상속 3 상속의이해 상속 (Inheritance) 클래스에구현된모든특성 ( 멤버변수와멤버함수 )

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070> 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include "QuickSort.h" 7 using namespace std; 8 9 10 Node* Queue[100]; // 추가입력된데이터를저장하기위한 Queue

More information

Deok9_Exploit Technique

Deok9_Exploit Technique Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345]) 입출력 C++ 의효율적인입출력방법을배워보자. 이장에서다룰내용 1 cin 과 cout 을이용한입출력 2 입출력연산자중복 3 조작자생성 4 파일입출력 01_cin 과 cout 을이용한입출력 포맷입출력 C++ 의표준입출력은 cin, cout 을사용한다. C 의 printf 는함수이므로매번여러인자를입력해줘야하지만, cin/cout 에서는형식을한번만정의하면계속사용할수있다.

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 13 장파일처리 1. 스트림의개념을이해한다. 2. 객체지향적인방법을사용하여파일입출력을할수있다. 3. 텍스트파일과이진파일의차이점을이해한다. 4. 순차파일과임의접근파일의차이점을이해한다. 이번장에서만들어볼프로그램 스트림 (stream) 스트림 (stream) 은 순서가있는데이터의연속적인흐름 이다. 스트림은입출력을물의흐름처럼간주하는것이다. 입출력관련클래스들 파일쓰기

More information

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Microsoft Word - windows server 2003 수동설치_non pro support_.doc Windows Server 2003 수동 설치 가이드 INDEX 운영체제 설치 준비과정 1 드라이버를 위한 플로피 디스크 작성 2 드라이버를 위한 USB 메모리 작성 7 운영체제 설치 과정 14 Boot Sequence 변경 14 컨트롤러 드라이버 수동 설치 15 운영체제 설치 17 운영체제 설치 준비 과정 Windows Server 2003 에는 기본적으로

More information

C++ Programming

C++ Programming C++ Programming C++ 스타일의입출력 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 C 스타일의입출력 C++ 스타일의입출력 2 C 스타일의입출력 #include C 스타일의입출력 int main() { int a, b, c; printf(" 세개의정수입력 : "); scanf("%d

More information

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가 수업주제 경찰 출동! (버튼, LED, 버저 사용하기) 9 / 12 차시 수업의 주제와 목표 본 수업에서는 이전 차시에 배웠던 블록들의 기능을 복합적으로 활용한다. 스위치 기능을 가진 버튼을 활용하여 LED와 버저를 동시에 작동시키도록 한다. 각 블록들을 함께 사용하는 프로젝트를 통해 각각의 기능을 익히고 보다 다양한 활용 방법을 구상할 수 있다. 교수 학습

More information

Microsoft PowerPoint - additional08.ppt [호환 모드]

Microsoft PowerPoint - additional08.ppt [호환 모드] 8. 상속과다형성 (polymorphism) 상속된객체와포인터 / 참조자의관계 정적바인딩과동적바인딩 virtual 소멸자 Jong Hyuk Park 상속의조건 public 상속은 is-a 관계가성립되도록하자. 일반화 ParttimeStd 구체화 2 상속의조건 잘못된상속의예 현실세계와완전히동떨어진모델이형성됨 3 상속의조건 HAS-A( 소유 ) 관계에의한상속!

More information

Microsoft 을 열면 깔끔한 사용자 중심의 메뉴 및 레이아웃이 제일 먼저 눈에 띕니다. 또한 은 스마트폰, 테블릿 및 클라우드는 물론 가 설치되어 있지 않은 PC 에서도 사용할 수 있습니다. 따라서 장소와 디바이스에 관계 없이 언제, 어디서나 문서를 확인하고 편집

Microsoft 을 열면 깔끔한 사용자 중심의 메뉴 및 레이아웃이 제일 먼저 눈에 띕니다. 또한 은 스마트폰, 테블릿 및 클라우드는 물론 가 설치되어 있지 않은 PC 에서도 사용할 수 있습니다. 따라서 장소와 디바이스에 관계 없이 언제, 어디서나 문서를 확인하고 편집 Modern Modern www.office.com ( ) 892 5 : 1577-9700 : http://www.microsoft.com/korea Microsoft 을 열면 깔끔한 사용자 중심의 메뉴 및 레이아웃이 제일 먼저 눈에 띕니다. 또한 은 스마트폰, 테블릿 및 클라우드는 물론 가 설치되어 있지 않은 PC 에서도 사용할 수 있습니다. 따라서 장소와

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 15 강. 표준입출력목차 C++ 입출력클래스 입출력형식설정방법 setf, unsetf 멤버함수에의한입출력형식설정 setf 이외의멤버함에의한입출력형식설정 입출력조작자에의한입출력형식설정 문자및문자열입출력멤버함수 문자단위입출력 줄단위입력 입출력스트림상태 string 클래스 complex

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

(Microsoft Word - \301\337\260\243\260\355\273\347.docx) 내장형시스템공학 (NH466) 중간고사 학번 : 이름 : 문제 배점 점수 1 20 2 20 3 20 4 20 5 10 6 10 7 15 8 20 9 15 합계 150 1. (20 점 ) 다음용어에대해서설명하시오. (1) 정보은닉 (Information Hiding) (2) 캡슐화 (Encapsulation) (3) 오버로딩 (Overloading) (4) 생성자

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

2. 4. 1. 업무에 활용 가능한 플러그인 QGIS의 큰 들을 찾 아서 특징 설치 마 폰 은 스 트 그 8 하 이 업무에 필요한 기능 메뉴 TM f K 플러그인 호출 와 TM f K < 림 > TM f K 종항 그 중에서 그 설치 듯 할 수 있는 플러그인이 많이 제공된다는 것이다. < 림 > 다. 에서 어플을 다운받아 S or 8, 9 의 S or OREA

More information

Tcl의 문법

Tcl의 문법 월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

PowerPoint Template

PowerPoint Template 16-1. 보조자료템플릿 (Template) 함수템플릿 클래스템플릿 Jong Hyuk Park 함수템플릿 Jong Hyuk Park 함수템플릿소개 함수템플릿 한번의함수정의로서로다른자료형에대해적용하는함수 예 int abs(int n) return n < 0? -n : n; double abs(double n) 함수 return n < 0? -n : n; //

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems C Programming 컴퓨터시스템 (Computer Systems) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 컴퓨터시스템 프로그래밍언어 2 컴퓨터시스템 컴퓨터시스템 컴퓨터하드웨어 컴퓨터소프트웨어 프로그래밍언어 3 컴퓨터시스템 컴퓨터시스템 하드웨어 : 물리적인장비 소프트웨어 : 프로그램 ( 명령어 ) 들의집합 Computer

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4> 쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트 통합개발환경의종류 비주얼 C++(Visual C++)

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 4 강. 함수와라이브러리함수목차 함수오버로딩 디폴트매개변수 라이브러리함수 clock 함수 난수발생 비버퍼형문자입력 커서이동 프로그래밍문제 1 /21 4 강. 함수와라이브러리함수함수오버로딩 2 /21 함수오버로딩 동일한이름의함수를여러개만들수있음 함수프로파일이달라야함 함수프로파일

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

PathEye 공식 블로그 다운로드 받으세요!!   지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다. PathEye Mobile Ver. 0.71b 2009. 3. 17 By PathEye 공식 블로그 다운로드 받으세요!! http://blog.patheye.com 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다. PathEye 설치 1/3 최종 배포 버전을 다 운로드 받습니다. 다운로드된 파일은 CAB 파일입니다. CAB 파일에는

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

초보자를 위한 C++

초보자를 위한 C++ C++. 24,,,,, C++ C++.,..,., ( ). /. ( 4 ) ( ).. C++., C++ C++. C++., 24 C++. C? C++ C C, C++ (Stroustrup) C++, C C++. C. C 24.,. C. C+ +?. X C++.. COBOL COBOL COBOL., C++. Java C# C++, C++. C++. Java C#

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_C_05_Pointers_Arrays_structures_summary_v02 Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",

More information

C프로-3장c03逞풚

C프로-3장c03逞풚 C h a p t e r 03 C++ 3 1 9 4 3 break continue 2 110 if if else if else switch 1 if if if 3 1 1 if 2 2 3 if if 1 2 111 01 #include 02 using namespace std; 03 void main( ) 04 { 05 int x; 06 07

More information

C++ Programming

C++ Programming C++ Programming C 언어에서 C++ 언어로의전환 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 C++ 언어개요 C 언어기반의 C++ 2 C++ 언어개요 C++ 언어개요 C++ 언어의역사및특징 통합개발환경 C 언어기반의 C++ 3 C++ 언어의역사 C++ 언어의역사및특징 1979 년,

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에

More information

Chapter ...

Chapter ... Chapter 4 프로세서 (4.9절, 4.12절, 4.13절) Contents 4.1 소개 4.2 논리 설계 기초 4.3 데이터패스 설계 4.4 단순한 구현 방법 4.5 파이프라이닝 개요*** 4.6 파이프라이닝 데이터패스 및 제어*** 4.7 데이터 해저드: 포워딩 vs. 스톨링*** 4.8 제어 해저드*** 4.9 예외 처리*** 4.10 명령어 수준

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf(int, dou 2 장더나은 C 로서의 C++ (1) 표준입출력네임스페이스 ( 고전 C++ 와표준 C++) 함수오버로딩디폴트매개변수 new와 delete bool 자료형 C++ is not C C++ 프로그래밍입문 1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Lecture 02 프로그램구조및문법 Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018 자바프로그램기본구조 Hello 프로그램구조 sec01/hello.java 2/40 자바프로그램기본구조 Hello 프로그램구조

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

초보자를 위한 C# 21일 완성

초보자를 위한 C# 21일 완성 C# 21., 21 C#., 2 ~ 3 21. 2 ~ 3 21.,. 1~ 2 (, ), C#.,,.,., 21..,.,,, 3. A..,,.,.. Q&A.. 24 C#,.NET.,.,.,. Visual C# Visual Studio.NET,..,. CD., www. TeachYour sel f CSharp. com., ( )., C#.. C# 1, 1. WEEK

More information

SIGIL 완벽입문

SIGIL 완벽입문 누구나 만드는 전자책 SIGIL 을 이용해 전자책을 만들기 EPUB 전자책이 가지는 단점 EPUB이라는 포맷과 제일 많이 비교되는 포맷은 PDF라는 포맷 입니다. EPUB이 나오기 전까지 전 세계에서 가장 많이 사용되던 전자책 포맷이고, 아직도 많이 사 용되기 때문이기도 한며, 또한 PDF는 종이책 출력을 위해서도 사용되기 때문에 종이책 VS

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770> 예약어(reserved word) : 프로그래밍 언어에서 특별한 용도로 사용하고자 미리 지정한 단어 - 프로그램의 구성요소를 구별하게 해주는 역할 => 라벨, 서브 프로그램 이름, 변수에 연관되어 다른 변수나 서브 프로그램 등과 구별 - 식별자의 최대길이는 언어마다 각각 다르며 허용길이를 넘어서면 나머지 문자열은 무시됨 - FORTRAN, COBOL, HTML

More information

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++, Level 1은객관식사지선다형으로출제예정 1. 다음은 POST(Post of Sales Terminal) 시스템의한콜레보레이션다이어그램이다. POST 객체의 enteritem(upc, qty) 와 Sale 객체의 makellineitem(spec,qty) 를 Java 또는 C ++, C # 언어로구현하시오. 각메소드구현과관련하여각객체내에필요한선언이있으면선언하시오.

More information

<C6F7C6AEB6F5B1B3C0E72E687770>

<C6F7C6AEB6F5B1B3C0E72E687770> 1-1. 포트란 언어의 역사 1 1-2. 포트란 언어의 실행 단계 1 1-3. 문제해결의 순서 2 1-4. Overview of Fortran 2 1-5. Use of Columns in Fortran 3 1-6. INTEGER, REAL, and CHARACTER Data Types 4 1-7. Arithmetic Expressions 4 1-8. 포트란에서의

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

BACK TO THE BASIC C++ 버그 헌팅: 버그를 예방하는 11가지 코딩 습관

BACK TO THE BASIC C++ 버그 헌팅: 버그를 예방하는 11가지 코딩 습관 Hanbit ebook Realtime 30 C++ 버그 헌팅 버그를 예방하는 11가지 코딩 습관 Safe C++ 블라디미르 쿠스퀴니르 지음 / 정원천 옮김 이 도서는 O REILLY의 Safe C++의 번역서입니다. BACK TO THE BASIC C++ 버그 헌팅 버그를 예방하는 11가지 코딩 습관 BACK TO THE BASIC C++ 버그 헌팅 버그를

More information