- 문자열 포매팅(String Formatting)은 문자열 내에 값(변수나 독립 값)을 동적으로 추가 또는 변환하여 print() 문으로 출력하는 방법에 대해서 알아본다.
- 문자열 포매팅은 다양한 데이터 형식(자료 타입)을 가독성 좋게 표현할 수 있고, 코딩하는데 조금 더 있어 보이게 할 수 있다.
파이썬에서 우리가 앞에서 배웠던 자료 타입에서 문자열형과 숫자형 자료는 개별로는 출력되지만, 문자열 안에 숫자형 자료를 변수나 `+`연산자로 같이 출력하면 오류가 생긴다는 것은 익히 알고 있을 것이다.
하지만, 우리가 앞으로 코딩을 하다보면 문자열 중간에 변화되는 값(숫자형 또는 문자열 등)이 수시로 변경되어 문자열과 함께 `print()`로 출력해야 하는 경우가 정말 많은데, 이것이 가능토록 하는 `연산자` 또는 `메서드`를 이용해서 직과적인 코드를 작성할 수 있도록 하는 것이 `문자열 포매팅`(String Formatting)이라는 것이다.
`문자열 포매팅`은 문자열 중간중간에 값을 동적으로 삽입하거나, 변환하여 출력할 수 있도록 해주는 매우 강력한 기능으로, 다양한 자료형 타입을 가독성 좋게 표현하거나, 효율적이고 직과적인 코드를 작성할 수 있게 해 준다.
`문자열 포매팅`은 `%`연산자 방식, `format()` 메서드 방식, `f-string` 방식으로 크게 3가지 형식으로 제공하고 있으며, 파이썬 최신버전을 사용한다는 조건으로 위 3가지 방식을 전부 사용할 수 있으며, 이번 시간에는 `%`연산자, `format()` 메서드, `f-string` 3가지의 기본적인 활용 방법에 대해서 익혀보자.
3개의 방식 중에 한 가지만 잘 사용해도 되고, 3개의 방식을 적절하게 혼용해서 사용해도 되기 때문에, 가급적이면 이 세 가지 방법은 전부 익혀두고 있기를 바란다.
`%` 연산자 방식
파이썬 초창기부터 사용되는 가장 오래된 방식의 문자열 포매팅 방식으로, 문자열 중간에 하나이상의 `%`연산자를 사용하여 변수의 값을 문자열에 삽입하여, 결과를 조합하여 출력하는 것이다.
`%`연산자 포맷 코드
%포맷 코드 | 자료형 형태 | 설명 |
`%s` | 문자열형 자료 출력 | 문자열로 된 변수를 출력할 때 사용 |
`%d` | 정수형 자료 출력 | 정수로 된 변수를 출력할 때 사용 |
`%f` | 실수형 자료 출력 | 실수로 된 변수를 출력할 때 사용 |
`%%` | % 자체를 출력 | 그냥 %를 출력할 때 사용, 예) 5% |
`%`연산자는 단순히 `%`만 입력하는 것이 아니라, 해당 자료형 타입에 맞게 포맷 코드를 같이 포함해야지만, 값을 삽입할 수 있다.
대부분 가장 많이 사용되는 문자열형, 정수와 실수형 3가지를 많이 사용하며, 변수 값과 포맷 코드가 맞지 않으면 오류가 발생한다.
`%`연산자 기본 문법
"문자열1 %연산자1 %연산자2 문자열2" % (값1, 값2,...)
`%`연산자의 기본 형태는 문자열로 이루어진 `" %연산자1 %연산자2 "` 안에 %연산자에 `%` 뒤에 있는 값 `(값1, 값2, ~~)`을 동일한 순서로 대입시켜, `값1`은 `%연산자1`에 `값2`는 `%연산자2`로 중간에 있는 `%`를 통해 넘겨서 출력하는 형태이다.
위에서 설명한 것과 같이 %연산자의 대입 방법은 좌측부터 순차적으로 적용되며, 별도로 순서를 변경할 수 있는 방법은 없기 때문에, 순서를 잘 설정할 수 있어야 한다.
기본적인 사용 예시 코딩
name = "돌출과 회전"
url = "esajin.kr"
age = 50
# 변수에 %연산자를 이용해서 값을 할당한 후,출력
str_sum = "이름은 %s 이고, 주소는 %s 이다." % (name, url)
print(str_sum)
# print()함수에 직접적으로 %연산자를 사용하는 방법
print("이름은 %s 이고, 주소는 %s 이다." % (name, url))
# 한개의 값인 경우 %연산자 값에 ()없이도 사용 가능
print("나이는 %d살 이다." % age)
이름은 돌출과 회전 이고, 주소는 esajin.kr 이다.
이름은 돌출과 회전 이고, 주소는 esajin.kr 이다.
나이는 50살 이다.
`%`연산자를 사용한 문자열 포매팅 방식은 오래된 방식이지만, 여전히 많이 사용하고 있는 편이고, 특히 너비, 정렬, 자릿수 지정 등 다양한 형식을 추가적으로 지원하기 때문에 간단한 코딩이나 특정 상황에서 유연하게 사용할 수 있다.
최신 버전에서는 밑에서 배울 내용들을 많이 사용하겠지만, `%`연산자 포매팅 방식도 알아두기를 바라고, 같이 사용할 수 있는 너비, 정렬, 자릿수 지정에 관해서는 다음 시간에 공부해 보기로 한다.
`format()` 메서드 방식
파이썬 3에서 새롭게 도입된 포매팅 방식으로 `str.format()` 메서드를 사용하여 문자열 포매팅을 할 수 있으며, 기존의 `%`연산자 방식보다 가독성이 훨씬 높고, 다양한 기능을 제공하는 등, %연산자 보다 뛰어난 성능을 가지고 있다.
`%` 연산자와는 다르게 대체되는 자료형에 따라 자동으로 지정되기 때문에 별도의 포맷 코드는 사용하지 않는다.
`format()` 기본 문법
"이것이 문자열 {} {} 포맷팅".format(값1, 값2, ...)
`format()` 메서드는 문자열 내에 중괄호`{}`를 사용하여 포맷할 위치를 지정하고, 그 자리에 값을 삽입하는 것으로 중괄호 `{}`는 `format()` 메서드의 인자 값(변수 목록)으로 대체된다.
기본적인 사용 예시 코딩
name = "돌출과 회전"
url = "esajin.kr"
age = 50
# 변수에 .format() 메서드 이용해서 값을 할당한 후,출력
str_sum = "이름은 {} 이고, 주소는 {} 이다.".format(name, url)
print(str_sum)
# print()함수에 직접적으로 .format() 메서드를 사용하는 방법
print("이름은 {} 이고, 주소는 {} 이고, 나이는 {} 이다.".format(name, url, age))
이름은 돌출과 회전 이고, 주소는 esajin.kr 이다.
이름은 돌출과 회전 이고, 주소는 esajin.kr 이고, 나이는 50 이다.
별도의 순서를 지정하지 않으면, `%`대입자와 동일하게 좌측부터 순차적으로 적용된다.
위치 인덱스 지정으로 포매팅
name = "돌출과 회전"
url = "esajin.kr"
age = 50
# f-string 방식으로 {변수명}으로 문자열 포매팅
print(f"나이는 {name} 이고, 이름은 {age} 이고, 주소는 {url} 이다.")
# f-string 방식의 문자열을 변수에 대입 후, 출력할 수도 있다.
str_sum = f"나이는 {name} 이고, 이름은 {age} 이고, 주소는 {url} 이다."
print(str_sum)
나이는 돌출과 회전 이고, 이름은 50 이고, 주소는 esajin.kr 이다.
나이는 돌출과 회전 이고, 이름은 50 이고, 주소는 esajin.kr 이다.
`format()` 메서드 포매팅은 `%` 연산자 포매팅과 다르게 `{}`안에 위치 인덱스를 지정하여 변수의 지정 순서와 상관없이, 임의의 순서를 변경하여 문자열 포매팅 순서를 변경할 수 있으며, 인덱스는 0부터 시작하여, 특정 위치에 값을 넣을 수 있다.
`{0}`은 첫 번째 안자(변수), `{1}`은 두 번째 인자(변수), `{2}`는 세 번째 인자(변수)가 지정되며, `{}`에 인덱스 번호를 변경하여, 위치에 맞게 출력될 수 있게끔 조정할 수 있다.
기타, `변수 이름 지정 포메팅`, `객체 속성 접근`,`딕셔너리 키 접근` 및 각종 자료형 지정 및 변경 및 자릿수등 다양한 방법 등은 나중에 따로 설명하기로 하고 이번에는 기본적인 `format()`사용 형식만 알아둔다.
`f-string` 방식
`f-string` 포매팅 방식은 파이썬 3.6에서부터 추가된 가장 최근에 적용된 문자열 포매팅 방법으로, 간결하고 가독성이 높은 문법을 제공하고 있어 기존의 `%` 연산자 방식이나 `format()` 메서드에 비해서 월등히 직관적이고 편리하게 사용항 수 있어 현재 가장 많이 사용되고 있는 문자열 포매팅 방식이다.
`f-`string` 방식의 가장 큰 장법은 문자열 안에 변수나 표현식을 직접 삽입할 수 있다는 것으로, 문자열`" "`앞에 `f` 또는 `F`를 붙이고, 문자열 안에 중괄호 `{}`안에 변수를 넣어 값을 삽입할 수 있도록 하고 있다.
`f-string`기본 문법
f"문자열 {변수명} 포매팅"
`f-string`은 문자열 앞에 `f`를 먼저 붙여 f-string를 선언한 후, 문자열 안에`" "`에 적용할 변수명 또는 표현식을 중괄호 `{}`로 감싸서 해당 값이 문자열에 삽입되도록 한다.
기본적인 사용 예시 코딩
name = "돌출과 회전"
url = "esajin.kr"
age = 50
# f-string 방식으로 {변수명}으로 문자열 포매팅
print(f"나이는 {name} 이고, 이름은 {age} 이고, 주소는 {url} 이다.")
나이는 돌출과 회전 이고, 이름은 50 이고, 주소는 esajin.kr 이다.
`%` 연산자나 `format()` 메서드에서는 찾아볼 수 없는, 아주 가독성 좋고, 단순하게, 코드가 표현될 수 있도록 문자열 중간에 중괄호 `{}`로 변수 `name`와 `age`, `url`의 감싸 문자열에 그대로 삽입되어 사용하게 된다.
`f-string`로 표현식 및 함수 사용 예시
x = 10
y = 5
print(f"x + y = {x + y}") # 표현식 사용
x + y = 15
name = "esajin.kr"
print(f"이름을 대문자로: {name.upper()}")
이름을 대문자로: ESAJIN.KR
`f-string`은 단순한 변수 대입뿐만 아니라, 복잡한 표현식도 직접 사용할 수 있도록 하고 있어, 별도의 변수에 수식을 계산하지 않고도, `f-string`를 통해 계산식이나 함수 호출이나 메서드를 사용하여 문자열에 바로 적용할 수 있다.
`f-string`은 앞에서 확인했듯이 기존 문자열 포매팅 방식보다 코드가 훨씬 간격하고 직관적이고, 중괄호 `{}`를 사용하여 변수나 표현식, 합수 및 메서드 등을 사용하여 바로 출력할 수 있기에 코드의 가독성을 상당히 높일 수 있고, 상당히 유연하게 활용할 수 있다.
또한 `f-string`은 다른 포매팅 방식에 비해 빠른 속도를 가지고 있으며, 특히 많은 문자열을 포매팅할 때 성능이 뛰어나기 때문에 현재 `f-string`는 파이썬에 가장 효율적이고, 직관적인 문자열 포매팅 방식이기 때문에 이 글을 통해 `f-string`의 기본 문법부터 활용까지 익혀두기를 바란다.
f-string도 다른 문자열 포매팅 방식과 마찬가지로, 자료형 변경 및 자릿수등 다양한 기능을 제공하고 있으며, 이것 역시 다음 장에서 자세히 다뤄보겠다.
우리 같이 열심히 공부해 봅시다.
죽이 되는 것보다 밥이 되는 것을 목표로~~^^
위 내용은 공부하면서 이해한 내용과 단편적인 검색 지식으로 작성된 내용으로 글에 오류가 있을 수 있으며,
오류나 잘못된 정보가 있으면 언제든지 댓글 주시면 최대한 반영/수정하겠습니다.