지난번에 문자열 자료형의 기본적인 개념에 대해 살펴보았다면 이번에는 문자열의 각 문자를 다루는 인덱싱, 슬라이싱 등에 대해 살펴보겠습니다. 또 문자열의 길이를 반환하는 함수 len()에 대해서도 알아보아요.
문자열의 인덱스
문자열은 말 그대로 문자로 이루어진 나열이라는 의미를 가집니다. 그래서 하나의 자료형처럼 보이지만, 실제로는 여러 개의 문자가 순서를 가지고 나열되어 문자열 자료를 구성하고 있는 것이지요. 문자열에 포함된 문자는 각각 그 순서대로 번호를 갖게 됩니다. 이를 인덱스(우리말로 색인)이라고 합니다. name이라는 변수를 선언하고 'potato'라는 문자열을 할당해 봅시다. 이 문자열의 인덱스를 확인해 보고 싶다면, 변수의 이름과 인덱스 번호를 함께 호출하면 됩니다. name 변수에 할당된 문자이므로 name[인덱스 번호]를 입력해 보는 것입니다.
확인해 보면 알겠지만, 제일 첫 글자의 인덱스는 1이 아닙니다. 제일 첫 글자의 인덱스는 0부터 시작하는데 이를 꼭 기억해 두세요. 두 번째 글자의 인덱스는 1, 세 번째 글자는 2가 됩니다. 그렇기 때문에 여섯 글자이지만 마지막 글자의 인덱스는 5가 됩니다. 6번 인덱스에는 문자가 없기 때문에 6번 인덱스를 호출하면 에러가 납니다.
- 인덱스는 0부터 시작한다.
- 마지막 인덱스는 글자수에서 하나 작은 수이다.
인덱스는 음수로도 확인할 수 있는데, 음수는 거꾸로 셉니다. 그러나, 음수인 경우에도 주의할 것이 있어요. 양수 인덱스는 0부터 시작하지만, 음수인 0은 없기 때문에 음수 인덱스는 -1부터 셀 수 있습니다. 그리고 양수 인덱스가 첫 번째 글자부터 시작했던 것에 반해, 음수 인덱스는 마지막 글자부터 인덱스가 붙어요. 더 작은 숫자가 앞 문자의 인덱스가 됩니다. 즉, 가장 마지막 글자인 o가 5번 인덱스인 동시에 -1번 인덱스이고, 첫 번째 글자인 p는 0번 인덱스인 동시에 -6번 인덱스가 됩니다.
문자열의 슬라이싱
슬라이싱은 자른다는 뜻입니다. 문자열을 자르기 위해서는 자르고자 하는 부분이 어디부터 어디까지인지 알려주어야 해요. 그러려면 문자열 내의 문자 위치를 표현한느 인덱스를 알고 있어야 합니다. 슬라이싱은 다음과 같은 명령어로 실행합니다.
문자열[a:b]
a와 b에는 숫자가 들어가는데, a가 슬라이싱의 '어디부터'를 의미하고, b가 슬라이싱의 '어디까지'를 의미합니다. 그런데, 주의할 점이 있습니다. 실제로 슬라이싱이 일어나는 것은 a ~ b번 인덱스까지의 문자를 포함하는 것이 아니라, a ~ (b-1)번 인덱스까지의 문자만 포함합니다. 아래 예를 보겠습니다.
[0:2]로 슬라이싱을 한 결과를 보면 'po'만 출력된 것을 볼 수 있습니다. 0번부터 1번까지만 슬라이싱 된 것입니다. 음수의 경우도 마찬가지입니다. 음수의 경우 앞의 숫자가 절대값은 크지만 더 작은 숫자라는 것을 기억하세요. (-6이 -1보다 작은 수입니다.) 인덱스 표를 조금 달리하여 아래와 같이 살펴보면 슬라이싱이 이해될 것 같습니다.
문자열의 특정 부분만 바꾸려고 하면 어떻게 해야 할까요. 해보시면 알게 되지만, 특정 인덱스 위치의 문자를 새로운 문자로 바꾸는 것은 단순히 변수에 값을 할당하듯이 수행할 수 없습니다. 특정 문자를 바꾸는 것은 새로운 문자열을 만드는 것이에요. 그래서 다음과 같이 슬라이싱을 활용하여 새로운 변수에 변경된 문자열을 할당할 수 있습니다.
문자열 길이 함수 len()
len()함수를 활용하면 문자열의 길이를 알 수 있습니다. 문자열의 길이라는 것은 문자열에 포함된 문자의 개수를 말하는 것이겠죠. 주민등록번호 13자리를 확인하거나, 비밀번호의 길이가 허용 범위 안에 있는지 확인하는 경우 등 다양한 방법으로 활용할 수 있습니다.
마치며
문자열을 다양하게 활용하는 명령어들에 대해 알아보았습니다. 인덱스라는 개념은 앞으로도 종종 사용될 텐데, 첫 번째 자료의 인덱스는 1이 아니라 0부터 시작된다는 것을 항상 기억하시면 앞으로 배워가는 개념에서도 도움이 될 것입니다.