어떤 언어를 사용하던 문자열 포맷팅은 꽤 짜증스러운 부분입니다. 화면에 출력을 하던 파일에 내용을 쓰던 다양한 문자열 포맷팅을 사용해야만 합니다. 문자열 포맷팅이 데이터베이스와 같이 민감한 요소를 액세스 하는데 사용된다면 (가령 쿼리 문장 같은...) 포맷팅 이전에 SQL Injection 과 같은 악의적인 공격도 감안해야 하기 때문에 더 신경을 써야만 합니다.
자바스크립트를 오랫동안 사용하면서 유레카를 외쳤던 때가 있었습니다. 물론 자바스크립트도 계속 진화하고 있기 때문에 Wow 한 순간들이 여러번 있었지만, 그 중에서도 가장 기억에 남는 것은 ES6 에서 도입된 템플릿 문자열이었습니다. 일반적으로 변수를 선언하거나 문자열을 만드는 과정에 백틱(`)을 이용해 변수나 메서드를 변수에 직접 바인딩 할 수 있게 해주는 방법이었습니다.
// Javascript ES6 에 도입된 템플릿 문자열
console.log(`Default ENV value is ${process.env.MY_VALUE}`);
파이썬으로 코드를 만들면서도 <당연히> 문자열을 핸들링 해야 하는 상황이 계속 발생했습니다. 디버깅 로그에서부터 사용자 콘솔 화면에 뿌려줄 응답 결과, 데이터베이스 쿼리문에 까지 당연한 일이었습니다. 오래전 방식으로 문자열을 + 로 연결하는 작업을 하다보니 `ES6 에서의 템플릿 문자열 같은게 없을까?`하는 궁금증이 생겼습니다. 네, 이 글을 적고 있으니 당연히 방법을 찾았겠지요?
자바스크립트에서 ES6 이상에서만 템플릿 문자열을 쓸 수 있는 것처럼 파이썬 역시 Python 3.6 이후 버전에서 비슷한 역할을 하는 f-Strings 가 추가되었습니다. f-Strings 라고 이름 붙인 연유는 찾아보지 않았지만 문자열을 묶어주는 따옴표 앞에 f 를 붙여야만 이 기능을 쓸 수 있기 때문에 그냥 그렇게 이름을 지었구나... 참 엔지니어스럽다 라는 생각을 하고 넘어갔습니다.
# Print 문에서 f-Strings 사용하기
print(f"- Start update : {_domain}/{_property}")
# 문자열에서 f-Strings 사용하기
log += f"- Start update : {_domain}/{_property}\n"
# f-Strings 로 LIST 바인딩하기
log += f"- No metadata found ({result['title']})\n"
대표적으로 f-Strings 를 사용한 예시들입니다. 문자열이 필요한 모든 곳에 사용할 수 있습니다. 자바스크립트 ES6 에서는 ${} 였다면 파이썬 에서는 {} 입니다. 브레이스 안쪽에는 직접 변수명이 들어가거나 내부 함수, 메서드 등이 모두 활용될 수 있습니다. 이런 형태의 문자열 조립이 좋은 이유는 정확하게 출력되는 결과를 인지할 수 있다는 점이겠지요? 아래와 같은 형태에서는 가독성도 떨어지고 무슨일이 일어날지 짐작하기가 어려우니까요.
print("- Start update : " + _domain + "/" + {_property})
log += "- No metadata found (" + result['title'] + ")\n"
[ 윤작가님의 베스트셀러 파이썬 서적으로 고고씽! ]