C++ 기초 지식 정리

본격적으로 공부하기에 앞서 기본적으로 알아야 할 C++ 주제들을 정리해봤다.

 

 

C++ 코드 기초

#include <iostream>

int main()
{
   std::cout << "Hello world!";
   return 0;
}

#include <iostream>은 전처리기 지시문으로 콘솔에서 텍스트를 읽고 쓸 수 있게 해주는 C++ 표준 라이브러리의 일부 내용을 사용하고 싶다는 것을 나타낸다.

 

int main()형식의 함수이름(식별자)는 함수를 작성할 것이라고 컴파일러에게 알리는 역할이다.

또한 모든 프로그램에는 main함수가 있어야 하며 없을 시 링크에 실패한다.

 

std::cout << "Hello world!";는 명령문의 의미를 가지고,

return은 반환문이다. 프로그램의 실행이 끝나면 프로그램은 성공적으로 실행되었는지 여부를 나타내기 위해 운영 체제에 값을 보낸다. 위 예시에서return 문은 운영 체제에 0을 반환하는데, 이것은 "오류 없이 괜찮았다"를 의미한다.

만약 retrun 문이 제공되지 않으면 main함수는 암시적으로 0을 반환한다.

 

 

 

 

RAM 안에서의 데이터 흐름 (데이터가 변수에 담기는 과정)

 

프로그램은 원하는 결과를 생성하기 위해 데이터를 조작하는 명령 모음이다.

 

컴퓨터의 주 메모리를 Random Access Memory (줄여서 RAM)이라고 한다. 

프로그램을 실행하면 운영 체제는 프로그램을 RAM에 로드한다. 프로그램 자체에 코딩된 모든 데이터( "Hello, world!"와 같은 텍스트)가 이 시점에 로드된다.

 

운영 체제는 또한 프로그램이 실행되는 동안 사용할 수 있도록 일부 추가 RAM을 예약한다. 

이 메모리의 일반적인 용도는 사용자가 입력한 값을 저장하거나, 파일이나 네트워크에서 읽은 데이터를 저장하거나, 프로그램이 실행되는 동안 계산된 값(두 값의 합)을 나중에 다시 사용할 수 있도록 저장하는 것이다.

 

즉, RAM은 프로그램이 실행되는 동안 데이터를 저장하는 상자로 볼 수 있다.

하지만 직접적으로 그 상자를 호출하는 방식이 아니라, 상자에 이름을 붙여서 그 안에 담겨있는 데이터를 간접적인 방식으로 호출한다.

 

이렇게 우리는 객체(상자에 이름붙이기)를 사용하는 것으로, 값을 저장하고 검색(호출)하는 것에 집중할 수 있으며 해당 객체가 실제로 메모리의 어디에 배치되는지 걱정할 필요가 없다.

여기서 이름이 있는 객체를 변수 라고 한다 .

 

 

 

 

변수의 선언 (int x;)

 

compile time에 컴파일러는 명령문이 어떤 역할을 하는 type인지 기록한다.

 

프로그램이 실행되면( runtime 이라고 함 ) 변수가 인스턴스화된다. 

인스턴스화는 객체가 생성되고 메모리 주소가 할당된다는 것을 의미한다.

따라서 변수를 값을 저장하는 데 사용하려면 먼저 인스턴스화해야 한다. 

 

예를 들어, 변수 x가 메모리 위치 140에서 인스턴스화되었다고 가정하자. 그럼 프로그램이 변수 x를 사용할 때마다 메모리 위치 140의 값에 액세스한다. 인스턴스화된 객체를 인스턴스라고 부르기도 한다.

 

 

 

 

어떤 type이 저장될 지 명명된 저장공간, 변수

 

데이터 타입은 컴파일러에 변수가 저장할 값 유형(예: 숫자, 문자, 텍스트 등)을 알려준다.

C++에서 변수의 타입은 컴파일 타임 (프로그램이 컴파일될 때)에 알려져야 하며, 프로그램을 다시 컴파일하지 않으면 해당 타입을 변경할 수 없다. 이 말은 정수 변수가 정수 값만 보유할 수 있음을 의미한다. 

만약 다른 종류의 값을 저장하고 싶다면, 다른 type을 사용해야 한다.

 

 

C++에서는 객체를 사용하여 메모리에 액세스한다. 여기서 명명된 개체를 변수라고 한다. 

