문자열(String)의 기본

1. 서론: 텍스트 데이터, 프로그래밍의 또 다른 핵심

우리가 일상생활에서 접하는 정보의 대부분은 텍스트 형태로 이루어져 있습니다. 웹 페이지의 내용, 이메일, 소셜 미디어 게시물, 문서 파일 등 모든 것이 텍스트입니다. 프로그래밍에서도 이러한 텍스트 데이터를 다루는 것은 매우 중요하며, 파이썬은 텍스트 데이터를 다루는 데 있어 강력하고 유연한 기능을 제공합니다. 파이썬에서 텍스트 데이터를 표현하는 가장 기본적인 자료형이 바로 ‘문자열(String)’입니다. 이전 챕터에서 숫자 데이터를 다루는 방법을 배웠으니, 이제 텍스트 데이터를 자유자재로 다루는 문자열의 세계로 들어가 볼 차례입니다. 이 챕터에서는 파이썬에서 문자열을 어떻게 생성하고, 문자열의 각 문자에 접근하는 ‘인덱싱(Indexing)’, 그리고 문자열의 특정 부분을 잘라내는 ‘슬라이싱(Slicing)’ 기법에 대해 깊이 있게 알아보겠습니다. 문자열을 마스터하는 것은 여러분의 파이썬 프로그래밍 능력을 한 단계 더 발전시킬 것입니다.

2. 문자열(String)이란 무엇인가?

