프로그래밍 관련/C++
C++ 강좌 5편. new, delete [최근 수정 2017.10.10]
C++ 강좌 5편. new, delete [최근 수정 2017.10.10]
2012.10.281. C언어의 malloc & free우리가 C언어를 배울 때, malloc과 free란 녀석은 이미 만나본 적이 있습니다. malloc이란 함수는 '힙 영역에 메모리 공간을 할당할 수 있게 도와주는 함수'라고 말했었고, free 함수는 'malloc 함수 호출 시 할당되었던 메모리 공간을 전부 해제할 수 있게 도와주는 함수'라고 말한 적이 있었습니다. C언어 11강에서 보았던 예제를 다시 한번 보도록 하겠습니다. #include #include int main() { int studentNum, totalScore=0; int* studentScore; int i; printf("학생 수를 입력하세요: "); scanf("%d", &studentNum); studentScore = (int *)mall..
C++ 강좌 4편. 함수 오버로딩(Function Overloading) [최근 수정 2017.10.10]
C++ 강좌 4편. 함수 오버로딩(Function Overloading) [최근 수정 2017.10.10]
2012.10.281. 함수 오버로딩(Function Overloading)함수 오버로딩(Function Overloading)이란, 함수명은 같으며 인자의 자료형이나 수가 다른 함수의 선언을 허용하는 것을 말합니다. C에서는 함수 오버로딩을 허용하지 않았지만, C++에서는 아래와 같이 두 함수의 이름이 같아도 컴파일러가 오류를 발생시키지 않습니다. #include using namespace std; void func(int a) { cout
C++ 강좌 3편. 네임스페이스(namespace) [최근 수정 2017.05.21]
C++ 강좌 3편. 네임스페이스(namespace) [최근 수정 2017.05.21]
2012.10.251. 네임스페이스(namespace)네임스페이스(namespace)란 뭘까요? 이름 공간? 이 네임스페이스에 대해 알아보기 전에, 간단한 예를 하나 들어보겠습니다. 약 10명 정도의 개발자가 A, B라는 팀으로 나누어 어떤 팀 프로젝트를 진행한다고 가정해봅시다. 이렇게 팀을 나누어 개발이 모두 끝나면, 팀 A와 B가 개발한 프로젝트를 하나로 합친다고 해봅시다. 그렇게 해서 프로젝트를 합치고, 모든 일이 만사천리로 해결되는 듯 하였으나 A에서 정의한 함수의 이름과 B에서 정의한 함수의 이름 상당수가 동일하여 충돌이 일어나는 것이었습니다. A.h: ... namespace A { void doSomething(void) { // 코드... } }; ... B.h: ... namespace B { void d..
C++ 강좌 2편. 기본 입출력 함수 둘러보기 [최근 수정 2017.05.20]
C++ 강좌 2편. 기본 입출력 함수 둘러보기 [최근 수정 2017.05.20]
2012.10.23이번 강좌에서는 C++에서 각각 입력과 출력을 담당하는 cin, cout 객체에 대해서 알아보도록 할 것입니다. 강좌를 시작하기 전에, 이 강좌는 첫 강좌에서 말씀드렸듯이 C를 알고 있다는 전제하에 강좌를 진행합니다. 추후에, C 강좌와 C++ 강좌를 분리하여 C를 모르더라도 C++만 배울 수 있도록 강좌를 재구성시킬 예정에 있습니다. 자료형에 대해서 아직 잘 모르신다면, 이 강좌를 읽기 전 이곳을 참조하시는 것이 좋습니다. 1. cout (console out)먼저, cout 객체 부터 보도록 할텐데, 제일 처음 만나볼 cout 객체는 C언어의 출력 함수인 printf()와 흡사합니다. 바로 보도록 할까요? 아래 예제 코드를 따라 작성하여, Ctrl+F5를 누르거나 '디버그(D)->디버그 하지 않고 시..
C++ 강좌 1편. 새로운 시작, 컴파일러 소개 [최근 수정 2017.05.19]
C++ 강좌 1편. 새로운 시작, 컴파일러 소개 [최근 수정 2017.05.19]
2012.10.212012년에 올렸던 C++ 강좌를 다시 재구성한 뒤, 2017년에 C++11/14 에서 추가된 기능을 포함하여 강좌를 다시 쓰게 되었습니다. 이 강좌는 여러분들이 C언어를 알고 있다는 가정하에 진행됩니다. 즉, C언어 강좌를 진행할 때 설명해 드린 변수나 분기문, 반복문 등은 이 강좌에서 다루지 않습니다. 'C언어에서 어떻게 달라졌는가?'를 중점으로 강좌가 진행되니 이점 유의해주시기 바랍니다. 1. 새로운 시작 C++에서는 C의 절차와 구조에 중심을 둔 절차지향 프로그래밍을 떠나서, 객체지향이라는 개념이 도입되었습니다. 시간이 지나며 복잡성이 커지고, 소프트웨어가 하드웨어의 발달을 전혀 따라가지 못하며 절차지향 프로그래밍이 한계를 드러내자, 객체지향 프로그래밍이 수면 위로 부상하기 시작했습니다. 객체지향..
C언어 강좌 14편. 파일 입출력
C언어 강좌 14편. 파일 입출력
2012.02.131. 파일 입출력 오늘은 매우 중요하게 쓰이는 파일 입출력에 대해서 알아보도록 하겠습니다. 우선 본격적으로 들어가기 전, 파일 입출력은 뭘까요? 프로그램에서 리디렉션을 사용하지 않고도 어느 파일에 대한 입출력을 할 수 있습니다. 이 파일 입출력을 이용하여 어느 파일에 저장되어 있는 데이터를 읽어들이거나 저장시킬 수가 있습니다. 주의하여야 할 것은 이 파일 입출력은 메모리 공간에 데이터를 쓰거나 읽는것과 달리 직접 데이터를 내보내지 않고 '스트림(Stream)'을 이용하여 입출력합니다. 그렇다면 스트림은 또 뭘까요? C언어에서의 스트림(Stream)은 바이트들이 순서대로 입출력되는 논리적인 장치이며, 입출력 장치와 프로그램 간의 데이터를 주고받는 인터페이스 역할을 합니다. 더 생각해보자면, 우리는 어떻게 ..
C언어 강좌 13편. 공용체와 열거형
C언어 강좌 13편. 공용체와 열거형
2012.02.121. 공용체(union) 저번 편에선 구조체에 대해서 알아보았는데 이번에 배울 공용체(union)란 뭘까요? 공용체는 말 그대로, 같은 메모리 공간을 여러개의 변수가 공유하며, 공용체를 선언하여 사용하는 방법은 구조체와 매우 유사합니다. 그러나 주의하셔야 할 부분은 구조체의 메모리 운영방식과 공용체의 메모리 운영방식은 서로 다릅니다. 공용체는 어떻게 메모리를 잡아먹는지 간단히 살펴보도록 합시다. 위의 그림을 보시면 이들의 시작주소는 모두 같으며 하나의 메모리 공간을 두개의 변수가 사용하고 있습니다. 좀더 확실한 이해를 위해 예제를 살펴보면서 공용체가 어떤 녀석인지 이해를 하도록 합시다. #include union intbox { int a; int b; }; int main() { union intbox..
C언어 강좌 12편. 구조체(Structure Types)
C언어 강좌 12편. 구조체(Structure Types)
2012.02.121. 구조체(Structure Types) 이번 편에서는 구조체(Structure Types)에 대해서 알려드리려고 합니다. 서로 다른 변수의 형태를 하나의 블럭으로 묶은걸 구조체라고 하며 구조체의 선언방법은 아래와 같습니다. struct 구조체의 이름 { 멤버 변수; }; 여기서 멤버 변수는 구조체 안에서 정의된 변수를 의미하며 우리가 일반적으로 변수를 선언하는 방식과 다르지 않습니다. 필드라고도 하고 구조체 원소라고 부르기도 합니다. 그러면 이제 우리가 구조체를 직접 선언해볼까요? #include struct student { int id; char *name; float percentage; }; // 구조체 뒤에 세미콜론이 와야함 int main() { struct student s; s.id=1..
C언어 강좌 11편. 포인터
C언어 강좌 11편. 포인터
2012.02.11주소 값의 이해와 표현 이 강좌에서 배우게 될 포인터는 필자도 어렵게 생각하는 부분이며 C언어에서 가장 어렵고도 핵심인 구간입니다. 포인터에 들어와서 바로 포인터를 다루게 된다면 혼란이 생길 수 있으므로, 우선 알아야 할 것부터 알아보도록 합시다. 간단한 사항부터 알아보도록 하고, 바로 포인터라는 녀석을 사용하여 어떤 녀석인지 대충 짐작을 하도록 합시다. 포인터(Pointer)란 메모리의 주소 값을 담고 있는 변수 혹은 상수입니다. 비슷하게는 데이터의 위치를 가리키는 녀석이라고 할 수도 있습니다. 의외로 간단해 보일지도 모르겠지만 주소 값과 관련이 있어 메모리의 주소체계를 이해하지 못하면 포인터를 정확히 이해할 수 없습니다. 여기서 주소란 그 메모리의 저장장소의 위치를 나타내는 값으로 하나의 주소값은 1..
C언어 강좌 10편. 문자열 함수
C언어 강좌 10편. 문자열 함수
2012.02.101. 문자열 함수 오늘은 문자열 함수와 메모리 구조에 대해서 알아보도록 하겠습니다. 먼저 문자열 함수에 대해 알아보도록 할텐데, 문자열 함수에는 많이 알려져있는 함수들인 strcpy, strncpy, strcat, strncat, strcmp 등 이밖에도 함수가 더 있지만 매우 유용하고 헤더 선언부에 string.h를 포함하겠다고 선언하면 이 함수들을 모두 사용하실 수 있게됩니다. 첫번째로 만나볼 함수 strcpy(문자열 복사, String Copy)는 말 그대로 문자열 복사에 관한 함수입니다. strcpy 함수의 원형을 살펴보자면 아래와 같습니다. char* strcpy (char *dest, const char *src); // dest에 전달된 값을 반환 이 함수는 두개의 문자형 포인터를 인수로 취..
C언어 강좌 9편. 배열(Array)
C언어 강좌 9편. 배열(Array)
2012.02.081. 배열(Array) 앞으로 배우게 될 배열(Array)은 많은 수의 데이터를 관리할때 상당히 편리한 녀석입니다. 우선 우리가 배열을 모른다 가정하고, 예를 들어서 100개의 수를 모두 저장해야 한다고 해봅시다. 값을 우선 기억시키려면, 값을 기억할 변수를 선언해야만 하겠죠? 그렇다면, 100개의 수를 모두 저장한다고 했으니 100개의 변수를 선언해야 합니다. 아래와 같이 말입니다. int num1; int num2; int num3; ... ... int num99; int num100; 위를 보시면, 일일히 변수 100개를 따로 선언하면서 값을 저장합니다. 만약 이런다면 값을 저장시킬때도 따로 저장시켜야 하며 이것은 문서 타이핑과 다를 바가 없어집니다. 그럼 어떻게 해야만 편리하게 데이터를 수정하고..
C언어 강좌 8편. 반복문 (while, for, do~while)
C언어 강좌 8편. 반복문 (while, for, do~while)
2012.02.081. while, do~while, continue 이번에는 반복문에 대해서 살펴보도록 할텐데, 반복문의 이름에서 어떤 역할을 하는 녀석인지 대충 짐작이 가시죠? 만약에 어느 한 문장을 100번 출력하고 싶으면 어떻게 코드를 작성해야 할까요? 일일히 printf를 사용하여 100번씩이나 함수를 호출해야 할까요? 이것은 상당히 비효율적이며 보기도 안좋습니다. 그럼 어떻게 해야할까요? 이것을 우리가 배울 반복문이란 녀석이 해결해 줄수 있습니다. 이 반복문 중에서도 여러가지가 있는데, 우선은 while문에 대해 알아보도록 하겠습니다. while 문의 구성은 다음과 같습니다. while (반복 조건) { 반복 영역; } 이 while문은 반복 조건이 참(TRUE)이면 계속 반복 영역에 있는 코드를 실행시키며 루..