파이썬 변수 개념, 자료형 타입 확인과 변환 (숫자, 문자, 논리)

그동안 설치만 주구장창 했으니 이제 본격적으로 파이썬 기초를 학습해보자. 일단 파이썬에서 사용되는 변수라는 것의 개념을 살펴보고, 각 변수가 가지는 자료형 타입을 알아보자.

파이썬 변수의 개념

우리가 흔히 알고있는 변수란 이런 것이다.

y=x+2

여기에서 x에 어떤 값이 오느냐에 따라 y의 결과가 변한다. 이렇게 변수는 변할 수 있는 수, 여러가지 값을 가질 수 있는 개체라는 것으로 알고 있었다.

파이썬에서는 변수의 개념이 조금 다르다. 파이썬에서 말하는 변수란 일종의 메모리 주소의 개념이다. 무슨 말인고 하니,

a=1

이라고 입력했다고 하자. 직관적으로 생각하면 a의 값을 앞으로 1이라고 지정한다는 명령어로 보인다. 즉 a가 곧 1이라는 뜻으로 생각된다.

하지만 정확히 말하자면 이는 a라는 변수의 메모리 주소에 1을 넣어라 라는 의미이다. a라는 변수가 선언된 순간 컴퓨터 내에서 어떠한 메모리 주소, 집주소를 하나 할당받았고 그 주소가 어디인지 우리는 모르지만 a라는 이름으로 부르며 소통을 한다.

마치 도로명 주소와도 같다. 강남대로 라고 하면 강남대로가 위도 경도 몇인지, 무슨동 어느위치에 있는지 정확히는 모르지만 아무튼 강남대로라는 주소를 하나 알게 되었고 거기에 내가 기억하고 싶은 무언가를 매칭시키는 것이다.

정리하면, 파이썬에서 변수는 어떤 값을 저장하기 위한 공간을 의미하며 변수가 선언되는 순간 메모리 내의 어떠한 영역을 할당받는다. a=1의 의미는 “a가 1이다”가 아닌, a라는 명칭의 메모리에 1을 넣어놓아라 라는 뜻이다.

파이썬 변수 예시

이 예시를 보면 변수의 개념을 보다 잘 이해할 수 있다. a에 처음 1이라는 값을 넣었다. 그리고 a는 다시 a+1이라는 값을 넣었다. 여기서 왼쪽의 a는 변수, 오른쪽의 a는 기존 a가 가지고 있던 값이다. 따라서 변수 a에 할당되는 값은 1에서 2로 새롭게 변경된다. (assign)

그렇게 a를 출력해보면 ① 값 2가 나온다.

a=a+1은 a+=1 과 같이 쓸 수 있는데 한번 더 한 후 print를 해보면 ② 값이 3으로 바뀌어 있는것을 볼 수 있다.

변수는 알파벳, 숫자, 언더바 _ 로 조합하여 만들 수 있고 띄어쓰기는 불가하다. 알파벳은 대소문자를 구분하며 장문의 코딩후 내용을 파악하기 위해서는 무조건 짧은 것보다는 의미있는 변수명을 사용하는 것이 좋다. for, if와 같이 특별한 의미가 있는 예약어는 변수명으로 사용할 수 없다.

(변수 작명 예시)

a

age

sales_1year

degree_float_type

파이썬 자료형 타입

이렇게 지정된 변수는 그 변수가 가지는 값의 종류에 따라 타입 속성이 정해진다. 문자형 변수이냐, 아니면 수치형 그 중에서도 정수형이냐 실수형이냐 등으로 나뉜다.

가장 기본적인 자료형은 아래와 같다.

자료형type종류선언
정수형integer양,음의 정수-2, 25, 100a=3
실수형float소수점 포함된 실수25.841, -3.7a=5.0
문자형string따옴표 안의 문자열abcd, abc123a=’abcd’
논리형boolean참 or 거짓True, Falsea=True

먼저 문자형은 위 표에서 선언 예시와 같이 따옴표로 감싸서 문자임을 알려주는데, 작은따옴표 ‘ ~~ ‘ 큰따옴표 ” ~~ ” 두 가지를 사용할 수 있고 각각을 세번씩 중복해서 쓸 수 있다.

문자형 선언하는 방법들을 예시를 통해 살펴보자.

## 코드입력
a='hello'
b='''hello'''
c="hello"
d="""hello"""
e="hello, it's me."
f='hello, my "world" '
print(a,b,c,d)
print(e,f)

## 실행결과
hello hello hello hello
hello, it's me. hello, my "world" 

이렇게 작은따옴표와 큰따옴표를 이용해서 문자열을 선언할 수 있고, 작은 따옴표 안에 큰따옴표를, 큰따옴표 안에 작은따옴표를 포함한 문자열도 만들 수 있다. 위쪽의 변수 선언내용과 아래쪽의 print 결과물을 비교해보면 문자형 변수가 어떻게 값이 지정되었는지 알 수 있다.

