Development language

Base.자료형, 변수, 메모리 주소

DOT-ICD 2021. 9. 29. 19:03
728x90

접은글의 Base포스트와 함께 읽어두자.

자료형

Ptyhon에서 지원하는 자료형을 기준으로 작성하였다. 사용하는 언어에 따라서 더 다양한 자료형을 지원할수도, 그렇지 않을 수도 있다.

 

Int : 자료형의 이름은 Integer에서 유래했다. 이름의 유래와 같이 정수를 담는 자료형이다.

 

Float : Real number를 담는 자료형. 자료형의 이름은 Floating point에서 유래했다. 실수는 소수점과 정수부로 분리되는데, 컴퓨터의 연산처리과정에서 소수점 이하의 숫자는 그 표현 알고리즘에 따라 소수점의 위치가 유동적이다. 이를 둥둥 떠다니는 것과 같다는 의미에서 Floating이라는 이름이 붙게되었다고 한다.

*부동소수점에 대해 더 자세히 알아보고 싶다면 아래의 링크를 참조.

 

14. Floating Point Arithmetic: Issues and Limitations — Python 2.7.18 documentation

14. Floating Point Arithmetic: Issues and Limitations Floating-point numbers are represented in computer hardware as base 2 (binary) fractions. For example, the decimal fraction has value 1/10 + 2/100 + 5/1000, and in the same way the binary fraction has v

docs.python.org

 

complex : 자료형의 이름은 Complex number에서 따왔다. 이름 그대로 복소수를 저장하는 자료형이다. 단, C와 같은 언어에서 지원하는 자료형이 아닌 Python에서 지원하는 자료형이다. C에서 구현하기 위해서는 구조체 등의 방법을 사용해야 한다. 

 

Str : 자료형의 이름은 String에서 유래했다. 문자열을 담는 자료형이다.

 

Bool : 자료형의 이름은 불대수에서 유래했다. True와 False로 이루어져있다.

 

Str와 Bool은 추가 포스팅을 통해 다루도록 하겠다.


변수

변수는 간단히 말해 무언가를 담는 그릇과 같다. 컴퓨터는 입력되는 값에 대한 연산을 수행해서 결과값으로 반환한다. 이를 위해서 입력값을 받을 그릇의 이름을 정하고, 그 이름을 사용해서 프로그래머들을 프로그래밍을 한다.

 

앞서 말한 자료형은 변수의 종류를 구분하는데 사용된다.

이때, C언어와 같은 초기의 언어들은 Compiler의 복잡성을 줄이고 신뢰성을 높이기 위해 모든 변수의 종류를 직접 구분하고 명시해주어야 했지만, Python과 같은 최근의 언어들은 Interpreter수준에서 변수가 입력되면 그 변수의 자료형을 Interpreter가 직접 분류하고 번역한다. 

 

프로그래밍 과정에서 변수를 만드는 과정을 "변수를 선언한다"라고 표현한다. 선언 방법은 Python기준으로 다음과 같다.

a = 1
b = "안녕하세요"
c = 2.525

a,b,c는 변수명을 의미한다. 즉 그릇의 이름이다.

=기호 옆의 값과 문장은 그릇에 담을 내용물이다. 이 내용물에 따라 변수의 자료형이 변경된다.

a의 경우 Int자료형으로 사용될 것이고, b의 경우 string자료형, c의 경우 float자료형으로 사용될 것이다.

Python에서는 이처럼 프로그래머가 변수의 자료형을 일일히 지정할 필요가 없다.

 

=

수학의 등호기호가 아니다. 대입연산자 이다. 대입연산자는 같은지를 분석하는 연산이 아닌, 변수가 가리키는 주소에 값을 넣겠다는 명령을 하는 연산자이다! 프로그래밍 과정에서 우리가 수학에서 원하는 등호를 사용하고 싶다면 ==을 사용하면 된다.


저장과 메모리 주소

모든 프로그램은 어떤 정보를 저장할 때, 메모리에 저장한다. 이 메모리는 수많은 방들로 이루어진 저장소이며, 각각의 방들은 고유한 주소를 갖는다.

 

앞에서 변수에 대한 쉬운 이해를 위해 그릇의 예를 들었으나, 이제부터 개념이 이해가 되지 않을 수 있다. 집중!

 

Python은 어떤 정보를 저장할 때 Object의 형태로 저장한다. Object 즉 객체는 "값 + 주소 + 자료형"의 세가지 정보가 함께 저장되어 있다. 우리가 Python에서 어떤 데이터를 말할 때 변수라고 부르는 것들은 사실 이 Object의 주솟값이다. 즉 Python은 객체의 메모리 주소로써 변수를 선언한다. 

이를 예시를 들어 설명하면 다음과 같다.

 

값"안녕하세요"는 메모리주소 abcd123에 존재하는 방에 존재한다.

abcd123메모리 주소에 존재하는 객체는 자료형 string과 값"안녕하세요"를 갖는다.

변수b는 메모리주소 abcd123을 가리킨다.

 

사실 무슨차이냐고 생각할수도 있겠지만, 코딩을 공부할수록 이 차이가 커짐을 알 수 있을 것이다.

단, Python을 사용하는 과정에선 메모리 주소를 직접적으로 사용할 필요는 없다! 포인터를 사용하지 않기 때문이다.

포인터에 대해 궁금하다면 C언어 포인터 키워드로 구글에 검색해보자. 훌륭한 글들이 많이 있다.

 

728x90

'Development language' 카테고리의 다른 글

Base.괄호 / OS / IDE  (0) 2021.09.29
Base.버그 / 디버그  (0) 2021.09.08