변수에는 식별자, 타입, 값이 있다. 

변수의 타입은 메모리의 값을 어떻게 해석할지 결정하는 데 사용된다.

이 말은 곧 변수란, 값을 저장하는 데 사용할 수 있는 명명된 메모리 영역이란 소리다.

 

식별자는 변수에 액세스하는 이름으로 생각하면 된다.

타입은 위에 말했듯이, 프로그램에 메모리의 값을 해석하는 방법을 알려준다.

 

프로그램이 실행되면 정의된 각 변수가 인스턴스화 된다 . 이는 변수에 메모리 주소가 할당된다는 의미이다.

 

 

 

 

객체를 초기화하는 여러가지 방법

 

변수를 정의하고, 값을 할당하는 방법 외에도 변수에 값을 지정할 수 있다.

객체가 정의될 때 초기값을 지정할 수 있는데, 이 과정을 초기화라고 한다.

int width { 4.5 };

 

 

초기화에는 다양한 형태가 있다.

int a;         // no initializer (default initialization)
int b = 5;     // initial value after equals sign (copy initialization)
int c( 6 );    // initial value in parenthesis (direct initialization)

// List initialization methods (C++11) (preferred)
int d { 7 };   // initial value in braces (direct list initialization)
int e = { 8 }; // initial value in braces after equals sign (copy list initialization)
int f {};      // initializer is empty braces (value initialization)

차례대로 살펴볼텐데.. 순서대로 기본 초기화, 복사 초기화, 직접 초기화, 목록 초기화가 있다.

 

1. 기본 초기화는 int a; 의 경우로, 초기화를 하지 않고 변수를 선언만 한 상태를 말한다.

 

2. 복사 초기화는 등호 = 뒤에 초기값이 제공되는 경우를 말한다. int b = 5;

하지만 다른 초기화들보다 효율이 떨어져서 많이 사용되진 않는다.

 

3. 직접 초기화는 괄호 안에 초기값을 입력한다. int c( 6 );

이 방식은 복잡한 객체의 보다 효율적인 초기화를 위해 만들어졌다. 

하지만 지금 선언한 것이 변수인지, 함수인지 구별하기 어려워서 선호되진 않는다.

 

4. 목록 초기화는 다시 한번 세 가지 형태로 구분된다.

int width { 5 };    // direct list initialization of initial value 5 into variable width
int height = { 6 }; // copy list initialization of initial value 6 into variable height
int depth {};       // value initialization (see next section)

 

목록 초기화에는 다른 초기화들보다 추가적인 이점이 있다.

예를들어, 복사나 직접 초기화는 int로 선언한 변수 안에 4.5를 넣으면 소수 부분을 삭제하여 4로 초기화한다.

하지만 목록 초기화는 데이터 손실을 원하지 않기 때문에 int타입 변수에서 중괄호{} 안에 double값을 넣으면 컴파일러 에러를 일으킨다.

 

 

 

 

리터럴과 상수의 차이

 

#include <iostream>

int main()
{
    std::cout << 5 << '\n'; // print the value of a literal

    int x { 5 };
    std::cout << x << '\n'; // print the value of a variable
    return 0;
}

두 출력문 모두 동일한 작업을 수행한다(값 5를 인쇄). 

그러나 리터럴의 경우 값 5를 직접 인쇄할 수 있고, 변수의 경우 변수를 나타내는 메모리에서 값을 가져와야 한다.

 

이것이 변수가 변경될 수 있는 반면 리터럴이 상수인 이유이다. 

리터럴 값은 실행 파일에 직접 배치되며 실행 파일 자체는 생성된 후에 변경할 수 없다. 

변수의 값은 메모리에 저장되며 실행 파일이 실행되는 동안 메모리 값이 변경될 수 있다.

리터럴은 소스 코드에 직접 삽입되는 값이고, 객체와 변수는 값을 보유하는 메모리 위치를 나타낸다.

 

 

 

 

표현식

 

int x{ 2 + 3 };

 

type identifier {expression};

표현식은 단일 값을 계산하는 리터럴, 변수, 연산자 및 함수 호출의 조합이다. 

표현식을 실행하는 프로세스를 평가 라고 하며, 생성된 단일 값을 표현식의 결과 라고한다.

표현식  표현식 끝에 세미콜론을 붙여서 문장으로 만든 표현식이다.