IT프로그래밍/파이썬

파이썬 문자열 메서드 기초 : strip과 replace는 원본을 바꿀까

MannizDev 2026. 8. 10.

닉네임을 입력했는데 화면에는 멀쩡해 보이고, 비교하면 자꾸 다르다고 나오는 경우가 있습니다. 앞뒤에 숨어 있는 공백 때문일 수 있습니다. 저도 오랜만에 파이썬을 다시 보면서 strip() 한 줄이면 해결된다는 사실보다, 왜 문자열 뒤에 점을 붙이고 실행 결과를 다시 변수에 담는지부터 되짚어 보게 됐습니다.

strip(), replace(), lower()를 각각 외우기 시작하면 문자열 메서드는 끝없는 단어장처럼 느껴집니다. 이번에는 카페 닉네임과 쿠폰 코드를 정리하는 과정으로 문자열.메서드()의 공통 원리를 잡아 보겠습니다.

공백이 있는 문자열이 strip과 replace 메서드를 거쳐 정리되는 과정을 보여 주는 대표 이미지

 

테스트 환경

  • 작성 및 실행 확인일 : 2026년 8월 10일
  • 운영체제 : Windows
  • 로컬 실행 환경 : Python 3.9.13
  • 공식 문서 확인 : Python 3.14.6 문자열 메서드 문서

예제는 Python 3의 내장 문자열 기능만 사용합니다. 문자열의 인덱스와 불변성이 낯설다면 파이썬 문자열 기초를 먼저 읽으면 이번 원리가 더 잘 연결됩니다.

 

눈에 안 보이는 공백부터 찾아보기

다음 닉네임의 앞뒤에는 공백이 두 칸씩 들어 있습니다.

raw_name = "  파이썬 카페  "

print(raw_name)
print(repr(raw_name))
print(len(raw_name))

실행 결과입니다.

  파이썬 카페  
'  파이썬 카페  '
10

첫 줄만 보면 공백의 경계가 잘 보이지 않습니다. repr()로 출력하면 따옴표 안에서 공백이 차지하는 위치가 드러납니다. 파이썬 카페는 가운데 공백까지 여섯 칸이고, 앞뒤 공백 네 칸을 더하면 전체 길이는 10입니다.

문자열을 정리하기 전에 repr(값)len(값)으로 현재 상태를 보는 습관을 들이면 “분명 같은 글자인데 왜 다르지?”라는 문제를 찾기 쉬워집니다.

 

점은 이 문자열이 할 수 있는 일을 찾는 표시다

raw_name.strip()을 말로 읽으면 다음과 같습니다.

raw_name이라는 문자열에게 .
strip이라는 일을 찾아서
괄호로 실행해 달라고 한다 ()

문자열처럼 어떤 값에 딸려 있는 함수를 메서드라고 부릅니다. 지금은 클래스나 객체지향을 깊게 공부할 필요가 없습니다. 문자열.메서드()를 “이 문자열에게 준비된 일을 시킨다”라고 읽으면 충분합니다.

일반 함수인 len(raw_name)은 값을 괄호 안에 넣지만, 문자열 메서드는 raw_name.strip()처럼 값 뒤에 점을 붙입니다. 모양은 달라도 둘 다 괄호가 붙어야 실제로 실행됩니다.

 

strip은 양쪽 끝의 공백을 벗겨 낸다

strip()은 문자열의 시작과 끝에 있는 공백 문자를 제거한 새 문자열을 돌려줍니다.

raw_name = "  파이썬 카페  "
clean_name = raw_name.strip()

print(repr(raw_name))
print(repr(clean_name))
print(len(clean_name))
'  파이썬 카페  '
'파이썬 카페'
6

 

가운데 공백은 왜 남아 있을까

strip()의 역할은 양쪽 끝을 정리하는 것입니다. 파이썬카페 사이의 공백은 문자열 한가운데 있으므로 남습니다.

text = "  파이썬 카페  "
print(repr(text.strip()))
'파이썬 카페'

이름 사이의 정상적인 띄어쓰기까지 지워 버리면 뜻이 달라질 수 있습니다. strip()이 모든 공백을 없애지 않고 가장자리만 정리하는 이유입니다.

 

replace는 찾은 조각을 새 조각으로 바꾼다

문자열 안쪽의 특정 글자를 바꾸고 싶을 때는 replace(찾을 문자열, 바꿀 문자열)을 사용합니다.

message = "Python Cafe Python"

print(message.replace("Python", "파이썬"))
print(message.lower())
print(message)
파이썬 Cafe 파이썬
python cafe python
Python Cafe Python

replace()는 일치하는 Python 두 곳을 모두 파이썬으로 바꾼 새 문자열을 만듭니다. lower()는 영문 대문자를 소문자로 바꾼 새 문자열을 만듭니다.

그런데 마지막 줄의 원본 message는 그대로입니다. 메서드가 실패한 것이 아니라 문자열이 불변 자료형이기 때문입니다. 문자열 메서드는 원본 글자를 뜯어고치는 대신, 처리 결과를 담은 새 문자열을 돌려줍니다.

 

