본문 바로가기

프로그래밍/C++

auto, decltype, 문자열

DirectX11을 공부하는 것도 중요하지만 C++ 기초를 다지는 것도 중요하다고 생각한다.
문법을 안다고는 하지만 하나하나 세세하게 살펴보고 이해도를 높이는 것이 중요하다는 생각이 들었다.
그래서 전문가를 위한 C++ 책도 가끔 가다 보고 있다.

타입 추론 auto, decltype

auto 키워드
1. 어떤 변수의 타입을 컴파일 타임에 자동적으로 연역해내는 것
  ex) auto x = 123; // x는 int 타입이 된다

2. 새로운 함수 정의 문법

3. 자동 함수 리턴 타입

4. 제네릭 람다 표현식

decltype 키워드
: 표현식을 인자로 받아서 그 표현식의 결과 타입이 무엇인지 알아낸다
  ex) int x = 123;
      decltype(x) y =456;

동적 메모리
: 컴파일 타임에 크기를 정할 수 없는 데이터를 이용할 수 있게  

해준다

스택 메모리
: 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역
   함수의 호출과 함께 할당되며 호출이 완료되면 소멸한다
   스택 영역에 저장되는 함수의 호출 정보를 스택 프레임이라고한다

힙 메모리
: 완전히 독립적인 메모리 영역
   사용자가 직접 관리할 수 있는 메모리 영역이다
   힙에 할당된 메모리는 반드시 사용자가 직접 해제해야 한다

값에 의한 전달 (call by value)
: 인수로 전달되는 변수가 가지고 있는 값을 함수 내의 매개변수에 복사하는 방식

참조에 의한 전달 (call by reference)
: 인수로 변수의 값을 전달하는 것이 아니라 해당 변수의 주소값을 전달하는 방식. 함수 파라미터 정의부에서 각 파라미터 변수 이름 앞에 & 연산자를 붙인다

스마트 포인터
: 객체에 유효한 스코프가 더 이상 없을 때 자동으로 메모리를 해제한다

1. unique_ptr : 범용 스마트 포인터, 예외 상황이 발생했을 때 메모리 해제를 단순하게 할 수 있다.
  만들 때는 make_unique<>()를 이용한다

2. shared_ptr : 데이터에 대한 오너십이 여기 저기 분산될 수 있게 해준다. unique_ptr과 달리 배열을 지원하지 않는다
만들 때는 make_shared<>()를 이용한다

3. weak_ptr : shared_ptr에 대입된 객체를 참조하되 레퍼런스 카운트에 영향을 주고 싶지 않을 때 사용한다

C++의 문자열
1. 기존 C언어에서와 같이 문자열의 배열로 이용하는 것
2. string 타입을 이용하는 것
3. 비표준적인 방법으로 프로그래머가 C++의 타입 정의 기능을 이용해서 직접 정의하는 것

예외처리
: 코드의 안정성을 한 단계 높이기 위해 언어 차원에서 제공되는 기능
ex) try / catch

const 상수
: 컴파일러에 의해 변수값이 바뀌지 않도록 보증된다

파라미터 보호를 위한 const
: 특정 코드가 실행되는 동안 특정 변수를 상수화하면 의도하지 않게 값이 바뀌는 오휴 상황을 컴파일 타임에 알아낼 수 있다

참조형 const
: 값 복제 오버헤드를 피하고, 참조형의 위협 요소인 원본의 변조도 막아준다

객체지향 언어로서의 C++
클래스(class)
: 객체의 특성을 정의한다. 속성 데이터를 저장할 데이터 멤버와 클래스의 행동을 조정할 수 있는 메소드를 선언한다

가시성
1. public : 클래스 밖에서 접근할 수 있다
2. private : 클래스 내부에서만 접근할 수 있다

모든 데이터 멤버를 private로 만들고, 외부에서 접근 가능해야 할 경우 전용 게터와 세터를 public로 만들어둔다

생성자 (constructor)
: 클래스 명과 같은 이름이면서 리턴값이 없는 메소드

소멸자 (destructor)
: ~로 시작하고 클래스명과 같다

데이터 멤버의 변경이 없는 메소드는 명시적으로 const 키워드로 선언하는 것이 좋다. 이러한 const 메소드를 인스펙터(inspector),
멤버 변경이 있는 메소드를 뮤테이터(mutator)라고 한다

'프로그래밍 > C++' 카테고리의 다른 글

객체지향과 클래스  (0) 2019.03.12
보기 좋은 코드의 중요성과 코드의 디자인  (0) 2019.03.09
Lambda (람다)  (0) 2019.03.07
가상 메모리 (Virtual Memory)  (0) 2019.02.23
동기화 (Synchronization)  (0) 2019.02.21