본문 바로가기

Programming Languages

(32)
메모리 할당 및 반환 동적 메모리 할당 ▶ 변수를 선언하면 그 변수에 대한 기억공간이 메모리의 적절한 위치에 할당된다. 일반적으로 변수는 함수 내부에 선언되어 함수가 실행되는 동안만 존재하거나, 프로그램 시작과 함께 생성되어 프로그램을 종료할 때 소멸된다. 함수 내부에서 선언되는 지역변수들은 대부분 전자에 해당되며, 함수의 외부에 선언되는 전역변수나 함수 내부에서 static 키워드와 함께 선언되는 변수는 후자에 해당된다. 그런데 때에 따라서는 필요할 때 기억공간을 할당하고 더 이상 그 공간이 필요하지 않으면 반환할 수 있어야 한다. 이와 같은 기능을 동적 메모리 할당(dynamic memory allocation)이라고 한다. 그런데 동적 메모리 할당으로 생성된 저장공간은 이름이 없어 변수처럼 그 이름을 통해 액세스할 수 ..
포인터 포인터의 사용 ▶ 포인터는 C 및 C++에서 매우 중요하다. 포인터(pointer)란 다른 변수, 구조체, 객체 등을 가리키는 변수로서 메모리의 주소와 직접적으로 연관된다. 포인터 변수는 다음과 같이 자료형 명칭에 *를 사용하여 선언한다. TypeName *ptrVar; ptrVar는 포인터 변수로서, TypeName형의 데이터를 가리킨다. 다음은 포인터를 사용하는 간단한 예이다. #include using namespace std; int main() { int a = 10; int* ptr; ptr = &a; // ptr에 a의 주소를 넣음 cout
배열 프로그램을 작성하다 보면 유사한 내용을 저정하는 여러 개의 변수를 하나의 단위로 묶어 처리하는 것이 편리할 때가 있다. 이러한 경우 유용하게 사용할 수 있는 것이 배열(array)이다. 배열은 동일한 자료형의 값을 저장할 수 있는 공간을 여러 개 묶어 하나의 이름을 갖는 변수로 만들고, 각각의 원소를 첨자로 지정하는 것이다. 배열을 구성하는 원소의 자료형은 char, int 등과 같은 기본 자료형이나 구조체, 클래스 등 어느 것이어도 상관없다. 1차원 배열 ▶ n개의 원소를 저장하는 1차원 배열의 선언문은 다음과 같다. TypeName arrName[n]; 예를 들어 다음 문장은 float형의 값을 4개 저장할 수 있는 배열 fArray를 선언한 것이다. float fArray[3]; 이때 각각 이 문장..
클래스 C언어의 구조체(struct)는 프로그램으로 표현하고자 하는 대상에 대한 데이터의 구조만을 정의하고 있다. 그런데 이러한 대상은 데이터만으로 존재하는 것이 아니라 그 대상에 대해 행할 수 있는 여러 가지 동작이 함께 존재한다. C++ 언어의 클래스(class)는 표현하고자 하는 대상의 데이터와 함께 이에 대해 필요한 여러 가지 동작을 나타내는 함수들을 묶어 놓은 것이다. 클래스에서는 외부에 공개할 필요가 없는 것과 공개할 것을 구분한다. 보통 구현을 위한 세부 사항에 대한 것은 공개할 필요가 없으며, 클래스의 객체를 사용하는 데 필요한 함수들을 공개하여 그 함수를 통해서만 객체를 사용할 수 있도록 하는 것이 일반적이다. 앞서 작성한 구조체를 사용하여 원을 구하는 코드를 클래스를 이용하여 다시 작성해 보기..
구조체 int와 float 등과 같은 자료형은 C++에 미리 정의되어 있는 기본 자료형이다. 이와는 별개로 프로그래머가 필요에 따라 새로운 자료형을 정의할 수 있다. 이와 같은 자료형을 사용자 정의 자료형이라고 하는데, 기본 자료형이나 앞서 선언된 사용자 정의 자료형을 이용하여 정의한다. C에서 사용자 정의 자료형은 struct를 사용하여 만들 수 있는데, C++에서도 같은 방법을 사용할 수 있다. struct StructName{ Type1 item1; Type2 item2; ... } 위 선언문은 StructName이라는 이름을 갖는 새로운 자료형을 정의한 것으로, Type1 형의 항목 item1, Type2 형의 항목 item2 등으로 구성된다. Type1, Type2는 기본 자료형의 하나일 수도 있고, ..
흐름제어 구문 C++에서 프로그램은 앞에서부터 뒤로 차례로 실행되는 것이 기본이지만, 여러 가지 조건에 따라 순서를 바꾸거나 반복하는 등의 작업을 할 수 있다. 이러한 흐름제어 구문을 조건문 및 반복문이라고 한다. 조건문 조건문은 지정된 조건에 따라 실행 흐름을 제어하는 문장이다. C++에서 사용할 수 있는 조건문은 if문과 switch문이 있다. if문 ▶ if문장은 조건의 참, 거짓에 따라 문장을 선택적으로 실행할 수 있도록 하는 구문이다. if(조건) 문장1; // 조건이 참일 때 실행할 문장 else 문장2; // 조건이 거짓일 때 실행할 문장 만일 문장1 또는 문장2가 여러 문장으로 구성되어야 할 때는 { 와 } 로 문장들을 묶어 블록을 만들면 된다. else절은 조건이 거짓일때 처리할 문장이 있을 경우에만 ..
자료형의 변환 서로 다른 자료형에 해당되는 값들을 하나의 수식에 함께 사용하는 경우가 있다. 엄밀히 말해 컴퓨터에서는 자료형이 같지 않으면 계산을 하거나 올바르게 값을 전달할 수 없다. 그래서 서로 다른 자료형의 값들이 섞인 수식이 있다면 반드시 같은 형으로 자료형을 변환해 주어야 한다. 이러한 형 변환은 묵시적으로 이루어지거나 프로그래머가 의도적으로 형 변환을 지시한다. 자료형을 변환하면 원래의 값이 그래로 유지되지 못하는 경우가 있으므로 주의해야 한다. 묵시적 형 변환 ▶ 자료형에는 형 변환 관련 순위가 있다. 정수형 자료형의 변환 순위는 다음과 같이 정의된다(signed와 unsigned 형은 순위가 동일함). bool < char < short int < int < long int < long long int ..
연산자 연산자는 산술, 논리, 관계, 대입 등 다양한 형태의 연산을 지시한다. 피연산자는 연산의 대상이 되는 값, 수식, 또는 변수이며, 연산자에 따라 1개, 2개, 3개의 피연산자를 사용한다. 이를 각각 단항, 이항, 삼항 연산자라고 부른다. 산술 연산자 ▶ 숫자 데이터에 가감승제 및 관련 연산을 지시하는 연산자 사칙 연산자 : 가, 감, 승, 제를 나타내는 +, -, *, / 수식 수식의 값 비고 5 + 3 8 3 / 2 1 정수형 연산의 결과는 정수형 3.0 / 2.0 1.5 나머지 연산 : 정수형 나눗셈의 나머지를 구하는 % 연산 수식 수식의 값 비고 5 % 3 2 5를 3으로 나눈 나머지는 2 5 % -3 2 5를 -3으로 나눈 나머지는 2 -5 % 3 -2 -5를 3으로 나눈 나머지는 -2 -5 % ..