[Python – 기초 강좌] 7. 문자열 (String)

앞선 포스팅 중 [Python – 기초 강좌] 4. 변수(Variable) 및 연산자(Operator) 에서 변수와 타입에대해 간략히 소개했는데, 이번 포스팅에서는 그 중 가장 많이 다르게 되는 String 타입에 대해 좀 더 자세히 소개해드리겠습니다.

문자열은 프로그래밍 언어에서 매우 기본적이면서도 중요한 데이터 유형 중 하나입니다.

Python에서 문자열은 문자의 순서가 지정된 컬렉션으로, 다양한 방법으로 조작하고 접근할 수 있습니다.

이 글에서는 Python 문자열의 기본적인 개념부터 고급 기능까지 자세히 설명해보겠습니다.

String-img

Python에서 문자열(String) 이란?

개요

Python에서 문자열은 따옴표로 둘러싸인 문자의 시퀀스입니다.

예를 들어, fruit = 'banana'는 “banana”라는 문자열을 변수 fruit에 할당합니다.

문자열은 각 문자에 순서가 있으며, 이 순서를 이용해 개별 문자에 접근할 수 있습니다.

문자열의 인덱싱(Indexing)

문자열에서 특정 위치의 문자에 접근할 때 인덱싱을 사용합니다. Python의 인덱스는 0부터 시작합니다.

fruit[0]은 문자열 fruit의 첫 번째 문자인 ‘b’를 반환하고, fruit[1]은 두 번째 문자인 ‘a’를 반환합니다.

예제

fruit = 'banana'
print(fruit[0])  # 'b'
print(fruit[1])  # 'a'

결과

b
a

문자열의 불변성 (immutable)

Python에서 문자열은 생성된 후에 내용을 변경할 수 없는 불변(immutable) 객체입니다.

문자열의 특정 부분을 변경하려고 하면 TypeError가 발생합니다.

따라서, Python에서는 새로운 문자열을 생성하여 변경된 값을 저장하는 식으로 변경합니다.

예제

greeting = 'Hello, world!'
# greeting[0] = 'J'  # 이 코드는 TypeError를 발생시킵니다.
jelloworld = 'J' + greeting[1:]
print(jelloworld)  # 'Jello, world!'

결과

Jello, world!

문자열의 길이: len()

len() 함수는 문자열에 포함된 문자의 총 수를 반환합니다. 이를 통해 문자열의 길이를 알 수 있습니다.

아래 예시에서 len(fruit)은 6을 반환합니다. 즉, ‘banana’라는 문자열은 6개의 문자로 이루어져 있습니다.

예제

fruit = 'banana'
print(len(fruit))  # 6

결과

6

문자열을 자주 사용하는 기능들

문자열의 슬라이싱

문자열 슬라이싱은 문자열의 일부분을 추출하는 기능입니다.

[시작 인덱스:종료 인덱스] 형식을 사용하며, 시작 인덱스는 포함되고 종료 인덱스는 포함되지 않습니다.

예제

fruit = 'banana'
print(fruit[1:3])  # 'an'

결과

an

문자열 순회 (loop)

for 루프를 사용하여 문자열의 각 문자에 접근할 수 있습니다.

예제

fruit = 'banana'
for letter in fruit:
    print(letter)

결과

b
a
n
a
n
a

문자열 메서드

upper() lower() 메서드를 이용하여 대소문자를 변환한 문자열을 획득할 수 있습니다.

capital_word = 'banana'
print(capital_word.upper())  # 'BANANA'

lower_word = 'BANANA'
print(lower_word.lower())  # 'banana'

문자열 검색

find() 메서드는 주어진 문자열에서 특정 문자나 부분 문자열을 찾고, 그 위치의 인덱스를 반환합니다.

예제

print('banana'.find('na'))  # 2

결과

2

in 연산자

in 연산자는 문자열 내에 특정 문자나 부분 문자열이 존재하는지 확인합니다.

예제

print('a' in 'banana')  # True

결과

True

심화 사용법 (Advanced Usage)

문자열 포매팅 고급 사용법

Python 3.6 이상에서는 f-문자열(f-string)이라는 새로운 문자열 포매팅(formating) 메커니즘이 도입되었습니다.

이는 코드의 가독성을 높이고 성능을 개선하는 방법을 제공합니다.

f-문자열을 사용하면 변수를 직접 문자열 안에 삽입할 수 있고, 심지어 표현식을 평가할 수도 있습니다.

예를 들어, {name.upper()}와 같이 메서드를 호출하거나 {len(name)}과 같이 길이를 계산할 수 있습니다

예제

name = "World"
greeting = f"Hello, {name} - {len(name)}!"
print(greeting)  # 'Hello, World! - 5'

결과

Hello, World - 5!

정규 표현식을 사용한 문자열 처리

Python의 re 모듈은 정규 표현식을 사용하여 문자열을 검색하고, 매치되는 부분을 대체하거나, 분할하는 기능을 제공합니다.

정규 표현식은 문자열 처리에서 매우 강력한 도구입니다.

예를 들어, 이메일 주소가 유효한 형식인지 검사하려면 다음과 같이 할 수 있습니다.

예제

import re

email = "user@example.com"
if re.match(r"[^@]+@[^@]+\.[^@]+", email):
    print("It is a valid email address.")
else:
    print("It is a invalid email address.")

결과

It is a valid email address.

유니코드 문자열과 인코딩

Python 3에서는 모든 문자열이 기본적으로 유니코드입니다.

이는 다양한 언어의 문자를 포함한 텍스트를 처리할 수 있음을 의미합니다. 하지만 때때로, 특정 인코딩을 사용해야 할 상황이 생길 수 있습니다.

예를 들어, 문자열을 UTF-8로 인코딩하거나, 이 인코딩에서 바이트 객체로 디코딩하는 방법은 다음과 같습니다.

예제

text = "프로그래밍"
encoded_text = text.encode('utf-8')
print(encoded_text)  # result: b'\xed\x94\x84\xeb\xa1\x9c\xea\xb7\xb8\xeb\x9e\x98\xeb\xb0\x8d'
decoded_text = encoded_text.decode('utf-8')
print(decoded_text)  # result: 프로그래밍

결과

b'\xed\x94\x84\xeb\xa1\x9c\xea\xb7\xb8\xeb\x9e\x98\xeb\xb0\x8d'
프로그래밍

문자열과 데이터 구조

문자열은 리스트나 튜플과 유사하게 처리할 수 있습니다.

이를 활용하면 문자열을 더욱 유연하게 조작할 수 있습니다.

예를 들어, 문자열을 단어로 분할하거나, 여러 문자열을 하나로 결합하는 작업은 간단합니다.

예제

words = "Python is great programming language.".split()
joined = '-'.join(words)
print(joined)  # print: Python-is-great-programming-language.

결과

Python-is-great-programming-language.

참고링크

Leave a Comment