결과를 받지 않으면 새 문자열이 사라진다

아래 코드는 실행해도 name이 바뀌지 않습니다.

name = "  Python Cafe  "
name.strip()

print(repr(name))
'  Python Cafe  '

strip()이 만든 새 문자열을 어디에도 연결하지 않았기 때문입니다. 정리한 값을 계속 쓰려면 새로운 변수에 담거나 같은 변수 이름에 다시 연결합니다.

name = "  Python Cafe  "
name = name.strip()

print(repr(name))
'Python Cafe'

여기서 name = name.strip()은 원본 객체의 내부를 바꾼다는 뜻이 아닙니다. 오른쪽에서 새 문자열을 만든 뒤, 변수 name이 그 새 값을 가리키도록 다시 연결하는 과정입니다. 변수와 값의 관계는 파이썬 변수 기초에서 더 자세히 확인할 수 있습니다.

 

괄호를 빼면 일을 실행하지 않은 것이다

메서드 이름 뒤의 괄호를 빼면 Python은 그 일을 실행하지 않고, 나중에 호출할 수 있는 메서드 자체를 가져옵니다.

raw_name = "  Python Cafe  "

method = raw_name.strip

print(type(method))
print(callable(method))
print(method())
<class 'builtin_function_or_method'>
True
Python Cafe

raw_name.strip은 실행할 일을 가리키고, raw_name.strip()은 그 일을 지금 실행합니다. 초보 단계에서는 출력 결과가 이상할 때 메서드 이름 뒤에 괄호를 붙였는지 먼저 살펴보면 됩니다.

 

없는 메서드 이름은 AttributeError가 된다

메서드 이름을 strip()이 아니라 stripp()으로 잘못 쓰면 어떻게 될까요?

raw_name = "  Python Cafe  "
print(raw_name.stripp())

Python 3.9.13에서 직접 실행하면 다음 오류가 발생했습니다.

Traceback (most recent call last):
  File "05_attribute_error.py", line 2, in <module>
    print(raw_name.stripp())
AttributeError: 'str' object has no attribute 'stripp'

str object has no attribute는 문자열에 그런 이름의 속성이나 메서드가 없다는 뜻입니다. 점 앞의 값이 정말 문자열인지, 점 뒤의 메서드 철자가 맞는지 차례로 확인하면 됩니다. 괄호 안 인수가 부족한 경우와 달리, 이 오류는 Python이 메서드 이름 자체를 찾지 못한 상황입니다.

 

여러 메서드는 왼쪽부터 이어 달린다

한 메서드가 새 문자열을 돌려주므로, 그 결과에 바로 다음 문자열 메서드를 붙일 수 있습니다.

raw_code = "  Py thon-2026  "

clean_code = raw_code.strip().lower().replace(" ", "")

print("입력값:", repr(raw_code))
print("정리값:", clean_code)
print("원본 유지:", repr(raw_code))
입력값: '  Py thon-2026  '
정리값: python-2026
원본 유지: '  Py thon-2026  '

이 코드는 마술처럼 한 번에 처리되는 것이 아닙니다.

  1. strip()이 양끝 공백을 제거해 "Py thon-2026"을 만든다.
  2. lower()가 그 결과를 소문자로 바꾼다.
  3. replace(" ", "")가 남아 있는 가운데 공백을 빈 문자열로 바꾼다.
  4. 마지막 결과를 clean_code에 연결한다.

기차 칸이 연결되듯 각 메서드의 결과가 다음 메서드의 출발점이 됩니다. 다만 처음부터 너무 길게 이어 쓰면 중간 결과를 확인하기 어렵습니다. 예상과 다르게 나오면 한 줄씩 변수에 담고 repr()로 확인하는 편이 빠릅니다.

 

메서드 이름보다 먼저 정할 세 가지

문자열을 정리할 때는 기능 이름부터 찾지 말고 원하는 변화를 말로 적어 보세요.

  • 양쪽 끝의 불필요한 공백만 지울 것인가? strip()
  • 특정 글자 조각을 다른 조각으로 바꿀 것인가? replace()
  • 영문 대소문자를 한쪽으로 맞출 것인가? lower()

저도 다시 공부하면서 strip, replace, lower를 따로 외우는 것보다 “문자열이 메서드에게 일을 맡기고 새 문자열을 돌려받는다”는 문장으로 묶으니 훨씬 기억하기 쉬웠습니다. 원본을 보존해야 할지, 처리 결과를 어느 변수에 담을지만 먼저 결정하면 메서드 선택도 단순해집니다.

사용자 입력값을 직접 받아 정리해 보고 싶다면 Python input 사용법을 이어서 연습하면 됩니다. 다음에는 정리한 문자열 안에 원하는 글자가 들어 있는지 in으로 확인하는 원리를 살펴볼 수 있습니다.

 

참고

대표 이미지는 글의 주제를 나타내기 위해 이미지 생성 도구로 제작한 일러스트이며, 실제 Python 실행 화면은 아닙니다.

댓글

💲 추천 글