이번 강좌의 주제는 변수입니다. 변수는 프로그램의 개념 중에서 가장 기초적이면서도 가장 중요한 개념입니다. 변수란 데이터를 저장할 수 있는 메모리 공간을 말하며, 이 메모리 공간 즉 변수에는 변수안에 어떤 데이터가 저장되어 있는지 알기 쉽도록 이름이 붙여집니다. 프로그램을 만들다보면 같은 데이터를 여러 번 사용하는 경우가 많은데, 데이터를 매 번 직접 대입하여 사용하는 것보다는 변수라는 메모리 공간에 데이터를 저장해 놓고 필요할 때 메모리 공간에 저장해 놓은 데이터를 참조하여 사용하는 것이 더 효과적이고, 더 유연한 프로그램을 만들 수 있기 때문에 변수를 사용하는 것입니다. 그리고 이 메모리 공간에 자신과 다른 개발자들이 이해하기 쉬운 이름을 붙이고 그 이름을 통해서 참조를 하는 것입니다. 프로그램을 처음 시작하시는 분들은 이해가 잘 안되실테니 조금 더 쉽게 설명을 드리겠습니다.
엑셀을 이용해서 햄버거의 가격을 계산한다고 했을 때, 좋지 않은 방법이지만 계산을 할 때마다 수식에 햄버거 가격을 직접 대입해서 계산을 할 수도 있습니다. 하지만 계산을 해야하는 아이템이 많아지고 자주 가격을 변경해야 한다면, 이렇게 직접 데이터를 입력하는 것은 효율적이지도 못하며 실수로 잘 못된 데이터를 대입하는 경우가 생기게 마련입니다. 이런 문제는 이렇게 C2에 저장된 데이터를 참조하면 해결할 수가 있습니다. 이렇게 하나의 쎌에 저장된 데이터를 참조하면 가격이 변경되어도 참조되고있는 데이터 하나만 변경하면 이 데이터를 참조하고 있는 데이터가 모두 자동으로 변경 되어 더 효과적인 데이터 관리를 할 수 있고, 잘 못된 데이터의 입력도 막을 수 있습니다. 그런데 이 방법 또한 문제가 있는데, 만약에 메뉴의 종류가 수십개로 늘어난다면 모든 메뉴에 대해서 수십개의 쎌의 주소를 기억하기는 불가능하게 됩니다. 이 문제는 셀에 메뉴이름과 같은 이름을 붙여서 사용을 하면 해결을 할 수 있습니다. 이 방법을 사용하면 굳이 쎌 주소를 기억하지 않고도 쎌에 저장된 데이터를 참조할 수 있게 됩니다. 지금 보여드린 예는 프로그램에서 변수를 사용하는 개념과 상당히 비슷합니다. 햄버거 가격이 저장된 셀을 메모리 공간, 즉 변수라고 보시면 되고 셀에 붙여진 이름을 변수의 이름이라고 생각하시면 됩니다.
실제 프로그램에서는 다음과 같은 코드를 사용하여 변수에 데이터를 저장하는데, 왼쪽의 age는 데이터가 저장될 변수이고, 오른쪽의 25는 변수에 저장될 데이터입니다. 그리고 가운데 이퀄싸인은 할당 연산자 또는 대입 연산자라고 부르며 수학의 이퀄싸인과 같이 age와 25가 같다는 뜻이 아니라 25를 age라는 변수안에 할당하라는 의미를 가지고 있습니다. 그림과 같이 메모리 블럭들이 있다고 했을때, age = 25라는 코드를 파이썬에게 전달하면 25를 한 메모리 블럭에 저장을 합니다. 그런데 25라는 데이터를 다시 사용하고 싶을때 0x00000007과 같은 외우기 힘들고 복잡한 메모리 주소를 사용하여 참조하는 것이 아니라 age라는 기억하기 쉬운 이름을 메모리 주소에 꼬리표처럼 붙여놓고, 이 이름을 사용하여 25를 참조하는 것입니다.
파이참에서 변수를 사용하는 간단한 예를 몇가지 보여드리도록 하겠습니다. 조금 전에 설명해 드린 것과 같이 age = 25라는 코드를 입력하고 프린트 함수로 age의 값을 확인하면 25가 출력 되는 것을 볼 수 있습니다.
이번에는 햄버거의 가격을 계산하는 간단한 파이썬 프로그램을 보도록 하겠습니다. 조금전에 보여드린 엑셀의 예와 똑같은 기능을 하는 파이썬 프로그램입니다. 실행을 해 보도록 하겠습니다. 하지만 이렇게 변수를 사용하지 않는다면 매번 햄버거의 가격을 계산할 때마다 하나 하나 가격을 입력해 주어야 하며, 가격을 1000원에서 1100원으로 변경해야 한다면 햄버거의 가격이 사용된 모든 곳을 변경해야 합니다. 이런식으로 프로그램을 만들면 코딩 시간도 많이 늘어날 뿐 아니라 데이터를 변경할 때 실수로 누락된 부분이 생기고 그로 인해서 잘못된 결과값을 리턴하게 됩니다. 그리고 이런 에러는 신텍스 에러와는 틀리게 디버깅을 하는데 시간도 많이 걸립니다. 조금 전에 말씀 드린것과 같이 이런 문제를 해결하기 위해서 변수를 사용하여야 합니다. 이 코드를 수정하여 변수를 사용해 보겠습니다. 먼저 변수를 정의하고 직접 입력했던 숫자를 변수 이름으로 대체를 해보겠습니다. 코드를 실행해 보겠습니다. 같은 결과 값이 나오는 것을 알 수 있습니다. 이렇게 변수를 사용하면 가격을 변경해야 할 경우에도 변수안에 저장된 값만 변경하여 변수값을 참조하고 있는 모든 곳의 값을 동시에 변경할 수가 있는겁니다. 만약에 15퍼센트 세일을 해야 한다면 기존의 값에 간단히 0.85를 곱해서 세일 가격을 계산할 수가 있습니다.
변수를 사용하는 또 다른 좋은 예로는 유저와 의사 소통을 하는 인터엑티브 프로그램을 만들 때입니다.
이 프로그램은 유저의 이름과 나이를 입력받아 변수에 저장한 후 변수에 저장된 데이터를 출력하는 간단한 프로그램입니다. 실행하여 보겠습니다.
이 밖에도 데이터베이스에서 가져온 데이터를 변수에 저장하고 다시 참조하여 같은 데이터베이스 쿼리의 반복을 줄여 데이터베이스와 네트워크의 부하를 적게해주는 역할도 합니다.
변수의 이름을 짓기 위해서는 일정한 규칙을 따라야 합니다. 이 규칙들은 파이썬뿐만 아니라 모든 프로그램 언어에 적용되는 규칙입니다.
첫 번째 규칙입니다. 변수의 이름은 스페이스를 포함할 수 없습니다. 만약 여러개의 단어를 변수 이름으로 사용하시고 싶으시면 언더스코어로 연결하거나 스페이스 없이 모든 단어를 붙여서 사용하시면 됩니다.
두 번째 규칙입니다. 변수의 이름은 숫자, 알파벳 그리고 언더스코어를 제외한 특수문자를 포함할 수 없습니다.
세 번째 규칙입니다. 변수의 이름은 숫자로 시작할 수 없습니다. 변수 이름의 첫번째 글자로는 알파벳이나 언더스코만 사용할 수 있습니다.
네 번째 규칙입니다. 파이썬 내부에서 사용하는 키워드를 변수이름으로 사용할 수가 없습니다. 파이썬에서 사용되는 키워드는 다음과 같은 것들이 있습니다.
다섯 번째 규칙입니다. 변수의 이름은 대문자와 소문자를 구별합니다. 즉 대문자 엑스와 소문자 엑스는 다른 변수인 것입니다.
이번에는 변수 이름의 좋은 예와 나쁜 예를 보도록 하겠습니다. 네이밍 예제 1의 나쁜 예는 모두 신택스 에러를 발생 시킵니다.
첫번째 예는 변수 이름으로 두 단어 이상을 사용할 경우 입니다. 모든 단어를 언더스코어로 연결하거나 중간의 모든 스페이스를 없애야 합니다. 두번째 예는 언더스코어 이외의 하이픈과 같은 특수문자는 사용할 수 없다는 것을 보여주고 있습니다. 세번째 예는 변수이름을 숫자로 시작할 수 없다는 것을 보여주고 있습니다. 마지막 예는 class와 같은 파이썬이 사용하는 키워드를 변수 이름으로 사용할 수 없다는 것을 보여주고 있습니다.
네이밍 예제 2의 나쁜 예는 에러는 발생시키지는 않지만 PEP8이라는 파이썬 스타일 가이드에 어긋나는 형식이므로 사용하지 않는 것이 좋습니다.
첫번째 나쁜 예를 보시면 변수 이름의 첫글자에 대문자를 사용하였는데 클래스 이름이나 컨스턴트 이외의 일반 변수의 이름이나 함수의 이름은 소문자로 시작해야 합니다.
두번째 나쁜 예를 보시면 세개의 단어를 연결하여 두번째와 세번째 단어의 첫 글짜를 대문자로 하였습니다. 이런 형식을 케멀케이스라고 하는데, 파이썬에서는 클래스 이름 이외에는 케멀 케이스를 사용하지 않습니다.
세번째는 상수의 예인데, 변수와는 달리 항상 같은 값을 갖는 상수의 이름은 모두 대문자와 언더스코어만을 사용하여야 합니다.
네번째의 예는 타입핑을 더 많이 하는게 조금 귀찮아도 변수에 어떤 데이터가 저장되어 있는지를 알 수 있도록 알기 쉬운 이름을 지어야 한다는 것을 보여주고 있습니다. 코드는 자기뿐만 아니라 같은 프로젝트의 다른 개발자와 공유를 해야할 때가 많으므로 다른 개발자도 코드를 쉽게 이해할 수 있도록 의미를 알기 쉬운 변수 이름을 지어야 합니다. 사실 다른 개발자 뿐만 아니라, 코드를 만든 자기 자신도 몇달뒤에 자신의 코드를 보고 금방 이해하지 못 할때가 많습니다. 마지막 예에서는 int라는 파이썬의 스탠다드 데이터 타입의 이름을 사용하였는데, int, float, str등과 같은 스탠다드 데이터 타입의 이름이나 스탠다드 모듈, 함수의 이름등의 사용은 피해야 합니다.
마지막으로 변수에는 어떤 데이터를 저장할 수 있는지 알아보고 이번 강좌를 마치겠습니다.
변수에는 정수와 소수점을 가진 실수를 저장할 수가 있습니다. 그리고 텍스트와 같은 문자열을 저장할 수가 있는데 문자열을 사용할 때는 정수나 실수와는 달리 싱글 코테이션이나 더블 코테이션으로 묶어서 사용하여야 합니다. 그리고 불리언, 리스트, 튜플, 사전, 클래스 인스턴스, 함수까지도 변수에 저장할 수가있는데 파이썬에서는 거의 모든 오브젝트를 변수에 저장할 수가 있습니다.
여러분들도 변수를 잘 이용하셔서 불필요한 반복을 줄이고, 유연하고도 좋은 퍼포먼스를 내는 프로그램을 만드시길 바랍니다. 이번 강좌는 여기서 마치도록 하겠습니다. 구독과 좋아요 버튼을 많이 눌러 주시기 바랍니다. 감사합니다.