프로그래밍 언어/C & C++ 정리 59

Generic & Function Overload

제네릭 프로그래밍 제네릭 프로그래밍의 사전적 정의 제네릭 프로그래밍은 데이터 타입에 의존하지 않고, (다양한 데이터형을 받을 수 있다는 말은 즉, = 다향성(polymorphism)을 뜻한다. 그 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소 (상수, 변수, 식, 오브젝트, 함수, 메소드 등) 들이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다. 반댓말은 단항성(monomorphism)으로, 프로그램 언어의 각 요소가 한가지 형태만 가지는 성질을 가리킨다.) 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식이다. 제네릭 프로그래밍은 여러 가지 유용한 소프트웨어 컴포넌트들을 체계적으로 융합..

클래스

추상화( = Abstraction ) 데이터 추상화란 가장 본질적이고 중요한 OOP(= 객체지향프로그램) C++ 언어의 특색 중 하나이다. 추상화란 의미는 나타낸다 오롯이 중요한 정보는 표시하고, 세부 사항은 숨기는 것을 의미한다. 데이터 추상화를 예를 들면 사람이 차를 운전하는 실제 사례를 예시로 들어보겠다. 사람이 엑셀레이터를 밟으면 차의 속도가 빨라지거나 브레이크를 밟으면 차가 멈춘다는 것만 알고 있을 뿐, 실제로 액셀러레이터를 밟으면 어떻게 속도가 빨라지는지, 차의 내부 메커니즘이나 차의 엑설레이터, 브레이크 등의 구현에 대해서는 알지 못한다. 이것이 바로 추상화이다. 1. Data Abstraction 데이터 추상화 이 타입은, 오직 필수적인 정보에 대해서만 보여주고 불필요한 정보는 숨긴다. 2..

20230130 그간 배운 변수와 함수 상수 등 정리

1-1) 지역 변수(=Local Variable) 란? 지역 변수의 정의는, 초기값이 변수에 설정되고 함수나 메서드 또는 블록에서 사용되는 것이다. 이 변수는 오직 함수나 메서드 혹은 다른 블록으로 넘어 갈때, 즉, 지역 변수가 살아있던 블록이나 메서드 혹은 함수가 아닌 다음 블록이나 메서드 함수에서는 자연적으로 파괴되어야만 유의미한 변수이다. 지역 변수가 해당된 함수, 메서드, 블록말고 다른 외부에서 참조되는 경우 프로그램은 오류를 반환한다. 전역 변수와 지역 변수는 같은 이름을 사용할 수 있으나, 혹은 같은 지역변수라 하더라도 더 영역이 넓은 블록에 있는 같은 이름의 지역 변수와 그 영역 내에 더 좁은 영역의 블록의 지역 변수가 같을 수 있다. 하지만 이들을 구별하는 것은 변수가 작동하는 경계 범위에..

C++ 생성자 (constructor)와 소멸자 (destructor)

생성자는 그 클래스의 객체가 생성될 때 복사 생성자 역할 - 디폴트 복사 생성자는 static 멤버를 제외한 멤버들을 멤버별로 복사한다. 각 멤버는 값으로 복사된다. - 멤버별 복사 또는 얕은 복사라고 부른다. - 클래스가, 새로운 객체가 생성될 때마다 값이 변하는 static 데이터 멤버를 가지고 있다면, 그 상황을 처리하는 명시적 복사 생성자를 제공해야한다. - 프로그램이 복사 생성자를(명시적or암시적) 사용하지 않으면, 컴파일러는 함수 정의가 아니라 원형만 제공한다. 복사 생성자 사용 하는 곳 - 새 객체를 동일한 클래스이 다른 객체로 초기화할 때 - 객체가 함수에 값으로 전달될 때 - 함수가 객체를 값으로 리턴할 때 - 컴파일러가 임시 객체를 생성할 때 디폴트 생성자 - 인수를 취하지 않는 생성자..

사용자 정의 타입 (user-define data type)

C++에서는 기본타입 (int, double etc), const 제한자, 선언 연산으로 생성할 수 있는 내장 타입과 추상화 메커니즘을 바탕으로 만들어진 사용자 정의 타입 2가지로 나뉜다. 내장 타입 같은 경우에는 로우 레벨에 가깝게 설계돼였으며, 전통적으로 하드웨어의 능력을 직접적이고 효율적으로 사용한다. 반면에 프로그래머로 하여금 진보된 어플리케이션을 쉽게 작성하게 해주는 하이 레벨 기능을 제공하지 않는다. 사용자 정의 타입과 같은 경우에는 프로그래머가 스스로 적절한 표현방식과 연산을 갖춘 타입을 설계하고 구현하며, 간단하고 편리하게 사용할 수 있게 해준다. 사용자 정의 타입의 대표적인 예로 "클래스"와 "열거형"을 들 수 있다. 구조체 새로운 타입을 만드는 첫 단계에 필요한 구성 요소를 데이터 구조..

