Separate Compilation 분할 컴파일 - 프로그램을 구성하는 함수들을 별개의 파일에 넣는 개발방법을 의미한다. (C++에서의 권고사항이기도 하다.) - 대규모 프로젝트에서 프로그램의 관리를 용이하게 하는 개발방법이다. - 분할된 파일들은 개별적으로 컴파일되어, 하나의 최종 실행 프로그램으로 링크된다. - 코드를 분할함으로써, 프로그램 개발 후 수정사항이 생겼을 때 수정한 부분에 해당하는 파일만 다시 컴파일하는 것이 가능해진다. - Embarcadero C++ Builder, Microsoft Visual C++, Apple Xcode, Freescale CodeWarrior와 같은 대부분의 IDE(Intergrated Development Environment, 통합 개발 환경)들에서 Pro..
Overload Resolution 오버로딩 분석 - 어떤 함수 호출에 대하여, 여러 함수 중(함수 오버로딩으로 인한) 어느것을 사용할 것인지에 대한 C++의 전략이다. - 전 분석 과정에서, Function Signature만을 고려하며, 함수의 리턴형은 고려대상이 아니다. Resolution Process (분석 과정) Phase 1. 후보함수 목록 작성 -호출된 함수와 이름이 동일한 함수와 함수 템플릿들 모아서 후보함수 목록을 만든다. Phase 2. Function Signature를 통한 필터링 - 매개변수후보함수들 중, 매개변수의 개수가 일치하는 함수들을 찾아서 추린다. - Argument(실제 매개변수)의 각 데이터형이 Parameter(형식 매개변수)의 데이터형과 정확히 일치하는 경우도 여..
Function Template 함수 템플릿 - Generic Function(일반화 함수)을 서술하는 방법이다. - Specific Type(\(\texttt{int}\)형이나 \(\texttt{double}\)형과 같은)* 을 포괄할 수 있는 Generic Type으로 함수를 정의하는 방법이다. (하나의 케이스가 아닌, 다른 경우에도 대응하여 프로그래밍 하는 것을 Generic Programming(일반화 프로그래밍)이라고 한다.) - 다양한 데이터형**에 대해 같은 알고리즘을 적용해야 할 경우에 유용한 수단이다. - 템플릿을 Parameterized Type(매개변수화 데이터)이라고 하기도 한다. - 여러 개의 함수 정의를 더 간단하고 신뢰성 높게 생성하게 해준다. - 템플릿을 구현하는 것은, 함수..
Function Overloading 함수 오버로딩 - Function Polymorphism(함수의 다형; 함수의 다양한 형태)을 C++에서 구현하는 방법이다. - 서로 다른 여러 개의 함수가 하나의 이름을 공유하게 하는 방법이다. - 함수 오버로딩은 본질적을 같은 일을 처리하지만, Function Signature(매개변수 리스트에 대한 정보)* 가 서로 다른 여러 개의 함수를 하나의 이름으로 만들 수 있게 한다. (오버로딩된 함수들 마다 논리적으로 다른 작업을 수행하게 구현할 수도 있으나, 기본적으로 같은 작업을 수행하도록 구현하는 것이 코드 가독성 측면에서 바람직하다.) - 오버로딩된 함수들은 오직 함수 시그니처에 의해서만 구분지어지며, 함수의 리턴 데이터형과는 관계가 없다. (위와 같은 이유에서..
Default Argument 디폴트 매개변수 - 함수호출에서 Argument(실제 매개변수)를 생략했을 경우에 실제 매개변수 대신 사용되는 값이다. (물론, 실제 매개변수로 특정 값이 입력되면, 그 값으로 처리된다.) - 디폴트 값은 Function Prototype(함수 원형) 부분에서 설정 가능하며, Function Definition(함수 정의) 부분은 일반적인 경우와 동일하게 작성하면 된다. - 컴파일러는 함수 원형을 조사하고 해당 함수의 매개변수 개수를 알아내는데, 이 때 프로그래머는 디폴트 매개변수의 존재 유무를 알려주는 방식이다. - 특히 클래스 설계시에, 디폴트 매개변수를 설정할 수 있는 상황이라면, 생성자, 메서드, 메서드 오버로딩의 개수를 많이 줄여줄 수 있다. * 가능한 범위내에서,..
Temporary Variable 임시 변수 - 실제 매개변수와 참조 매개변수간에 데이터형이 일치하지 않을 경우 생성되는 변수이다. - \(\texttt{const}\) 참조 데이터형의 매개변수일 경우에만 한정하여 임시 변수를 생성한다. - 임시 변수는 함수가 호출되어 있는 동안에만 유지되며 그 후에는 컴파일러가 마음대로 제거할 수 있게된다. * 컴파일러는 참조 매개변수가 \(\texttt{const}\)형 일 경우, 아래 두 가지 상황에서 임시변수를 생성한다. 1. Argument(실제 매개변수)가 올바른 데이터형이지만 L-Value가 아닌 경우 2. Argument(실제 매개변수)가 잘못된 데이터형이지만 올바른 데이터형으로 변환 가능한 경우 (어느정도 같은 범주안에 있는 데이터) 따라서, \(\tex..
Reference 참조 - 미리 정의된 어떤 변수의 실제 이름 대신 쓸 수 있는 대용 이름을 제공하는 기능이다. (포인터와 비슷한 면모가 있다.) - 참조의 주된 용도로는 함수의 Parameter(형식 매개변수)에 사용하는 것이다. - 매개변수로써 참조 변수를 이용하면, 해당 함수는 매개변수의 복사본이 아닌 원본을 갖고 작업하게 된다. (이러한 점에서는 포인터 개념과 동일하다.) - 또한, 참조 개념은 \(\texttt{class}\)를 설계할 때 필수적으로 사용되며, 일반적으로 C++에서는 클래스 객체를 함수에 전달할 때 참조로 전달한다. - 참조 변수와 원본 변수는 모두 같은 값과 같은 메모리 위치를 공유한다. - 참조 변수는 데이터형 바로 뒤에 \(\texttt{&}\) 연산자를 이용해서 선언한다...
Inline Function 인라인 함수 - 프로그램의 실행 속도를 높이기 위해 C++에서 새롭게 추가된 개념이다. - C의 Macro에 대응되는 개념이다. - 짧은 길이의 함수를 인라인 함수로 정의하면, 컴파일러는 적절히 판단하여(인라인으로 선언되어있다 하더라도 무조건 인라인 함수로 작용하지는 않는다!) 컴파일 시에 해당 함수가 호출되는 부분에 함수 호출을 발생시키는 것이 아닌, 해당 호출 구문은 함수 구현부분으로 대체해서 함수 몸체를 통째로 코드에 심어버리는 것과 같은 동작을 한다. (짧은 코드의 함수의 경우에는 함수 내용을 실행하는 시간보다 함수를 호출하는데에 더 큰 시간이 소요되기 때문이다.) - 위와 같은 이유로, 실행 시간 측면에서는 효율적일 수 있으나 메모리 공간 측면에서는 불리할 수 있다...