전체 글
-
Class의 생성 과정C++ 언어 2020. 3. 31. 17:46
C 언어의 제작자 작성 구조체와 함수 가장 먼저 코드의 영역을 2가지로 나누어 생각해보자 첫 번째는 제작자 코드 영역이다. 제작자 코드 영역은 재활용 가능한 코드를 추후 사용자에게 제공하는 것이다. 즉 제작자 코드란 제작자가 만든 기능을 사용자가 원할 때 사용할 수 있게끔 만든 것이다. 두 번째는 사용자 코드 영역이다. 사용자 코드 영역은 제작자가 만들어서 제공해주는 코드를 실질적으로 가져다 사용하는 주체가 되는 영역이다. 아래 예시를 통해 이해해 보자 // HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include // 제작자 코드 // // 제작자 코드의 내용으로는 사용자로부터 // 나이와, 이름을 입력받는다. typede..
-
함수 템플릿과 인라인 함수C++ 언어 2020. 3. 30. 17:01
함수 템플릿이란? 함수 템플릿은 함수의 다중 정의 기능의 단점을 보완 해주는 기능이다. 함수를 다중정의 할 경우 같은 이름의 함수를 반환값, 매개변수 등에 따라 다른 기능을 수행하는 함수로 만드는 것을 말한다. 따라서 함수를 다중정의 할 경우 같은 이름의 함수가 여러개 생기는 것이다. 위와 같이 다중정의 함수를 사용한다면 사용자는 편의성과 확장성을 얻을 수 있지만 유지보수 측면에서 어려움을 겪는다. 예를 들어 다중정의 함수가 5개가 논리적 결함이 생긴다면 사용자는 5개 함수의 코드를 수정해야 할 것이다. 5개의 함수가 전부 사용되지 않는 다면 불필요한 코드가 생긴 것이며 메모리의 낭비로 이어진다. 이와같은 단점을 보완하기 위해 제공되는 기능이 함수 템플릿 이다. 템플릿은 일종의 틀 이며 판화의 틀을 만들..
-
컴파일 전 처리 (전처리기)C언어 2020. 3. 28. 15:32
전처리기란 ? 그동안 ~~~.c 와 같은 형태의 프로그램 파일을 작성하여 컴파일 하고 컴파일 된 오브젝트 파일을 링크하여 실행파일을 만들고 해당 실행파일을 Load 하여 실행하였을 것이다. 이때 컴파일 전에 처리하는 과정이 하나 있는데 이 과정을 전처리 과정이라 한다. 이 전처리 과정은 #include 라는 것을 작성하여 " 해당 구문은 컴파일 전에 처리해주세요 ~ " 라는 의미로 사용한다. ~~~.c : 프로그램의 실질적 동작이 기술된 정의 파일 ~~~.h : ~~~.c 파일에서 사용한 외부의 함수, 자료들이 선언된 파일 그동안 스탠다드 I/O 헤더파일에 정의 된 함수인 prinf, puts, gets 등의 표준 입출력 함수를 사용해 왔을 것이다. 이때 이러한 표준 입출력 함수는 사용자가 만들지 않고 ..
-
컴파일 최적화C언어 2020. 3. 27. 20:34
최적화란 ? 최적화 쉽게 말해 가장 알맞는 상태로 맞춘다는 의미이다. 그렇다면 누가 어떻게 무엇을 알맞는 상태로 맞춘다는 것인가 누가 ? 컴파일러가 어떻게 ? 쓸데없는 동작은 빼면서 무엇을 ? 코드에서 쉽게말해 컴파일러라는 도구가 작성된 코드를 분석하여 쓸모 없거나 비효율적인 동작을 파악하고 효율적은 코드로 탈바꿈 시켜주는 것을 이야기 한다. 아래 예를 한번 살펴보자 int main(int argc, char *argv[]){ // 변수 b는 변수 a에 대해 의존적이다. int a = 10; int b = a * 5; // 변수 d는 변수 c에 대해 의존적이다. int c = 20; int d = c * 5; // 변수a와 변수b는 변수c와 변수d와 서로 의존적이지 않다. // 즉 순서를 바꾸거나 동시에..
-
참조자의 내부 동작C++ 언어 2020. 3. 27. 14:09
// HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include #include #include // 참조자의 내부 구조 int _tmain(int argc, _TCHAR* argv[]) { int a(10), b(20); // 포인터의 구조적 문제는 포인터가 가리키는 값 즉 주소가 // 변질 될 수 있다. // 포인터 변수 사용 int* pn_data = &a; // pn_data는 변수이기 때문에 값이 변경 가능 pn_data = &b; // pn_data의 자료형은 int * 이기 때문에 해당 주소가 가리키는 메모리의 값 역시 변경 가능 *pn_data = 50; // 위와 같이 pn_data는 변수이기 때문에 &a를 가..
-
참조형과 포인터C++ 언어 2020. 3. 26. 17:50
1. 참조자 사용법 #include #include int _tmain(int argc, _TCHAR* argv[]) { // (int &) => 참조 자료형 / (int *) => 포인터 자료형 int a = 0; // 참조 자료형(참조형) 을 가지는 변수의 선언 int& i = a; // 포인터 자료형을 가지는 변수 선언 int* ptr_i = &a; return 0; } 위의 코드는 참조형 (참조 자료형의 변수) 와 포인터 (포인터 자료형의 변수)를 각각 생성한 것이다. 아래 자료를 보면서 차이를 확인해 보자 변수 a => 주소 0x 0082FEFC 참조자 i => 주소 0x 0082FEFC 포인터 prt_i => 주소 0x 0082FEE4 이며 해당 주소의 메모리의 값은 0082FEFC 이다. 참..
-
C++ 메모리 동적할당 및 해제 ( new & delete )C++ 언어 2020. 3. 26. 15:31
C 에서 할당은 malloc 함수와 해제는 free 함수를 사용하여 런타임에 메모리를 추가적으로 동적 할당하여 사용한다. 하지만 C++ 에서는 메모리 동적할당시 함수를 Call 하여 메모리를 할당하는 방식이 아닌 연산자를 사용하여 추가적인 메모리를 할당한다. 이때 사용하는 연산자가 new, delete 연산자이다. new 연산자 new 연산자가 하는 역할은 malloc 함수와 동일하다. 프로그램이 동작 중 일때 추가적인 메모리 사용 또는 기존의 stack 메모리의 크기를 벗어나는 큰 규모의 자료를 다룰 때 heap 영역의 메모리를 사용하여 데이터를 읽고 쓴다 이때 heap 메모리를 사용할 수 있게 해주는 것이 malloc 함수이다. // HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을..