1. 접근자와 설정자
• 접근자(accessor): 멤버 변수의 값을 반환
• 접근자만을 제공하면 읽기만 가능한 멤버 변수 생성 가능
• 예) getBalance();
• 설정자(mutator): 멤버 변수의 값을 설정
• 매개 변수를 통하여 잘못된 값이 넘어오는 경우, 사전에 차단 가능
• 예) setBalance(val);
2. Template의 개념
• 일반적인 코드를 작성하고 이 코드를 정수나 문자열과 같은 다양한 타입의 객체에 대하여 재사용하기 위해 사용
• 함수 템플릿, 클래스 템플릿 등이 있음
3. STL의 개념
• 표준 템플릿 라이브러리(Standard Template Library)의 약자로서, 많은 프로그래머들이 공통적으로 사용하는 자료 구조와 알고리즘에 대한 클래스
• 컨테이너(container), 반복자(iterator), 알고리즘(algorithm)로 구성
• 컨테이너는 자료를 저장하는 구조로 vector, list, map, queue, stack 등이 있음
• 반복자는 컨테이너에 저장된 요소들을 순차적으로 처리하기 위한 컴포넌트
• 정렬이나 탐색과 같은 다양한 알고리즘도 포함
3-1. STL Algorithm
• 탐색, 정렬, 계수 알고리즘 등이 있음
• #include <algorithm> 을 작성하여 사용 가능
4. Iterator
• 현재 처리하고 있는 자료의 위치를 기억하는 객체
• 포인터와 유사하며, 포인터 연산자 사용 가능
• 증감 연산자 사용 가능
• 비교 연산자 사용 가능
5. 포인터
• 메모리에 저장된 변수의 위치를 가리키기 위해서 사용
• 코드에서 사용하는 변수를 포함한 모든 것들은 메모리에 저장
• 즉, 포인터에는 메모리의 주소가 저장됨
• 변수의 주소를 가져오기 위해서는 &를 변수 앞에 붙임
• 포인터 변수를 선언하기 위해 *를 변수 앞에 붙임
• 포인터 변수가 가리키는 위치의 값을 접근하거나 바꾸기 위해서 *를 변수 앞에 붙여 역참조
5-1. 포인터 사용 예
5-2. 포인터 사용 시 주의점
• 초기화가 안된 포인터 변수는 사용 금지
• 포인터 변수는 초기값으로 항상 NULL을 주는 것이 좋음
• 임의로 어떤 주소를 정해주는 것 금지
• 메모리는 운영체제가 관리하는 공간
• 포인터 변수에도 자료형이 존재
5-3. 포인터 연산
• 포인터 변수로 가능한 연산
• 증가, 감소, 덧셈, 뺄셈
• 증감연산은 포인터의 자료형에 따라 증감하는 값이 다름
• 연산 적용 예
5-4. 포인터와 배열
• 배열의 이름은 배열의 시작 주소를 의미
• 배열의 이름을 가지고 하는 모든 연산은 포인터 변수로 동일하게 할 수 있음
• 아래에서 arr은 arr[0]의 주소, 즉 배열의 시작 주소를 의미
• arr[0]를 출력한 결과와 *p의 출력결과가 동일
• 배열의 시작 주소와 배열의 첫 번째 원소의 주소가 같기 때문
• 이러한 포인터와 배열의 성질을 이용하여, 배열을 반환하는 함수도 작성 가능
6. 동적 메모리 할당
• 실행 도중에 동적으로 메모리를 필요한 만큼만 힙(heap) 영역에 할당 받아, 메모리 사용 효율을 높이는 것
• 사용이 끝나면 시스템에 메모리를 반납
• new와 delete 키워드 사용
• 데이터타입 *변수명 = new 데이터타입(초기값); 형태 이용
• 배열은 = new 데이터타입[배열크기] {초기값}; 형태
• delete 포인터변수명;, delete [] 배열포인터변수명; 이용
• 클래스 객체 및 클래스 객체 배열도 동적 생성 가능
7. this 포인터
• 클래스 내부에서 현재 객체를(자신) 참조하는 포인터
• Python에서는 self
• 매개변수의 이름과 멤버변수의 이름이 같을 때 사용
• 멤버함수가 객체 자신을 반환할 때 사용
• 클래스의 멤버 변수에 접근할 때 . 대신 -> 사용