본문 바로가기

C++ (learncpp)/C++ Basics

1.3 — Introduction to objects and variables

데이터 (Data)

 

단원 1.1 -- 명령문과 프로그램의 구조(lesson 1.1 - Statements and the structure of a program)에서 프로그램의 대부분의 명령은 명령문이며 명령문은 함수로 그룹화된다는 것을 배웠습니다. 이 명령문은 프로그램이 생성하도록 설계된 결과가 무엇이든 (바라건대) 생성하는 작업을 수행합니다.

그러나 프로그램은 실제로 어떻게 결과를 생성합니까? 데이터를 조작(읽기, 변경 및 쓰기)하여 수행합니다. 컴퓨팅에서 데이터는 컴퓨터에 의해 이동, 처리 또는 저장할 수 있는 모든 정보입니다.

 

핵심 통찰력 (Key insight)

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

프로그램은 파일이나 데이터베이스에서, 네트워크를 통해, 키보드에서 입력을 제공하는 사용자로부터, 또는 프로그램 자체의 소스 코드에 직접 데이터를 입력하는 프로그래머로부터 다양한 방법으로 작업할 데이터를 얻을 수 있습니다. 앞서 언급한 수업의 "Hello world" 프로그램에서 "Hello world!"라는 텍스트가 프로그램의 소스 코드에 직접 삽입되어 프로그램이 사용할 데이터를 제공합니다. 그런 다음 프로그램은 이 데이터를 표시할 모니터로 보내 이 데이터를 조작합니다.

컴퓨터의 데이터는 일반적으로 저장 또는 처리에 효율적인 형식으로 저장되므로 사람이 읽을 수 없습니다. 따라서 "Hello World" 프로그램이 컴파일되면 "Hello world!"라는 텍스트가 표시됩니다. 프로그램에서 사용할 수 있는 보다 효율적인 형식으로 변환됩니다(이진 파일, 향후 강의에서 논의할 예정).

 

개체 및 변수 (Objects and variables)

 

모든 컴퓨터에는 프로그램에서 사용할 수 있는 RAM(Random Access Memory의 약자)이라는 메모리가 있습니다. RAM은 프로그램이 실행되는 동안 데이터 조각을 보관하는 데 각각 사용할 수 있는 일련의 번호가 매겨진 사서함으로 생각할 수 있습니다. 메모리 어딘가에 저장된 단일 데이터를 값이라고 합니다.

 

일부 구형 프로그래밍 언어(예: Apple Basic)에서는 이러한 사서함에 직접 액세스할 수 있습니다(예: go get value stored in the mailbox number 7532).

C++에서는 직접 메모리 액세스가 허용되지 않습니다. 대신 객체를 통해 간접적으로 메모리에 액세스합니다. 객체는 값 및 기타 관련 속성(향후 수업에서 다룰 예정)이 있는 저장 영역(보통 메모리)입니다. 컴파일러와 운영 체제가 개체에 메모리를 할당하는 방법은 이 단원의 범위를 벗어납니다. 그러나 여기서 요점은 사서함 번호 7532에 저장된 값을 가져오라고 하는 대신 이 개체에 저장된 값을 가져오라고 말할 수 있다는 것입니다. 이것은 우리가 값을 저장하고 검색하기 위해 객체를 사용하는 데 집중할 수 있고 메모리에서 실제로 배치되는 위치에 대해 걱정할 필요가 없다는 것을 의미합니다.

개체는 이름이 지정되거나 이름이 지정되지 않을 수 있습니다(anonymous). 명명된 개체를 변수라고 하고 개체의 이름을 식별자라고 합니다. 우리 프로그램에서 우리가 만들고 사용하는 대부분의 객체는 변수입니다.

 

저자의 메모 (Author’s note)

일반적인 프로그래밍에서 객체라는 용어는 일반적으로 변수, 메모리의 데이터 구조 또는 함수를 나타냅니다. C++에서 객체라는 용어는 함수를 제외하는 더 좁은 정의를 가지고 있습니다.

 

변수 인스턴스화 (Variable instantiation)

변수를 생성하기 위해 정의라고 하는 특별한 종류의 선언문을 사용합니다(선언과 정의의 차이점은 나중에 명확히 하겠습니다).

다음은 x라는 변수를 정의하는 예입니다.

 

int x; // define a variable named x, of type int

 

