Welcome to the Matrix

008. 파이썬 문자열 연산자로 문자열 다루기 본문

Python/PythonBasic

008. 파이썬 문자열 연산자로 문자열 다루기

haru.keiko 2020. 12. 24. 23:59

이번에는 '파이썬 문자열 연산자'를 이용해 문자열을 다루는 방법에 대해 알아보겠습니다. 

파이썬 문자열 연산자 썸네일

앞선 포스트에서 숫자형 자료형에 대해서 다룬 바 있는데요, 숫자형 자료형은 '산술 연산자', '나누기 연산자', '나머지 연산자', 그리고 '제곱 연산자'를 기본 연산자로 가지고 있었습니다. 

 

그럼, 문자열을 이용해 할 수 있는 것(연산)들은 어떤 것이 있을까요?

 

그전에 먼저 '연산자'라는 게 것이 무엇인지 알아볼 필요가 있습니다. 

'연산자'라는 것은 특정 '자료형'에 종속된 것으로 그 '자료형이 취해야만 하는 행동에 대한 정의'입니다. 

예를 들어, 숫자라는 것은 기본적으로 셈을 할 수 있어야 합니다. 셈을 할 수 없는 숫자 자체만으로는 아무런 의미가 없는 것이죠. 그렇기 때문에 숫자라는 자료형에는 사칙연산과 같은 연산자가 정의되어야 의미가 있는 것입니다. 

다른 예로 집합이라는 자료형을 생각해 보면, 집합이라는 것은 사칙연산이 정의되어 있지 않습니다. 집합에서의 사칙연산은 의미가 없기 때문입니다. 대신, 집합은 '합집합', '교집합', '차집합'이라는 연산자가 필요하고 의미가 있는 것이죠. 

 

물론 숫자 자료형에는 '합집합'과 같은 집합 자료형의 연산자는 의미 없다는 건 말하지 않아도 다들 아실 거예요. 

연산자는 특정 자료형에 종속된 것으로 그 자료형이 취해야만 하는 행동에 대한 정의이다. 

 

프로그램의 세계에서 자료형을 정의할 때, 보통 '데이터' + '연산'이라고 말을 하는데요, 이는 자료형과 연산자에 대한 정의를 이해하면 바로 감을 잡을 수 있을 거예요. 

자료형 = 데이터 + 연산

 

일단 기본적인 선행 지식은 여기까지 하고, 본격적인 문자열 연산에 대해 알아보아요~

 

문자열 연산자

프로그램의 세계에서는 문자열은 참 다루기 까다로운 녀석입니다. 프로그래밍 언어가 생겨난 이래로 문자열 처리라는 것은 항상 프로그래머들의 골머리를 썩혀왔습니다. 실제 C언어의 경우도 문자열을 다루는 것이 만만치 않습니다. 

하지만, 파이썬은 문자열에 대해 기존의 대부분의 언어에서 제공하지 않음직한 연산자를 적용해 문자열을 처리합니다. 

 

문자열 연결('+')

파이썬은 특이하게도 '+' 연산자를 사용해 문자열끼리 더할 수 있습니다. 

엥? 수학도 아니고 '+'를 문자열에 사용한다고??

네! 그렇습니다. ㅎㅎ

그럼 문자열끼리 더한다는 것은 어떤 의미일까요?

예를 들어, '안녕' + '하세요'라는 것은 어떻게 동작할까요??

 

어렵지 않아요~ 파이썬을 공부하다가 궁금할 땐 항상 IDLE를 열어서 확인해 보세요. 

파이썬에서 더하기 연산자(+)를 이용한 문자열 연결 연산

어머나.. 

두 개의 문자열이 하나의 문자열로 연결되어 버렸네요!!!

 

맞습니다. 

파이썬에서 문자열을 서로 더하는 연산(+)은 문자열을 연결하는 역할을 하는 연산자입니다. 

두 개가 아닌 여러 개의 문자열도 연결이 될까요? 

확인 들어갑니다~!!

파이썬 여러개의 문자열을 대상으로 문자열 연결 연산

생각하는 대로 이루어집니다. 

 

어떻게 이런 게 가능할까요??

지금 시점에선 그건 크게 중요한 문제는 아닙니다. 일단 '아~! 이런 게 있구나.'를 아는 게 중요합니다. 

 

문자열을 더하면 문자열을 서로 연결한다는 아이디어는 어찌 생각해보면 지극히 상식적인 이야기입니다.

