파이썬에서 문자열 포매팅은 오래전부터 다양한 방식이 존재해왔습니다. 기존에는 %
연산자나 str.format()
메서드를 주로 사용했는데, Python 3.6 이후 도입된 f-string(formatted string literal)은 훨씬 더 직관적이고, 가독성과 성능 면에서 우수한 현대적 방식으로 주목받고 있습니다.
이번 글에서는 기존 포매팅 방식과 f-string을 비교하고, f-string을 사용할 때의 장점과 주의할 점을 알아보겠습니다.
예전에는 어떻게 했을까?
%
연산자 방식
파이썬 초창기부터 있던 방식으로, C 언어의 printf
스타일을 모방한 문자열 포매팅입니다.
name = "Alice"
age = 30
old_style = "My name is %s and I am %d years old." % (name, age)
단점:
- 변수 개수/순서와
%
토큰 매칭 필요 - 포매팅 문법이 가독성 떨어짐 (
%s
,%d
등)
str.format()
메서드 방식
Python 2.6+부터 사용 가능. 중괄호 {}
를 이용하여 변수 삽입 위치를 표시한 뒤, .format()
에 인자를 전달합니다.
new_style = "My name is {} and I am {} years old.".format(name, age)
장점: %
에 비해 가독성 개선, 인자 위치 지정({0}
, {1}
), 이름 기반({age}
) 포매팅 가능.
단점: 여전히 변수를 별도로 format()에 전달해야 하고, 문자열 내 변수명과 실제 변수 연결이 명시적이지 않음.
f-string: 새로운 포매팅 패러다임
Python 3.6부터 도입된 f-string은 문자열 앞에 f
접두어를 붙여, 문자열 리터럴 안에서 중괄호 {}
를 통해 바로 파이썬 변수를 참조할 수 있습니다.
name = "Alice"
age = 30
f_str = f"My name is {name} and I am {age} years old."
장점:
- 명확한 가독성: 변수명을 바로 중괄호 안에 쓰므로, 문자열 포매팅을 읽을 때 어떤 변수가 들어오는지 직관적
- 내장 표현식:
{name.upper()}
,{age+5}
등 중괄호 안에서 파이썬 표현식 바로 사용 가능 - 성능 개선: f-string은 CPython 구현상 일반적으로
str.format()
대비 빠른 경우가 많음 - 코드 양 단축:
.format()
호출 없이 바로 변수 참조 가능
단점:
- Python 3.6 이상에서만 사용 가능. 구버전 호환성 문제가 있을 수 있음
- f-string 내에서 매우 복잡한 표현식을 넣으면 오히려 가독성이 떨어질 수 있으므로 적절히 사용해야 함
예제 비교
# 과거 방식
name = "Bob"
age = 25
old = "Name: %s, Age: %d" % (name, age)
fmt = "Name: {}, Age: {}".format(name, age)
# f-string 방식
fnew = f"Name: {name}, Age: {age}"
f-string은 변수명과 값이 바로 연결되어 코드의 의도가 명확해집니다.
추가 기능: 정렬, 포맷 지정
f-string도 :
뒤에 포맷 지정 옵션을 붙여 정수 자릿수 제어, 소수점 자리수 지정, 날짜 형식 변환 등 다양한 작업 가능.
pi = 3.1415926535
f"{pi:.2f}" # "3.14"
number = 42
f"{number:04d}" # "0042"
이처럼 포맷 지정도 f-string 안에서 손쉽게 처리할 수 있습니다.
성능 측면
일반적으로 f-string이 str.format()
보다 빠르다는 벤치마크 결과가 많습니다. 특히 단순 변수 삽입 시 f-string은 거의 오버헤드 없이 처리하므로 대규모 문자열 처리나 루프 내 포매팅에서 성능 향상을 기대할 수 있습니다.
단, 극단적으로 복잡한 표현식을 f-string 내부에 넣는 경우, 성능 차이는 크게 중요하지 않을 수 있으며, 가독성 저하가 문제이므로 적절히 외부 변수로 계산한 뒤 f-string에 삽입하는 것이 좋습니다.
결론
- f-string은 파이썬 문자열 포매팅의 현대적이고 직관적인 대안으로, Python 3.6 이상에서 지원됩니다.
- 레거시
%
나str.format()
대비 가독성, 생산성, 성능 측면에서 우수합니다. - 구버전 호환성 필요성이 없는 한, f-string 사용을 권장하며, 적절한 포맷 지정 옵션과 표현식 활용으로 코드 품질을 높일 수 있습니다.
다음 글에서는 타입 힌트(Type Hints)와 마이파이(Mypy)를 통해 정적 타입 체크를 적용하고, 코드 명확성과 유지보수성을 개선하는 방법을 다루겠습니다.
주석 및 분석 섹션
핵심 포인트 정리:
- 예전 방식:
%
또는str.format()
- f-string:
f"..."
로 문자열 내 변수/표현식을 직접 삽입 - 장점: 가독성, 생산성, 성능 개선 / 단점: Python 3.6+ 필요
- 결론: 가능한 f-string 사용 권장
이로써 문자열 포매팅에서 더 모던한 접근법을 소개했으니, 다음 글에서 타입 힌트를 통해 코드 품질을 또다시 현대화하는 방법을 살펴보겠습니다.
'개발 이야기 > Python (파이썬)' 카테고리의 다른 글
[모던 Python 4편] pathlib로 직관적인 파일 경로 처리하기 (1) | 2024.12.17 |
---|---|
[모던 Python 3편] dataclass로 데이터 구조 간소화하기 (0) | 2024.12.17 |
[모던 Python 2편] 타입 힌트와 Mypy로 코드 명확성 강화하기 (0) | 2024.12.17 |
파이썬 3.14 (개발중): 새로운 기능과 개선사항 총정리 (0) | 2024.12.17 |
Python 3.13의 새로운 기능 소개: 이전 버전과의 비교 (1) | 2024.12.12 |