컴파일 타임에 컴파일러는 이 명령문을 볼 때 변수를 정의하고 있으며 변수에 x라는 이름을 부여하고 int 유형임을 스스로에게 기록합니다(유형에 대해서는 잠시 후에 자세히 설명). 그 시점부터 (향후 수업에서 이야기할 몇 가지 제한 사항이 있음) 컴파일러는 식별자 x를 볼 때마다 우리가 이 변수를 참조하고 있음을 알게 됩니다.

프로그램이 실행될 때(런타임이라고 함) 변수가 인스턴스화됩니다. 인스턴스화는 객체가 생성되고 메모리 주소가 할당된다는 의미의 멋진 단어입니다. 변수는 값을 저장하는 데 사용되기 전에 인스턴스화되어야 합니다. 예를 들어 변수 x가 메모리 위치 140에서 인스턴스화되었다고 가정해 보겠습니다. 프로그램이 변수 x를 사용할 때마다 메모리 위치 140에 있는 값에 액세스합니다. 인스턴스화된 개체를 인스턴스라고도 합니다.

 

데이터 유형 (Data types)

지금까지 변수는 데이터 값을 저장할 수 있는 명명된 저장 영역이라는 것을 다루었습니다. 데이터 유형(보다 일반적으로 유형이라고 함)은 컴파일러에게 변수가 저장할 값 유형(예: 숫자, 문자, 텍스트 등)을 알려줍니다.

위의 예에서 변수 x에는 int 유형이 지정되었으며 이는 변수 x가 정수 값을 나타냄을 의미합니다. 정수는 4, 27, 0, -2 또는 -12와 같이 분수 구성요소 없이 쓸 수 있는 숫자입니다. 간단히 말해서 x는 정수 변수라고 말할 수 있습니다.

 

C++에서 변수의 유형은 컴파일 시간(프로그램이 컴파일될 때)에 알려야 하며 프로그램을 다시 컴파일하지 않고는 해당 유형을 변경할 수 없습니다. 이는 정수 변수가 정수 값만 보유할 수 있음을 의미합니다. 다른 종류의 값을 저장하려면 다른 변수를 사용해야 합니다.

정수는 C++에서 기본적으로 지원하는 많은 유형 중 하나일 뿐입니다. 설명을 위해 다음은 데이터 유형 double을 사용하여 변수를 정의하는 또 다른 예입니다.

 

double width; // define a variable named width, of type double

 

C++에서는 사용자 정의 유형을 생성할 수도 있습니다. 이것은 우리가 향후 수업에서 많이 할 것이며 C++를 강력하게 만드는 부분입니다.

이 소개 장에서는 정수 변수가 개념적으로 간단하기 때문에 계속 사용하지만 곧 C++에서 제공해야 하는 다른 많은 유형을 탐색할 것입니다.

 

여러 변수 정의 (Defining multiple variables)

이름을 쉼표로 구분하여 단일 명령문에서 동일한 유형의 여러 변수를 정의할 수 있습니다. 다음 2개의 코드 스니펫은 사실상 동일합니다.

 

int a;
int b;

와 같다:

 

int a, b;

 

이런 식으로 여러 변수를 정의할 때 새 프로그래머가 저지르는 경향이 있는 두 가지 일반적인 실수가 있습니다(컴파일러가 이를 잡아서 수정하도록 요청하기 때문에 심각하지 않습니다).

첫 번째 실수는 변수를 순서대로 정의할 때 각 변수에 유형을 지정하는 것입니다.

 

 

int a, int b; // wrong (compiler error)

int a, b; // correct

 

두 번째 실수는 허용되지 않는 동일한 명령문에서 다른 유형의 변수를 정의하려고 시도하는 것입니다. 다른 유형의 변수는 별도의 문으로 정의해야 합니다.

 

int a, double b; // wrong (compiler error)

int a; double b; // correct (but not recommended)

// correct and recommended (easier to read)
int a;
double b;

 

모범 사례 (Best practice)

언어를 사용하면 그렇게 할 수 있지만 단일 명령문에 여러 변수를 정의하는 것은 피하십시오(동일한 유형이더라도). 대신, 별도의 명령문에서 각 변수를 정의하십시오(그런 다음 한 줄 주석을 사용하여 해당 변수의 용도를 문서화하십시오).

 

요약 (Summary)

C++에서는 변수를 사용하여 메모리에 액세스합니다. 변수에는 식별자, 유형 및 값(및 여기에서 관련이 없는 기타 속성)이 있습니다. 변수의 유형은 메모리의 값을 해석하는 방법을 결정하는 데 사용됩니다.

 

reference : https://www.learncpp.com/cpp-tutorial/introduction-to-objects-and-variables/