Python 문자열 메서드
🔥 매회 출제 (priority 3)
🌱 왜 배우나
가게에서 “사과,바나나,체리”라고 적힌 종이 한 장을 받았다. 이걸 과일 이름별로 정리하려면 쉼표마다 가위질을 해야 한다. 다시 묶으려면 풀칠이 필요하다. 프로그램 속 문자열 가공도 똑같다. 쉼표로 자르기, 하이픈으로 다시 잇기, “바나나”를 “포도”로 갈아끼우기. 이런 작업을 한 줄로 끝내라고 Python이 미리 준비해 둔 도구가 문자열 메서드다. split()은 가위, join()은 풀, replace()는 지우개 겸 펜, strip()은 양쪽 공백 털이개라고 기억하면 편하다.
📖 핵심 개념
Python 문자열은 **불변(immutable)**이다. 즉 한번 만들어지면 그 내용을 절대 바꿀 수 없다. 모든 문자열 메서드는 원본을 건드리지 않는다. 대신 새로운 문자열(또는 리스트)을 만들어서 돌려준다.
시험에서 가장 자주 나오는 세 메서드는 이것이다.
split(구분자): 문자열을 구분자 기준으로 잘라서 리스트(list) 로 돌려준다. 리스트는 여러 값을 순서대로 담는 자료구조다.join(리스트): 리스트 속 요소들을 구분자로 이어 붙여 문자열(str) 로 돌려준다. split과 정반대 방향의 일이다.replace(old, new): 문자열 속old를new로 바꾼 새 문자열을 돌려준다. 주의할 점은 “처음 하나만”이 아니라 “매칭되는 전부”를 바꾼다는 것이다.
호출 순서 하나 더 기억해 두자. join은 구분자 문자열이 주인이다. "-".join(['a','b'])처럼 쓴다. 리스트에 점을 찍는 게 아니다. 이 세 메서드를 연달아 붙이는 체인(chain) 형태가 기출 단골이다.
🔍 시각화
┌─ split → join → replace 체인 흐름 ────────────────────┐
│ │
│ "apple,banana,cherry" │
│ │ │
│ ▼ split(",") │
│ ['apple', 'banana', 'cherry'] ← 리스트(list) │
│ │ │
│ ▼ "-".join(...) │
│ "apple-banana-cherry" ← 문자열(str) │
│ │ │
│ ▼ replace("banana", "grape") │
│ "apple-grape-cherry" ← 새 문자열(str) │
└───────────────────────────────────────────────────────┘
┌─ join 호출 방식 주의 ─────────────────────────────────┐
│ │
│ ✗ 리스트.join(구분자) ← 틀린 방식 │
│ ✓ 구분자.join(리스트) ← 올바른 방식 │
│ │
│ "-".join(['a','b','c']) → "a-b-c" │
└───────────────────────────────────────────────────────┘
↔️ 이웃 개념 구분
- split vs join: split은 문자열을 잘라 리스트로 만들기. join은 리스트를 묶어 문자열로 만들기. 방향이 정반대다.
- find vs index: 둘 다 위치를 찾는다. 다만 없을 때
find()는 -1을 돌려주고,index()는 ValueError를 던진다. - strip vs replace:
strip()은 양쪽 가장자리의 공백만 털어낸다.replace(" ", "")는 가운데 공백까지 전부 없앤다.
🔑 핵심 용어
- split(구분자): 구분자(separator) 기준으로 문자열을 잘라 리스트(list)로 반환.
"a,b,c".split(",")→['a','b','c'] - join(리스트): 리스트의 요소들을 구분자로 이어 붙여 하나의 문자열로 반환.
"-".join(['a','b'])→"a-b" - replace(old, new): 모든 old를 new로 치환한 새 문자열 반환.
"aab".replace("a","x")→"xxb" - find(str): str이 처음 나타나는 인덱스(위치 번호, 0부터 시작)를 반환. 없으면 -1
- upper() / lower(): 모든 글자를 대문자/소문자로 변환한 새 문자열 반환
- strip(): 양쪽 공백(빈칸, 탭, 줄바꿈)을 제거한 새 문자열 반환.
lstrip()은 왼쪽만,rstrip()은 오른쪽만 - count(str): 문자열 안에서 str이 몇 번 나타나는지 횟수 반환
- startswith(str) / endswith(str): 문자열이 str로 시작/끝나는지 True 또는 False 반환
- 불변(immutable): 한번 만들어진 문자열의 내용을 바꿀 수 없는 성질. 메서드는 항상 새 문자열을 만듦
✅ 스스로 가르쳐보기
Python을 처음 보는 친구에게 split과 join을 “가위와 풀”이 아닌 본인만의 새로운 비유로 설명해 보세요. 이어서
"apple,banana,cherry"가split → join → replace를 거치며 어떤 타입으로 바뀌는지 단계별로 짚어 주세요.
체크포인트:
- split의 반환 타입이 리스트라는 점을 말할 수 있는가
- join은 구분자 문자열이 주어가 된다는 점을 말할 수 있는가
- join의 반환 타입이 문자열이라는 점을 말할 수 있는가
- replace가 매칭된 모든 부분을 바꾼다는 점을 짚었는가
🎯 기출 포인트
- 매회 출제: split → join → replace 등 메서드 체인 결과 추적
- 출제 패턴: 문자열 조작 후 출력값 쓰기. 인덱싱/슬라이싱과 혼합 출제
- 핵심: split은 리스트 반환, join은 문자열 반환. 반환 타입에 주의
- 주의: replace는 모든 매칭을 치환 (첫 번째만이 아님)