달리 말하면, 파이썬은 지극히 상식적인 프로그래밍 언어인 것이죠. ㅎㅎ

 

그럼 '커피 ' + 2+ '잔 주세요~'와 같은 것은 어떻게 될까요?

'커피 2잔 주세요~'로 문자열이 연결될까요?

타입이 다른 자료형간의 문자열 연결(문자열, 숫자)은 오류를 발생시킴

 

앞서 '문자열 자료형' 포스트에서 이야기한 것처럼, 따옴표로 둘러싸인 것만이 문자열입니다. 2는 따옴표로 둘러싸인 것이 아니기 때문에 숫자 자료형으로 인식됩니다.

2를 문자열 '2'로 수정한 뒤 '+' 연산을 하면, 정상적으로 문자열이 연결되는 것을 볼 수 있습니다.

문자열에서 더하기 연산(+)을 통해 문자열들을 하나의 문자열로 연결할 수 있습니다.

 

자료형에서 연산자는 동일한 자료형 내에서만 사용을 해야 합니다. 그렇지 않으면 자료형이 달라서 연산을 할 수 없다는 TypeError 오류를 뿜어냅니다!! 

참고로, 파이썬 대화형 인터프리터에서는 print() 함수를 사용하지 않더라도 내용을 화면에 출력할 수 있습니다. 

 

문자열 반복 연산('*')

앞서 우리는 '+'를 통해 여러 개의 문자열을 서로 연결하는 아주 신기한 장면을 목격했습니다. 

이제, 또 다른 신기한 마술을 소개하려 합니다. 

바로 문자열 반복 연산!!

 

문자열 반복 연산은 곱하기 연산자(*)를 이용해서 할 수 있습니다. 

파이선의 곱하기 연산자(*)를 이용한 문자열 반복 연산

 

더하기 연산자(+)는 더하기로 연결된 문자열들을 연결합니다. 그리고, 곱하기 연산자(*)는 곱하는 수만큼 문자열을 반복합니다. 

문자열에서 곱하기 연산(*)을 통해 문자열을 원하는 만큼 반복할 수 있습니다.

 

문자열 인덱싱 연산자('[', ']')

문자열을 다루다 보면, 문자열 내의 특정 위치의 문자를 가져와 사용할 경우가 있습니다. 문자열 내의 특정 문자를 가리키는 것을 인덱싱이라고 합니다. 그리고 '문자열 인덱싱 연산자'는 문자열에서 원하는 위치의 문자를 선택하는 연산자입니다.

문자열 인덱싱을 하기 위해서는 대괄호('[', ']')를 사용하는데, 대괄호 안에 선택하고자 하는 '문자열의 인덱스(위치)'를 '숫자'로 입력합니다. 

 

그럼 일단 '인덱스'가 뭔지부터 알아야 할 텐데요..

인덱스라는 것은 어떠한 자료가 순차적으로 나열되어 있을 때, 

음.. 다시 말하면 순차적으로 나열된 자료가 있을 때라고 하는 게 더 어울릴 것 같네요. 

이런 자료의 순서를 말하는 것입니다. 

만약 문자열 'Hello'가 있다면, 이 문자열은 H, e, l, l, o라는 각 문자의 순서로 되어 있는 문자열이 되는 것이죠.. 

말이 너무 어렵나요? ^^

 

대부분의 프로그래밍 언어에서 어떠한 자료형의 인덱스(위치)를 표현할 때, 0부터 시작합니다. 이를 제로 베이스 인덱스(Zero based Index)라고 합니다. 컴퓨터의 세계에서는 0, 1, 2, 3,... 이렇게 위치를 표현합니다. 

이유를 설명하자면, 컴퓨터 시스템의 깊은 부분까지 들어가야 하기 때문에.. 지금은 아~! 그렇구나 하고 넘어가면 되겠습니다. 아쉽지만, 더 자세한 내용은 나중에 더 깊이 알아보도록 해요~ 

 

제로 베이스 인덱스에 대해 살짝 맛을 보자면, 이렇습니다. 

앞서 예를 든 문자 데이터가 순차적으로 나열된 문자열 'Hello'라는 게 있을 경우, 이 문자열의 인덱스는 0번 : H, 1번 : e, 2번 : l, 3번 : l, 4번 : o 가 됩니다. 순서를 셀 때 1부터 세는 것이 아니라 0부터 센다는 말이지요. 

 

