파이썬 상수 | 파이썬 독학 2-2

지난 포스팅에서는 파이썬의 변수에 대하여 알아봤습니다.

여기서는 파이썬의 상수에 대해서 알아보겠습니다.

1. 파이썬 상수란 무엇인가?

상수란 무엇일까요? 상수(常數)의 한자어는 항상 같은 수라는 뜻입니다.

변수는 변하는 수이고 상수는 변하지 않는 수니까 웬지 균형이 잡힌 것 같은데요 (^▽^)

파이썬을 코딩하는데 왜 변하지 않는 숫자가 필요할까요?

이 세상에는 변하지 않는 숫자가 있습니다. 가장 대표적인 것이 원의 둘레를 구할때 쓰는 파이(원주율)인데요. 이런 숫자를 파이썬에서 사용할 때 상수로 만들어서 사용합니다.

파이썬에는 상수가 없다고요?

사실 파이썬의 기본 문법에는 상수가 없습니다.

값을 바꿀 수 없어야 상수인데 값이 바뀝니다.

파이썬에서 상수를 만들기 위해서 특별한 문법을 사용해야 하지만 복잡합니다.

따라서 파이썬 상수를 사용하는 규칙을 만들어서 사용합니다.

>>> PI = 3.14
>>> GRAVITY = 9.8
>>> PI
3.14
>>> GRAVITY
9.8

PI 에 3.14를 GRAVITY(중력가속도)에 9.8을 할당했습니다. 결국은 변수와 같기 때문에 이 값들은 바꿀 수가 있습니다. 대신에 상수라는 개념을 갖도록 모두 대문자로 작성했습니다. 파이썬에서 대문자의 이름을 갖는 변수들은 프로그래머가 상수로 취급하도록 합니다.

쉽게 말해 대문자의 변수는 값을 바꾸지 않으면 상수라는 규칙을 만듭니다.

상수가 아닌데 상수라니 약간 억지같기도 합니다. 그런데 이 상수를 대문자로 사용하는 것은 프로그래머들의 오랜 관습입니다.

C언어에서 전통적으로 이 방법을 사용하고 있습니다. 상수의 이름은 대문자만 사용해서 짓습니다.

프로그램의 앞부분에 상수를 모아두는 것도 효과적인 방법입니다. 상수를 모아서 한곳에서 초기화를 합니다. 그러면 정해진 지역이 아닌 곳에서 상수에 값을 대입하는 경우 잡아내기 쉬워집니다.

컴퓨터에서 상수의 정확한 의미


프로그래밍에 있어서 상수의 정확한 의미는 뭘까요?

컴퓨터의 프로그램은 하드디스크에 저장되어 있습니다. 프로그램을 실행시키면 메모리에 올라가서 작동을 하는데 이 시간을 런타임이라고 합니다.

우리말로는 ‘실행시간’ 인데 상수는 실행시간에 변하지 않는 수를 말합니다.

반대로 실행시간에 변하는 수를 변수라고 합니다.

파이썬 상수는 파이썬의 실행시간에 변하지 않는 수입니다.

2. 리터럴 상수의 종류

파이썬 상수에는 리터럴 상수도 있습니다.

여기서 리터럴이라는 생소한 단어가 나왔습니다. 컴퓨터 코딩을 잘하기 위해서는 영어공부를 좀 해야 하는데요. 대부분 뜻이 명확한 기술적인 용어기 때문에 조금만 영단어를 공부하면 이해할 수 있습니다.

1) 숫자 리터럴

Literal 의 뜻은 ‘말 그대로’, ‘문자 그대로’ 입니다. 예를 들면 이해가 쉽습니다. 1, 2, 3, 4, 5 … 같은 숫자를 리터럴이라 합니다. 숫자는 파이썬에서 그대로 사용할 수 있죠.

>>> 100
100
>>> 999
999

컴퓨터에서 숫자를 사용하는 것은 당연한 것 처럼 보입니다. 하지만 컴퓨터의 입장은 0과1밖에 이해하지 못하기 때문에 수를 만들어서 사용합니다.

이 주제는 초급의 범위를 다소 벗어나게 되는데요. 파이썬은 별도의 테이블에서 숫자를 가져와서 사용한다는 정도로 이해하면 충분합니다. 그것이 바로 숫자 리터럴입니다.