임시 변수, 참조 매개변수, const

C++는 실제 매개변수와 참조 매개변수가 일치하지 않을 때 임시 변수를 생성할 수 있다. 최근의 C++는 매개변수가 const 참조일 경우에만 이것을 허용한다. 이것은 새로운 제약이다. C++가 어떤 경우에 임시 변수를 생성하는지, 그리고 const 참조의 경우에만 임시 변수 생성을 허용하는 이유를 알아보자. 먽, 임시 변수는 언제 생성되는 것일까? 참조 매개변수가 const일 경우, 컴파일러는 다음과 같은 두 가지 상황에서 임시 변수를 생성한다. // 일반 매개변수와 참조 매개변수의 예시 double cube(double a); double refcube(double& ra); 임시 변수란? - 실제 매개변수와 참조 매개변수간에 데이터형이 일치하지 않을 경우 생성되는 변수이다. - const 참조 데이..

가변배열 동적할당 vector

vector 템플릿 클래스는 동적 배열에 속하는 string 클래스와 유사하다. 프로그램이 실행되는 동안 vector 객체의 크기를 세팅할 수 있고(=동적할당), 새로운 데이터를 마지막에 추가하거나 중간에 데이터를 삽입할 수도 있다(=동적할당). 기본적으로 동적 배열을 생성하기 위해 new를 사용하는 것을 대체할 수 있다. 실제로 vector 클래스는 메모리를 관리하기 위해서 new와 delete를 사용하지만, 그 과정은 자동으로 진행된다. 템플릿 클래스를 의미하는 내용에 대해서 너무 깊은 내용을 다루지는 않겠지만, 몇 가지 기본적이고 실질적인 문제를 살펴보도록 하겠다. 첫째, vector객체를 사용하기 위해서는 vector 헤더 파일을 포함해야 한다. 둘째, vector식별자는 std 이름 공간의 일부..

new 동적 할당 delete와 nullptr의 이용

new 동적 할당 방법 typeName * pointer_name = new typeName; typeName = 자료형 delete 예시 1) int * ps = new int; delete ps; 예시 2) int *ps = new int; int *pq = ps; delete pq; delete도 포인터와 같이 ps나 pd가 가진 주소의 값(변수값)을 타고 들어가 지운다. ps = &new ps = pq = &new nullptr의 예시 ps = nullptr pq = nullptr 이유는 포인터가 가지고 있던 주소 값은 바뀌지 않기 때문에 가리키던 주소를 초기화 해주는 것이다. 생성자와 new 그리고 delete 생성자에서 new를 사용하여 메모리를 대입했을 때에는, 대응하는 파괴자에서 delet..

c++ 함수 구문

C++ 프로그램은 함수라고 부르는 하나 또는 그 이상의 모듈들로 이루어진다. 프로그램은 main ( ) 이라는 함수부터 실행이 시작된다. 그러므로 어떤 프로그램이든지 간에 main ( ) 함수가 반드시 하나 있어야 한다. 함수는 함수 머리와 함수 몸체로 이루어진다. 함수 머리는 그 함수가 (리턴값이 있을 경우) 어떤 데이터형의 값을 리턴하고, 어떤 종류의 정보를 매개변수로 받는지를 나타낸다. 함수 몸체는 중괄호 { } 로 둘러싸인 C++ 구문들로 이루어진다. C++ 구문들의 유형은 다음과 같다. 선언 구문 선언 구문 (declaration statement) : 함수에서 사용되는 변수의 이름과 데이터형을 선언한다. 대입 구문 대입 구문 (assignment statement) : 대입 연산자 (=)를 사..

main 함수의 머리

함수의 머리는 인터페이스 역할을 한다. main 함수의 정의는 함수의 머리 int main()로부터 시작한다. 일반적으로 함수는 다른 함수에 의해 호출이 된다. 이때 함수 머리는 호출 함수와 피호출 함수의 인터페이스를 나타낸다. 함수 이림의 앞부분을 함수 리턴형(function return type)이라고 한다. 이것은 피호출 함수가 호출 함수로 다시 넘겨주는 정보의 흐름을 나타낸다. 이러한 일반 규칙이 main() 함수에서는 다소 혼동이 된다. 그 이유는 프로그램의 어디에도 main() 함수를 호출하는 부분이 없기 때문이다. 일반적으로 main()은, 프로그램과 운영 체제 (Unix, Windows 7,Linux 또는 다른 어떤 것)을 중개하기 위해 컴파일러가 프로그램에 추가하는 시동 코드에 의해 호출..