문자열은 문자들의 나열, 즉 시퀀스(sequence)입니다. 파이썬에서 문자열은 텍스트 데이터를 표현하는 데 사용되며, 작은따옴표('), 큰따옴표(""), 또는 세 개의 따옴표(''' ''' 또는 """ """)로 감싸서 생성합니다.

2.1. 문자열 생성 방법

어떤 따옴표를 사용하든 결과는 동일합니다. 다만, 문자열 안에 따옴표가 포함될 경우를 대비하여 적절한 따옴표를 선택하는 것이 좋습니다.

# 작은따옴표 사용
string1 = 'Hello, Python!'
print(string1) # 출력: Hello, Python!

# 큰따옴표 사용
string2 = "파이썬은 정말 재미있어요."
print(string2) # 출력: 파이썬은 정말 재미있어요.

# 문자열 안에 작은따옴표가 포함될 경우 큰따옴표 사용
string3 = "I'm a Python programmer."
print(string3) # 출력: I'm a Python programmer.

# 문자열 안에 큰따옴표가 포함될 경우 작은따옴표 사용
string4 = 'He said, "Hello!"'
print(string4) # 출력: He said, "Hello!"

# 여러 줄 문자열 (세 개의 따옴표 사용)
# 세 개의 따옴표는 문자열 내에서 줄 바꿈을 그대로 유지합니다.
multi_line_string = """이것은
여러 줄로
작성된 문자열입니다."""
print(multi_line_string)
# 출력:
# 이것은
# 여러 줄로
# 작성된 문자열입니다.

# 문자열의 자료형 확인
print(type(string1)) # 출력: <class 'str'>

2.2. 이스케이프 문자 (Escape Characters)

문자열 안에 특수한 의미를 가지는 문자를 포함하고 싶을 때 ‘이스케이프 문자’를 사용합니다. 백슬래시(\) 뒤에 특정 문자를 붙여 사용합니다.

이스케이프 문자 설명 예시
\' 작은따옴표 'I\'m happy.'
\" 큰따옴표 "He said, \"Hello!\""
\\ 백슬래시 'C:\\Users\\'
\n 줄 바꿈 'Line1\nLine2'
\t 'Tab\tSpace'
# 이스케이프 문자 사용 예시
print('I\'m a programmer.') # 출력: I'm a programmer.
print("He said, \"Python is great!\"") # 출력: He said, "Python is great!"
print("C:\\Users\\Documents") # 출력: C:\Users\Documents
print("First line.\nSecond line.") # 출력: First line.
                                  # Second line.
print("Name:\tAlice") # 출력: Name:  Alice

3. 문자열 연산하기

숫자처럼 문자열도 연산자를 사용하여 다양한 작업을 수행할 수 있습니다.

3.1. 문자열 연결 (Concatenation, +)

두 개 이상의 문자열을 합칠 때 + 연산자를 사용합니다.

str1 = "Hello"
str2 = "Python"

combined_string = str1 + " " + str2 + "!"
print(combined_string) # 출력: Hello Python!

# 숫자와 문자열은 직접 연결할 수 없습니다. (오류 발생)
# print("Age: " + 20) # TypeError: can only concatenate str (not "int") to str

# 숫자를 문자열로 변환 후 연결
age = 20
print("Age: " + str(age)) # 출력: Age: 20

3.2. 문자열 반복 (Repetition, *)

문자열을 특정 횟수만큼 반복하여 연결할 때 * 연산자를 사용합니다.

repeated_string = "abc" * 3
print(repeated_string) # 출력: abcabcabc

separator = "-" * 20
print(separator) # 출력: --------------------

4. 문자열 인덱싱 (Indexing): 문자에 접근하기

문자열은 문자들의 순서 있는 나열(시퀀스)이므로, 각 문자는 고유한 위치 번호, 즉 ‘인덱스(Index)’를 가집니다. 인덱스를 사용하여 문자열의 특정 문자에 접근할 수 있습니다.

4.1. 양수 인덱싱 (0부터 시작)

가장 왼쪽의 문자부터 0으로 시작하여 1씩 증가하는 인덱스를 사용합니다.

text = "Python"

print(text[0]) # 출력: P (첫 번째 문자)
print(text[1]) # 출력: y
print(text[5]) # 출력: n (마지막 문자)

# 존재하지 않는 인덱스에 접근하면 오류 발생
# print(text[6]) # IndexError: string index out of range

4.2. 음수 인덱싱 (-1부터 시작)

가장 오른쪽의 문자부터 -1로 시작하여 1씩 감소하는 인덱스를 사용합니다. 마지막 문자에 접근할 때 유용합니다.

text = "Python"

print(text[-1]) # 출력: n (마지막 문자)
print(text[-2]) # 출력: o
print(text[-6]) # 출력: P (첫 번째 문자)

5. 문자열 슬라이싱 (Slicing): 부분 문자열 추출하기

슬라이싱은 문자열의 특정 범위(부분)를 잘라내어 새로운 문자열을 만드는 기법입니다. [시작_인덱스:끝_인덱스:단계] 형식을 사용합니다.

text = "Hello, Python!"

5.1. 기본 슬라이싱: [시작_인덱스:끝_인덱스]

  • 시작_인덱스부터 끝_인덱스 - 1까지의 문자를 포함합니다.
  • 끝_인덱스는 포함되지 않습니다.
print(text[0:5])  # 출력: Hello (인덱스 0부터 4까지)
print(text[7:13]) # 출력: Python (인덱스 7부터 12까지)

5.2. 시작 인덱스 또는 끝 인덱스 생략

  • 시작_인덱스를 생략하면 문자열의 처음부터 시작합니다.
  • 끝_인덱스를 생략하면 문자열의 끝까지 포함합니다.
print(text[:5])   # 출력: Hello (처음부터 인덱스 4까지)
print(text[7:])   # 출력: Python! (인덱스 7부터 끝까지)
print(text[:])    # 출력: Hello, Python! (문자열 전체 복사)

5.3. 음수 인덱스를 이용한 슬라이싱

음수 인덱스도 슬라이싱에 사용할 수 있습니다.

print(text[-7:-1]) # 출력: Python (뒤에서 7번째부터 뒤에서 2번째까지)
print(text[-7:])   # 출력: Python! (뒤에서 7번째부터 끝까지)

5.4. 단계(Step)를 이용한 슬라이싱: [시작_인덱스:끝_인덱스:단계]

단계는 몇 칸씩 건너뛰면서 문자를 가져올지 지정합니다. 기본값은 1입니다.

numbers = "0123456789"
print(numbers[::2])   # 출력: 02468 (처음부터 끝까지 2칸씩 건너뛰기)
print(numbers[1::2])  # 출력: 13579 (인덱스 1부터 끝까지 2칸씩 건너뛰기)

# 음수 단계를 사용하면 문자열을 뒤집을 수 있습니다.
reversed_text = text[::-1]
print(reversed_text) # 출력: !nohtyP ,olleH

6. 문자열은 불변(Immutable) 자료형

파이썬에서 문자열은 ‘불변(Immutable)’ 자료형입니다. 이는 한 번 생성된 문자열의 내용은 변경할 수 없다는 의미입니다. 문자열의 특정 문자를 변경하려고 시도하면 오류가 발생합니다.

my_string = "Python"
# my_string[0] = 'J' # TypeError: 'str' object does not support item assignment

만약 문자열의 내용을 변경하고 싶다면, 새로운 문자열을 생성해야 합니다. 예를 들어, 문자열의 일부를 변경하여 새로운 문자열을 만들 수 있습니다.

original_string = "Hello, World!"
new_string = "J" + original_string[1:] # 첫 글자를 'J'로 변경
print(new_string) # 출력: Jello, World!

7. 결론: 텍스트 데이터 처리의 기초 다지기

이 챕터를 통해 여러분은 파이썬 문자열의 기본적인 개념과 활용법을 익혔습니다. 문자열을 생성하는 다양한 방법, 이스케이프 문자의 사용, 문자열 연결 및 반복 연산, 그리고 문자열의 특정 부분에 접근하는 인덱싱과 슬라이싱 기법까지 살펴보았습니다. 또한, 문자열이 불변 자료형이라는 중요한 특징도 이해했습니다.

문자열은 파이썬 프로그래밍에서 가장 자주 사용되는 자료형 중 하나입니다. 웹에서 데이터를 가져오거나, 사용자로부터 입력을 받거나, 결과를 화면에 출력하는 등 거의 모든 작업에서 문자열을 다루게 될 것입니다. 오늘 배운 인덱싱과 슬라이싱은 문자열을 자유자재로 조작하는 데 필수적인 기술이므로, 다양한 예제를 통해 충분히 연습해 보세요.

다음 챕터에서는 문자열을 더욱 강력하게 다루는 다양한 ‘문자열 메서드’와 문자열 안에 변수 값을 삽입하는 ‘문자열 포매팅’ 기법에 대해 자세히 알아보겠습니다. 문자열의 기본을 탄탄히 다진 여러분은 이제 텍스트 데이터 처리의 마법사가 될 준비가 되었습니다!

문자열(String)의 기본