[#6] 문자열 포매팅(formatting)

🔶 문자열 포매팅
문자열에서 또 하나 알아야 할 것으로는 '문자열 포매팅 (string formatting)'이 있습니다.
문자열 포매팅을 공부하기 전에 다음과 같은 문자열을 출력하는 프로그램을 작성했다고 가정해봅시다.
"현재 시간은 오후 8시 입니다."
시간이 지나서 오후 10시가 되면 다음 문장을 출력합니다.
"현재 시간은 오후 10시 입니다."
이렇게 문자열 안의 일부 값만 바뀌는 경우,
매번 문장을 새로 쓸 수는 없으니, 공통된 틀에 값만 바꿔 넣는 방식이 필요합니다.
이걸 가능하게 해주는 것이 바로 문자열 포매팅입니다.
쉽게 말해 문자열 포매팅이란 문자열 안에 어떤 값을 삽입하는 방식입니다.
다음 예를 직접 실행해 보면서 그 사용법을 알아봅시다.
🔸 문자열 포매팅 따라하기
🔹 숫자 바로 대입
"It's %d o'clock." % 8
It's 8 o'clock.
- "%d" → 정수(integer) 자리 표시
- % 8 → 그 자리에 넣을 실제 값
결과값을 보면 알겠지만, 위 예제는 문자열 안에 정수 8을 삽입하는 방법을 보여줍니다.
문자열 안의 숫자를 넣고 싶은 자리에 %d 문자를 넣어 주고 삽입할 숫자 8은 가장 뒤에 있는 % 문자 다음에 써 넣었습니다.
여기에서 %d는 '문자열 포맷 코드'라고 부릅니다.
🔹문자열 바로 대입
문자열 안에 꼭 숫자만 넣으라는 법은 없습니다.
이번에는 숫자 대신 문자열을 넣어봅시다.
"It's %s o'clock." % 'eight'
It's eight o'clock.
- %s는 문자열(string)을 위한 포맷 코드입니다.
- 이 방식은 문자, 단어, 문장을 자유롭게 삽입할 수 있습니다.
문자열 안에 또 다른 문자열을 삽입하기 위해서 앞에 사용한 문자열 포맷 코드 %d가 아닌 %s를 썼습니다.
앞에서 배운 것처럼 문자열을 대입할 때는 반드시 큰따옴표나 작은따옴표를 써야 합니다.
🔹숫자 값을 나타내는 변수로 대입
number = 8
"It's %d o'clock." % number
It's 8 o'clock.
이처럼 포맷 코드에 변수를 대입할 수도 있습니다.
위 예시와 결과는 같지만, 값을 직접 입력하지 않고 변수를 통해 제어할 수 있다는 점이 중요합니다.
1번처럼 숫자를 바로 대입하든, 위 예제처럼 숫자 값을 나타내는 변수를 대입하든 결과는 같습니다.
🔹2개 이상의 값 넣기
그렇다면 문자열 안에 1개가 아닌 여러개의 값을 넣고 싶을 땐 어떻게 해야 할까요?
hour = "eight"
number = 11
"I've been working for %s hours. It's %d p.m" % (hour, number)
I've been working for eight hours. It's 11 p.m
2개 이상의 값을 넣으려면 마지막 % 다음 괄호 안에 쉼표(,)로 구분하여 각각의 값을 넣어 주면 됩니다.
🔑 문자열 포맷 코드
문자열 포매팅 예제에서는 대입해 넣는 자료형으로 정수와 문자열을 사용했지만, 이 밖에도 다양한 것을 대입할 수 있습니다.
문자열 포맷 코드의 종류는 다음과 같습니다.

여기에서 재미있는 것은 %s 포맷 코드인데, 이 코드에는 어떤 형태의 값이든 변환해 넣을 수 있습니다.
무슨 말인지 예를 통해 확인해봅시다.
"It's %s o'clock" % 8
It's 8 o'clock.
"소수점 표시 %s" % 1.55
소수점 표시 1.55
원래는 8을 문자열 안에 삽입하려면 %d를 사용해야하고 1.55를 삽입하려면 %f를 사용해야 합니다.
하지만 %s를 사용하면 %s는 자동으로 %뒤에 있는 8이나 1.55와 같은 값을 문자열로 바꾸어 대입하기 때문에 이런 것을 생각하지 않아도 됩니다.
🔹포매팅 연산자 %d와 %를 같이 쓰는 방법
"THe installation is %d%" % 75
incomplete format error
결과값으로 당연히 "The installation is 75%"가 출력될 것이라 예상했겠지만, 파이썬은 '형식이 불안정하다'라는 오류 메시지를 보여줍니다.
왜냐하면 파이썬은 %를 포맷 코드의 시작 기호로 인식하기 때문이죠.
문자열 포맷 코드인 %d와 %가 같은 문자열 안에 존재하는 경우, %를 나타내려면 반드시 %%를 써야합니다.
다만 %d와 같은 포매팅 연산자가 없는 경우엔 %는 홀로 쓰여도 상관없습니다.
따라서 위 예를 제대로 실행하려면 다음과 같이 작성해야 합니다.
"The installation is %d%%" % 75
The installation is 75%
🔶 포맷 코드와 숫자 함께 사용하기
앞에서 살펴봤듯이 %d, %s 등과 같은 포맷 코드는 문자열 안에 어떤 값을 삽입할 때 사용합니다.
하지만 포맷 코드를 숫자와 함께 사용하면 더 유용합니다. 다음 예를 따라해봅시다.
🔹정렬과 공백
"%10s" % "Python"
Python
%10s는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨두라는 의미입니다.
즉, 여기선 Python이라는 6개의 문자열이 있으니, 10-6을 해서 4칸의 공백이 왼쪽에 생기게 됩니다.

"%-10sPython." % "easy"
easy Python.
그렇다면 반대쪽인 왼쪽 정렬은 %-10s가 될 겁니다.
easy를 왼쪽으로 정렬하고 나머지는 공백으로 채웠다는 것을 알 수있습니다.

'Python'의 경우 저 %-10s와 easy가 상호작용한 뒤에 추가된 문자열의 일부기 때문에, 저 명령어가 다 수행된 뒤에 그냥 이어져서 붙을 뿐입니다.
- %10s → 10칸 확보 후 오른쪽 정렬
- %-10s → 10칸 확보 후 왼쪽 정렬
🔹소수점 표현하기
"%0.4f" % 1.23452345
1.2345
1.23452345를 소수점 네 번째 자리까지만 나타내고 싶은 경우에는 위와 같이 작성합니다.
%0.4f에서 '.'는 소수점 포인트, 그 뒤의 숫자 4는 소수점 뒤에 나올 숫자의 개수를 말합니다.
소수점 포인트 앞의 숫자는 문자열의 전체 길이를 의미하는데, %0.4f에서 사용한 숫자 0은 길이에 상관하지 않겠다는 의미입니다.
"%.4f" % 1.23452345
1.2345
'%0.4f'는 0을 생략하여 '%.4f'처럼 사용되기도 합니다.
한가지 주의할점은 소수점의 경우 마지막 끝 자리가 반올림되는 형식을 취하므로, 끝 자리 다음 숫자가 5이상 넘어가면 끝 자리가 반올림되어 표시된다는 것입니다.
"%.4f" % 1.234567890
1.2346
위 예시를 보면 소수점 네자리까지를 표시하고 나머지는 제외하는 것을 볼 수 있습니다.
다만 네번쨰 자리인 5 다음에 온 숫자가 6이기 때문에 5가 반얼림되어서 1.2345가 아닌 1.2346이 된것 역시 알 수 있죠.
다시 돌아와서, '.4%f'앞에 숫자를 붙여서 공백을 넣어 줄 수도 있습니다.
다음 예를 살펴봅시다.
"%10.4f" % 1.23452345
1.2345
위는 숫자 1.23452345를 소수점 네 번째 자리까지만 표시하고 전체길이가 10개인 문자열 공간에서 오른쪽으로 정렬하는 예를 보여줍니다.

🖋️ 요약 정리
| 기능 | 문법 예시 | 설명 |
| 숫자 삽입 | "%d명" % 5 | 정수 대입 |
| 문자열 삽입 | "%s입니다" % "Python" | 문자열 대입 |
| 여러 값 삽입 | "%s %d" % ("hi", 3) | 괄호로 묶어 순서대로 |
| % 기호 출력 | "100%%" | %%로 하나 출력 |
| 오른쪽 정렬 | "%10s" % "Hi" | 10칸 확보, 오른쪽 정렬 |
| 왼쪽 정렬 | "%-10s" % "Hi" | 왼쪽 정렬 |
| 소수점 제한 | "%.2f" % 3.1415 | 소수점 2자리 |
| 정렬 + 소수점 | "%8.3f" % 1.2 | 총 8칸, 소수점 3자리 |
🔶 AI피드백
Q. 오늘은 파이썬에서 문자열 포매팅에 대해 어느정도 알아봤어. 오늘 배운 내용들이 어디에 쓰이는지, 어떻게 쓰이는지, 또 왜 중요한건지 알려줄래?
A. 오늘 공부한 문자열 포매팅은 파이썬뿐 아니라 모든 프로그래밍에서 중요한 기술 중 하나야.
왜 중요하고 어디에 쓰이는지, 그리고 실제 현업에서도 어떻게 응용되는지 아래에 체계적으로 설명해줄게.
✅ 문자열 포매팅은 왜 중요한가?
✔️ 1. 출력 형식을 자유롭게 제어하기 위해
- 숫자/문자/소수점을 원하는 모양으로 예쁘게 출력하려면 포매팅이 필수예요.
- 예: 보고서, 영수증, 로그 메시지 등
✔️ 2. 데이터와 문장을 분리해서 관리
- "현재 시간은 오후 8시입니다." → 값만 바꿔서 여러 문장을 자동 출력
- 문자열 틀은 고정하고 값만 바꾸면, 코드 재활용이 훨씬 쉬워져요.
✔️ 3. 실제 사용자와의 인터페이스 구성
- 게임이나 프로그램에서 사용자에게 보여주는 메시지 대부분이 포매팅된 문자열입니다.
- 예: "플레이어 %s의 체력은 %.1f입니다."
🧠 어디에 쓰일까?
| 분야 | 사용 예 |
| 🎮 게임 개발 | 캐릭터 이름, 체력, 스코어, 시간 출력 |
| 📊 데이터 분석 | 통계 수치 출력, 정렬된 테이블 출력 |
| 🌐 웹 개발 | HTML 템플릿 렌더링 |
| 📱 앱 개발 | UI 문자열 표시, 알림 포맷팅 |
| 🤖 AI/자동화 | 로그 기록, 상황별 메시지 생성 |
🧰 어떻게 쓰이는가? (실전 예시)
name = "Noma"
score = 87.456
print("플레이어 %s의 점수는 %.1f입니다." % (name, score))
# 출력: 플레이어 Noma의 점수는 87.5입니다.
progress = 75
print("설치 진행률: %d%% 완료" % progress)
# 출력: 설치 진행률: 75% 완료
print("%-10s | %10s" % ("이름", "점수"))
print("%-10s | %10.2f" % ("Noma", 95.785))
# 왼쪽/오른쪽 정렬된 표 형태
❓응용이 어려워질 수 있을까?
초보자에겐 쉬운 듯 보이지만, 조금만 응용하면 급격히 난이도가 올라가요.
- 소수점 자리 제어 + 정렬
- 여러 개의 값 포맷팅
- 문자열 안에서 조건부 삽입 (%s 자리에 조건에 따라 다른 텍스트 삽입)
- % 문법 말고 format() 또는 f-string 방식도 추가로 존재
🪄 보너스: f-string 방식 (요즘 더 많이 쓰임)
name = "Noma"
score = 87.456
print(f"플레이어 {name}의 점수는 {score:.1f}입니다.")
👉 이 방식은 더 간결하고 직관적이기 때문에, % 포매팅을 익힌 후에는 금방 넘어가게 돼요.
✍️ 요약 정리
| 포인트 | 내용 |
| ✔ 왜 중요? | 다양한 데이터를 사람이 읽기 쉽게 보여주는 핵심 도구 |
| ✔ 어디에 쓰여? | 거의 모든 프로그램 출력, UI, 로그, 보고서 등 |
| ✔ 왜 어려워질 수 있어? | 정렬, 자리수, 동적 포맷 등 세밀한 제어 필요 |
| ✔ 무엇부터 익혀야? | %d, %s, %.2f, %10s, %% 등 필수 포맷 코드 |