그리고 각 문자를 가져와야(선택) 할 필요가 있을 때, 문자열의 인덱스 연산자를 사용하는 것입니다. 

파이썬 문자열 인덱싱 연산

 

이해가 되시나요?

안된다면, 일단 그렇구나 하고 인지하고 넘어가야 합니다. 이런 걸 어디에 써먹기에 이렇게 대충 그렇다고 넘어가야 하나라고 생각할 수 있습니다. 

네! 맞아요. 하지만, 생각해보면, 우리가 초등학교 때 '구구단'을 배울 때 그 원리를 이해하기보다는 그런 거구나 하고 넘어갔던 것과 비슷하다고 생각할 수 있습니다. 구구단의 원리를 이해했던 친구들이 얼마나 있을까요?

 

제가 중/고등학교 때 가장 고민했던 문제 중 하나는 영어에서 "왜 To부정사에는 To가 붙을까?"였습니다.

하지만, 누구도 설명을 못하더라고요. 단지 "To부정사라서 To가 붙는 거다라"는 말만 들었네요..

전 결과보다 원인을 알고 싶었는데.. ^^

뭐 그렇다고요~

 

일단 인덱싱을 알고 있으면, 지금 사용하는 문자열뿐 아니라 나중에 나오게 될 순서를 가진 데이터 모음들(List, Tuple,.. )에서도 인덱싱이 동일하게 적용됩니다. 리스트나 튜플 등에서도 다시 다룰 거예요.

인덱싱은 '순서가 있는 데이터 모임 자료형'에서 특정 데이터의 위치(인덱스)를 선택하는 것입니다. 
인덱싱 연산('[', ']')을 이용해서 문자열 내의 특정 위치의 문자를 선택할 수 있습니다. 

 

문자열 슬라이싱 연산자('[:]')

문자열에서 인덱싱 연산자는 문자열 내의 위치를 이용해서 특정 한 문자를 선택하는 용도로 사용됩니다. 

하지만, 슬라이싱 연산자는 문자열 내의 범위를 지정해 여러 문자열을 선택하는 용도로 사용됩니다. 

 

먼저, 간단한 예를 살펴봅시다.

파이선 문자열 슬라이싱 연산

 

문자열 슬라이싱은 대괄호('[, ]')와 콜론(':')을 사용해 범위를 지정할 수 있습니다. 그리고, 문자열에서 범위에 해당하는 부분을 선택합니다.

여기서 주의해야 할 점이 있습니다. 

슬라이싱 할 내용이 [0:3]이라고 할 때, 그 범위는 0~2가 됩니다. 즉, 마지막 3 이전까지를 범위로 합니다. 

 

예를 들어, 'Hello'라는 문자열에서 [0:3]이라고 슬라이싱을 하게 되면, 문자열의 0번째부터 3번째 바로 전의 내용('Hel')을 선택하게 되는 것이죠. 

그리고 특별하게 [:], [:3], [1:]과 같이 슬라이싱의 내용을 비우는 경우가 있습니다. 이 경우는 비워진 슬라이싱의 내용을 기본 값으로 채우게 됩니다. 

[:]의 경우, 기본값으로 시작 값을 0으로 끝 값을 문자열의 길이로 채웁니다. 즉, [0:5]와 동일한 슬라이싱으로 문자열 전체의 내용을 선택하는 것과 같은 결과를 얻게 됩니다. 

[:3]의 경우, 기본값으로 시작 값을 0으로 채웁니다. 즉, [0:3]과 동일한 슬라이싱으로 'Hello' 문자열에서 'Hel'을 선택하는 것과 같은 결과를 얻게 됩니다. 

[1:]의 경우, 끝 값을 문자열의 길이(5)로 채웁니다. 즉, [1:5]와 동일한 슬라이싱으로 'Hello' 문자열에서 'ello'을 선택하는 것과 같은 결과를 얻게 됩니다. 

슬라이싱 연산자는 문자열 내의 범위를 지정해 여러 문자열을 선택하는 용도로 사용됩니다. 

 

슬라이싱은 파이썬에서 상당히 중요한 개념으로 자주 사용됩니다. 다른 언어를 이미 익힌 상태라도 생소할 수 있는 개념이기 때문에, 이해가 잘 되지 않는다면 IDLE를 열어서 몇 번이고 익혀야 할 것입니다.