-
[python] LBYL와 EAFP프로그래밍 언어/Python 2021. 8. 1. 21:36
오늘은 파이썬의 코딩 스타일인 LBYL과 EAFP에 대해 정리해보려고 한다.
현재 나는 프로그래머스에서 제공하는 파이썬 코테과정 6기를 참여하고 있다.
https://programmers.co.kr/learn/courses/12441
1주차 과제 문제를 풀고 현업 개발자 리더님에게 코드 리뷰를 받으면서 LBYL과 EAFP를 듣게 되었다.
이 LBYL과 EAFP를 처음 알아서 재미있기도 하고 정리해서 나중에 찾아 볼 일이 있을 것같아 정리를 하게 되었다.
1) LBYL이란?
먼저, LBYL이란 Look before you leap의 약어로 직역해보면 "뛰기 전에 보라"라는 뜻을 가지고 있다.
이러한 뜻을 가지고 있는 LBYL은 파이썬에서 코딩 스타일의 이름으로 쓰이는데
LBYL 코딩 스타일은 어떤 것을 실행하기전에 에러가 날만한 요소들을 조건문으로 검사를 하고 수행하는 스타일이다.
간단히 말하면 if-elseif-else을 사용하여 예외처리를 한다는 것이다.
다중쓰레드 환경에서는 LBYL이 looking과 leaping간에 경쟁 조건(race condition)을 만들게 될 리스크가 있다.
예를 들어 아래의 코드를 보면 왜 LBYL이 리스크를 야기하는지 알 수 있다.
if key in mapping: return mapping[key]
우리가 이 코드를 실행하고 mapping 리스트를 확인하기 전에 다른 쓰레드에서 mapping에서 key를 삭제했다면 이 코드를 fail된다.
이러한 LBYL의 문제점은 접근제한을 위한 lock을 사용하거나 아래에서 알아 볼 EAFP 접근법을 사용해야한다.
그래서 파이썬에서는 LBYL보다 EAFP를 권장한다. (PEP-0463)
2) EAFP
EAFP란 Easier to ask for forgiveness than permission의 약어로 직역해보면 "허락보다는 용서를 구하기가 쉽다"라는 뜻을 가지고 있다.
이러한 뜻을 가지고 있는 EAFP는 파이썬에서 코딩 스타일의 이름으로 쓰이는데
EAFP 코딩 스타일은 예외처리를 활용하여 검사를 수행하지 않고 일단 실행하고 예외처리를 진행하는 스타일이다.
간단히 말하면 try-except를 사용하여 예외처리를 한다는 것이다.
try: mapping[key] except KeyError: print("존재하지 않는 key입니다.")
위에서 본 LBYL을 EAFP 스타일로 고치면 위와 같은 코드로 표현할 수 있다.
<참고 자료>
https://docs.python.org/3.5/glossary.html#term-lbyl
https://docs.python.org/3.5/glossary.html#term-eafp
https://suwoni-codelab.com/python%20%EA%B8%B0%EB%B3%B8/2018/03/06/Python-Basic-EAFP/
'프로그래밍 언어 > Python' 카테고리의 다른 글
[python] deque 사용해보기 (0) 2021.07.30 [python] heapq 모듈 사용해보기 (0) 2021.07.25 딕셔너리 모듈 (defaultdict, Counter) (0) 2021.07.15