[C++][OOP] Variables & Operators

 

제목: C++ 변수와 연산자

서론

객체지향 프로그래밍(OOP)에 들어가기 전, C++의 기본 요소인 변수와 연산자에 대한 깊이 있는 이해가 필요하다. 마치 건축물의 기초 공사와 같이, 변수와 연산자는 C++ 프로그래밍의 토대를 형성한다. 먼저 폰 노이만 아키텍처를 통해 메모리의 중요성을 되짚어보고, 변수의 다양한 타입과 연산자의 특징을 살펴보며 C++ 프로그래밍의 기본기를 탄탄하게 다져보자.

폰 노이만 아키텍처와 메모리의 역할

현대 컴퓨터의 근간을 이루는 폰 노이만 아키텍처는 CPU, 메모리, 입출력 장치로 구성된다. 특히 메모리는 프로그램 실행에 필요한 데이터와 명령어를 저장하는 핵심적인 역할을 수행한다. C++ 프로그램 역시 컴파일 과정을 거쳐 메모리에 저장되고, CPU는 메모리에 저장된 명령어를 순차적으로 실행하며 데이터를 처리한다.

Von Neumann Architecture

변수: 데이터를 담는 그릇

변수는 메모리 공간에 이름을 붙여 데이터를 저장하고 관리하는 데 사용된다. 마치 다양한 크기와 모양의 그릇에 음식을 담는 것처럼, C++는 다양한 타입의 변수를 제공하여 각기 다른 종류의 데이터를 저장할 수 있도록 한다.

변수 타입의 종류와 특징

C++는 다양한 데이터 타입을 제공하며, 각 타입은 메모리 크기와 표현 가능한 데이터 범위가 다르다.

  • 정수 타입 (Integer Type): 정수를 저장하는 데 사용되며, short, int, long, long long 등 다양한 크기와 부호 (signed, unsigned)를 지원한다. 예를 들어 int는 4byte(=16bit)의 메모리를 사용하며, -2^31부터 2^31-1까지의 정수를 표현할 수 있다.
Integer

  • 부동소수점 타입 (Floating Point Type): 실수를 저장하는 데 사용되며, float, double, long double 등이 있다. IEEE 754 표준을 따르며, 지수(exponent)와 가수(mantissa)를 이용하여 실수를 표현한다. float는 4바이트 메모리를 사용하며, ± 3.4 X 10^38 범위의 실수를 표현할 수 있다. 부동소수점 타입은 유효 자릿수를 나타내는 precision 개념도 중요하다. 예를 들어 cout은 기본적으로 6자리의 precision을 갖는다.
    Floating

  • 문자 타입 (Character Type): 단일 문자를 저장하는 데 사용되며, char, wchar_t, char16_t, char32_t 등이 있다. char는 1바이트 메모리를 사용하며, 작은 따옴표('')로 둘러싸거나 ASCII 값을 이용하여 문자를 표현할 수 있다.
    Character

변수 초기화: 시작을 알리는 첫 발걸음

변수를 선언할 때 초기값을 할당하는 것을 '초기화'라고 한다. C++는 다양한 초기화 방법을 제공한다.

  • 복사 초기화 (Copy initialization): = 연산자를 사용하여 초기값을 할당한다. 예: int num = 10;
  • 직접 초기화 (Direct initialization): 변수 이름 뒤에 괄호()를 사용하여 초기값을 할당한다. 예: int num(10);
  • Uniform initialization: 변수 이름 뒤에 중괄호{}를 사용하여 초기값을 할당한다. C++11부터 지원되며, 안전하지 않은 변환을 방지한다. 예: int num{20.5}; // error
Variable initialization

타입 변환: 데이터의 변신

서로 다른 타입의 변수를 연산할 때, 컴파일러는 자동으로 타입 변환을 수행한다. 이를 '암시적 타입 변환(implicit type conversion)'이라고 한다. 예를 들어 int char 을 더하면  char  int 로 변환되어 연산이 수행된다.

implicit type conversion


type conversion order

반면에 프로그래머가 명시적으로 타입 변환을 지정할 수도 있는데, 이를 '명시적 타입 변환(eplicit type conversion)' 또는 '타입 캐스팅(type casting)'이라고 한다. 예를 들어 double 값을 int로 변환하려면 (int)값 형태로 타입 캐스팅을 수행한다.

explicit type conversion

연산자: 데이터를 manipulates 하는 도구

연산자는 변수에 저장된 데이터를 처리하고 연산하는 데 사용된다. C++는 다양한 연산자를 제공하며, 각 연산자는 우선순위와 결합 규칙을 갖는다.

  • 산술 연산자: +, -, *, /, % 등 숫자 데이터의 사칙연산과 나머지 연산을 수행한다. (Left에서 Right로)
  • 대입 연산자: =, +=, -=, *=, /=, %= 등 변수에 값을 할당하거나 기존 값에 연산 결과를 누적한다. (Right에서 Left로)
  • 증감 연산자: ++, -- 등 변수 값을 1 증가시키거나 감소시킨다. (Prefix냐 Posfix냐에 따라 순서가 상이함)
  • 비교 연산자: ==, !=, >, >=, <, <= 등 두 값을 비교하여 참/거짓을 판단한다.
  • 논리 연산자: &&, ||, ! 등 여러 조건을 논리적으로 결합하여 참/거짓을 판단한다.
  • 비트 연산자: &, |, ^, ~, <<, >> 등 비트 단위 연산을 수행한다.
Arithmetic operator(산술) vs Assignment operator(대입)


증감 연산자 예제

연산자 우선순위와 결합 규칙: 순서의 중요성

여러 연산자가 함께 사용될 때, 연산자의 우선순위와 결합 규칙에 따라 연산 순서가 결정된다. 예를 들어 *, /, % 연산자는 +, - 연산자보다 우선순위가 높다.

C++
int result = 3 + 4 * 5; // result는 23

또한, 동일한 우선순위의 연산자들은 결합 규칙에 따라 연산 순서가 결정된다. 대부분의 연산자는 왼쪽에서 오른쪽으로 결합하지만, 대입 연산자나 단항 연산자는 오른쪽에서 왼쪽으로 결합한다.

헷갈리는 예제


결론

변수와 연산자는 C++ 프로그래밍의 기본 요소이며, 데이터를 저장하고 조작하는 데 필수적인 도구이다. 다양한 타입의 변수와 연산자를 적절히 활용하여 원하는 결과를 얻을 수 있도록 꾸준히 연습하고 숙달해야 한다. 다음 시간에는 C++에서 flow control하는 방법에 대해 알아보겠다.

추천글 : 

[알고리즘] Algorithmic Analysis - correctness with induction
(https://hyeonb.blogspot.com/2024/09/algorithmic-analysis-correctness-with.html)

[OOP] 객체지향프로그래밍
(
https://hyeonb.blogspot.com/2024/09/oop.html)

hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2