파이썬에서는 이진법, 8진법, 16진법의 숫자 리터럴도 사용할 수 있습니다. 컴퓨터가 0과1밖에 이해하지 못하는 것은 컴퓨터의 두뇌인 CPU가 이진법을 사용하기 때문입니다.

이진법을 자주 사용하지는 않겠지만 컴퓨터의 사고방식을 이해하는데 도움이 되므로 파이썬에서 진법의 사용법을 적어두겠습니다.

파이썬 진법 사용법
  • 이진법: 숫자 앞에 0b를 붙인다
  • 십진법: 숫자만 쓴다.
  • 8진법: 숫자 앞에 0o를 붙인다.
  • 16진법: 숫자 앞에 0x를 붙인다.

>>> binaryNumber = 0b1111
>>> decimalNumber = 777
>>> octalNumber = 0o777
>>> hexadecimalNumber = 0xFFFF
 
>>> binaryNumber
15
>>> decimalNumber
777
>>> octalNumber
511
>>> hexadecimalNumber
65535

또한 숫자 리터럴에는 정수와 소수가 있습니다. 정수(Integer)는 이미 잘 알고 있는 그 정수입니다. 반면 소수는 좀 다른데요.

컴퓨터 안에서 소수는 특별한 방식으로 저장됩니다. 소수를 메모리에 저장하는 방식을 부동소수점 수 (float point number)라고 합니다. 자세한 원리는 복잡한 계산이 필요합니다만 당장 몰라도 소수를 사용하는데 문제는 없습니다.

단지 파이썬에서 부동소수점 수를 사용하는 것은 정수보다 느리고, 정확도에 한계가 있다는 점을 알고서 사용하면 충분합니다.

>>> salePrice = 9.99
>>> regularPrice = 15.99

부동소수점 수를 사용할 때 아주 큰 수나 작은 수의 표기에 과학적 표기법(scientific notation)을 사용할 수 있습니다. e2 는 10의 2승, en은 10의 n승을 의미합니다. 이렇게 하면 큰 수를 적지 않아도 되서 코드를 읽기가 좋습니다.

>>> myFloatNumber = 1.25e3
>>> myFloatNumber
1250.0
>>> yourFloatNumber = 3.24e-3
>>> yourFloatNumber
0.00324

2) 문자 리터럴

문자 리터럴은 그대로의 문자를 말합니다. “Hello World” 같이 따옴표안에 있는 문자열입니다.

>>> greetings = "Hello Python!"
>>> greetings
'Hello Python!'

컴퓨터는 0과1밖에 이해하지 못한다고 또 말하면 귀에 못이 박히겠네요 (¬_¬) 컴퓨터와 사람간에 사고방식의 차이를 알면 코딩 실력에 많은 도움이 됩니다. 우리가 보는 모든 문자들은 컴퓨터에서는 숫자로 처리됩니다.

예를 들어 A라는 문자는 컴퓨터가 봤을 때 65입니다. 영어 대문자와 소문자의 각 문자에 대응하는 숫자값이 있습니다. 이 관계를 정리한 테이블을 아스키 코드(ASCII CODE)라고 하고 전세계의 컴퓨터에서 사용하고 있습니다.

아스키 코드의 주제는 약간 중급의 내용이기 때문에 여기서는 깊이 설명하지 않습니다만 문자에 숫자가 대응된다는 점은 알고 있어야 합니다.

아래 코드에서 chr 은 숫자를 문자로 ord는 문자를 숫자로 변환하는 명령어입니다.

>>> chr(65)
'A'
>>> ord('A')
65

요약

파이썬 상수에 대하여 알아봤습니다. 상수는 프로그램이 실행되는 동안 항상 같은 값을 가지는 수입니다. 변수와는 반대되는 성질을 갖습니다.

리터럴 상수는 있는 그대로의 값이란 뜻이 있습니다. 이들의 값도 변하지 않기 때문에 상수입니다. 리터럴의 종류는 숫자형과 문자형이 있습니다.

참고 외부문서

03. 변수, 상수 그리고 리터럴 – Python 계단밟기 (wikidocs.net)

파이썬 변수와 상수 리터럴 설명 [Variables, Constants and Literals]

Leave a Comment