wellcome_공부일기

01.02. C++ | 객체와 변수란? 본문

프로그래밍/C++

01.02. C++ | 객체와 변수란?

ma_heroine 2020. 4. 19. 22:03

< 목차 >

1. 객체(object)

2. 변수(variables)

3. 초기화 (initialization) 대입 (assignment)

4. Left-values과 Right-values

 

 

객체(object)란?

- 컴퓨터 내에서 실제로 "존재한다."와 "존재하지 않는다."를 구분하는 것

- 어떻게 컴퓨터가 존재의 여부를 구분하는가 ?

- 컴퓨터에서 cpu와 메모리가 일(프로그래밍 etc.)을 하는데, 컴퓨터의 정보는 메모리에 저장된다.
   => 메모리에 저장이 되어있는 정보가 객체로서 존재하는 것

- 어떤 정보 값이 숫자열, 문자, 문자열을 메모리에 저장하는데 이 저장하는것을 객체(object) 라고 부를 수 있다.

- 객체(object)​는 메모리의 위치를 가지고 있다는 것을 기억하기

 

 

변수(variables)란?

- 변수(variables)라는 것은 내부적으로는 메모리에 담겨있는 객체를 이야기한다.
=> 객체의 핸들 이름이라고 부를 수 있음(객체를 다루는 이름) 

객체는 메모리에 담겨있다.

메모리 내의 객체를 다루기 위해서는 이를 지칭할 이름이 필요하기 때문에 변수를 사용한다. 

예를 들어, 객체를 사용하고 싶은데, 그 객체가 숫자 1이면 여기에 1을 더하거나 곱하고 혹은 복사하거나
지우고 싶을 때가 있을 것이다. 

하지만, 내가 어떤 객체를 사용할 것인지를 컴퓨터 프로그램에게 알려야 하므로 메모리 내의 객체에게 변수를 사용하여 "이름"을 붙여준다. 

 

 

- 변수(variables)는 "주소의 다른 이름이다."

주소가 있는 공간인 메모리(memory)는 아파트에 많이 비유한다. 

프로그래머가 편지를 아파트의 한 집에 배달해야 한다고 가정해보자. 

편지 배달 시 프로그래머는 특정 아파트의 집 주소를 알아야 한다. 하지만, 프로그래머는 사람이기 때문에 56-239동 728호와 같이 길고 복잡한 숫자 주소는 전달 시 기억하기 어려워 비효율적이다.

그래서 숫자 주소 대신 사람인 프로그래머가 쉽게 인식할 수 있는 문자(x, y, ...)로된 이름을 변수에 붙여준다.
(⇒ 변수는 문자로된 이름이다.)

변수는 기본적으로 수학에서 이야기하는 x² =4 처럼 변수와 비슷한 기능을 하지만, 
내부적으로 작동하는 구조는 "주소의 다른 이름이다."라고 생각하면 된다. 

※ 변수의 주소를 알고 싶을 때는 &(ampersand)를 문자 앞에 붙여주고 출력하면 된다. 

 

 

 

초기화(initialization)와 대입(assignment)이란?

- 컴퓨터는 모든 데이터를 이진수(binary numeral)인 0과 1같은 형태로 다룬다.

- 아래 코드에서 int x 라는 정수형 변수를 선언했다. 

- 기본적으로 변수명은 이름이라고 생각하면 된다. 

#include <iostream>

int main()
{
	int x = 123; //initialization
    
	return 0;
}

- x는 숫자를 담을 수 있는 메모리(memory)를 차지하고 있다. 

- x는 메모리에 있는 어떤 공간의 이름이고 메모리 공간의 크기는 정수 하나로 123같은 정수 하나를 담을 수 있는      공간이다. 

- 초기화(initialization)은 x가 메모리 공간을 할당받을 시 바로 123을 넣어 선언하는 것을 말한다.  초기화를 안하    게 되면 프로그램이 복잡해졌을 때, 오류가 나타날 수 있어 주의해야 한다. 

 

 

#incldue <iostream>

int main() 
{
	int x = 123; //initialization

	x = 5; //assignment
    
	return 0;
}

- x에 대입(assignment)을 하게 되는데, 이 " = " 등호를 assignment operator라고 부른다. 

- " = " 등호는 왼쪽과 오른쪽이 같다는 것이 절대 아니다. 
  => x라는 변수 이름이 가르키고 있는 메모리 공간에 123대신 5라는 정수를 저장해 놓는다.

 

#include <iostream>

using namespace std;

int main()
{
	int x = 123; //initialization

	x = 5; //assignment

	cout << &x << endl;
    
	return 0;
}

- x가 메모리 공간의 이름이라고 했는데 " &정식이름 " 같이 &(ampersand)라는 기호를 두고 찍으면 알 수 없는        16 진수 숫자가 나오는데 이 숫자가 메모리의 주소이다. 
 =>  5라는 숫자가 저장되있는 변수 x가 실제로 메모리에서 어떤 주소를 갖는지 표시해준다. 

 

 

 

Left-values과 Right-values란?

- Left-values와 Right-values를 구분하는 기준도 메모리 주소를 프로그래머가 직접적으로 접근할 수  있느냐 없느냐로 나눌 수 있다.      

#include <iostream>

int main()
{
	int x = 123;
    
	return 0;
}

- 3번째 줄에서 왼쪽편 x를 L-value이라고 하고 오른쪽편 1을 R-value라고 한다.

- x는 메모리 주소를 가지고 있어 프로그래머는 x의 메모리 주소에  직접적 접근이 가능하다.

- R-value인 1은 x의 메모리 주소에 임시적으로 저장된다. 123은 잠깐 작동을 하고 사라지는 것으로 프로그래머가    123이라는 숫자 자체에 대한 주소를 가져오기가 어렵다.

     

#include <iostream>

int main()
{
	int x = 1;

	x = x + 2;
    
	return 0;
}

- 5번째 줄에서  x 가 L-value이고  x+2이 R-value이다.

- 오른쪽 x는 값을 바꾸고 대입할 수 있는 변수로 작동하는게 아니다.

- 현재 가지고 있는 값(1)이 임시로 x+2의 x에 복사가 되고 2가 더해져서 R-value가 된다.  

 

 

 

 

 

 

* 중요한 단어는 *를 하여 표시하고 있습니다.

* 웹 아이콘을 참고하여 작성하였습니다.

* Dracula style을 적용한 코드블럭을 사용하고 있습니다. 

* 해당 글은 홍정모님의 따라배우는 C++을 토대로 공부한 내용입니다. 

Comments