수치형은 정수로만 된 int와 소수점 아래 정보를 같이 가지는 float으로 나뉜다. 변수를 선언할 때 소수점을 포함하면 float type의 실수형 변수가 되고, 정수 부분만으로 입력하면 int type의 정수형 변수가 되는 것이다. 이렇게 입력과 동시에 변수의 타입이 결정되는 것을 dynamic typing 이라고 한다.

## 코드입력
int_a=2
float_a=2.0
str_a='2.0'

print(int_a)
print(float_a)
print(str_a)

## 실행결과
2
2.0
2.0

위 예시에서 보이듯 숫자도 따옴표 안에 넣어서 지정하면 마치 문자처럼 값을 만들 수 있다. str_a에 넣은 2.0은 숫자가 아니라 2.0이라는 텍스트 문자열이다.

마지막으로 논리형은 해당 변수가 참 또는 거짓을 판명하는 1 or 0의 값만 갖도록 하는 것이다. 

변수 타입 확인과 변환

이것저것 변수들을 만들어 놓았는데 이 변수가 어떤 타입인지 확인하고 싶을때가 있다. 그럴때는 type 명령어를 이용해서 변수의 타입을 확인할 수 있다.

파이썬 변수 타입 확인

type(a)를 실행하면 a의 type인 int가 출력된다.

파이썬 변수 타입 변환

타입을 일시적으로 바꾸고 싶다면 이렇게 변수를 다른 자료형 타입이름으로 지정해주면 형태가 바뀐다. a는 1만 넣어서 원래 int 타입이었으나 float(a) 라고 지정함으로써 float(a)=1.0 의 실수형 자료가 된 것이다. 이 때 a 자체가 바뀐 것이 아니라 a를 이용해서 float 형태로 출력만 해준 것 뿐이다.

이런 식으로 int, float, str, bool 함수를 이용해서 변수를 각각의 자료형으로 타입변환하여 쓸 수 있다.

a=1
b=2.0
a+b

3.0

정수형과 실수형 변수를 연산하면 실수형으로 결과값이 나온다.

타입 다를때 연산시 에러메세지

하지만 이렇게 수치형과 문자형을 연산해버리면 타입 에러가 발생한다. 이런 경우에 전부 수치형으로 만들던지 전부 문자형으로 만들던지 해서 연산을 해주어야 한다.

여러가지 파이썬 변수 자료형 타입 변환에 대한 테스트 결과이다.

## 정수형, 실수형, 문자형, 불리언을 정수형으로 변환

## 각 자료형을 int 정수형으로 변환

#1 int(int) : int→int
print("#1 int(5)=",int(5))

#2 int(float) : float→int
print("#2 int(5.0)=",int(5.0))

#3 int(str) : str→int
print("#3 int('5')=",int('5'))

#4 int(bool) : bool→int
print("#4 int(True)=",int(True))


## 실행 결과
#1 int(5)= 5
#2 int(5.0)= 5
#3 int('5')= 5
#4 int(True)= 1

## 정수형, 실수형, 문자형, 불리언을 실수형으로 변환

## 각 자료형을 float 실수형으로 변환

#5 float(int) : int→float
print("#5 float(5)=",float(5))

#6 float(float) : float→float
print("#6 float(5.0)=",float(5.0))

#7 float(str) : str→float
print("#7 float('5')=",float('5'))

#8 float(bool) : bool→float
print("#8 float(True)=",float(True))


## 실행 결과
#5 float(5)= 5.0
#6 float(5.0)= 5.0
#7 float('5')= 5.0
#8 float(True)= 1.0

## 정수형, 실수형, 문자형, 불리언을 문자형으로 변환

## 각 자료형을 str 문자형으로 변환

#9 str(int) : int→str
print("#9 str(5)=",str(5))

#10 str(float) : float→str
print("#10 str(5.0)=",str(5.0))

#11 str(str) : str→str
print("#11 str('5')=",str('5'))

#12 str(bool) : bool→str
print("#12 str(True)=",str(True))


## 실행 결과
#9 str(5)= 5
#10 str(5.0)= 5.0
#11 str('5')= 5
#12 str(True)= True

## 정수형, 실수형, 문자형, 불리언을 불리언으로 변환

## 각 자료형을 bool 불리언으로 변환

#13 bool(int) : int→bool
print("#13 bool(5)=",bool(5))

#14 bool(float) : float→bool
print("#14 bool(5.0)=",bool(5.0))

#15 bool(str) : str→bool
print("#15 bool('5')=",bool('5'))

#16 bool(bool) : bool→bool
print("#16 bool(True)=",bool(True))


## 실행 결과
#13 bool(5)= True
#14 bool(5.0)= True
#15 bool('5')= True
#16 bool(True)= True

예시를 5로만 넣어서 모두 변환이 되었는데 간혹 문자를 수치형으로 변경하려고 한다던지 하면 에러가 날 수도 있다. 또 위 테스트들에서 불리언 타입으로 변경시 0만 아니면 다 True라고 찍히는 것을 볼 수 있다. 반대로 불리언 True는 수치형으로는 1로 변환된다.