로맨스 영화를 보면, 썸타던 남녀 주인공이 속시원하게 1일을 시작하지 않는다. 쭈뼛 쭈뼛, 뱅뱅 돌리고 돌리면서 애간장을 태우다가 꼭 무슨 사고가 발생한다. 사고를 간신히 무사히 넘긴 뒤에 남자 주인공과 여자 주인공은 한 숨 돌리며 서로의 존재에 안도한다. 눈빛을 교환하고, 점점 면상이 가까워 진다. 남주가 여주 입술에 입을 맞춘다. 여주는 남주를 밀친다. 당황한 남주의 싸다귀를 후려 갈긴다. 그리고 더 과격하게 키스를 때린다. 이 바보!...BGM 재생...영상미 풀 가동...
이 장면에서 EAFP를 떠올렸다면 당신은 SW 개발자다.
다음은 EAFP와 LBYL에 대한 내용을 설명한 파이썬 가이드 일부이다. 난 EAFP를 선호한다. 키스해도 되냐고 물어보는게 뭐야. 진짜 싫어.
EAFP
허락보다는 용서를 구하기가 쉽다 (Easier to ask for forgiveness than permission). 이 흔히 볼 수 있는 파이썬 코딩 스타일은, 올바른 키나 어트리뷰트의 존재를 가정하고, 그 가정이 틀리면 예외를 잡습니다. 이 깔끔하고 빠른 스타일은 많은 try와 except 문의 존재로 특징지어집니다. 이 테크닉은 C와 같은 다른 많은 언어에서 자주 사용되는 LBYL 스타일과 대비됩니다.
try:
start(tongue, french, 1500)
except RejectError as reject:
raise SystemError from reject
LBYL
뛰기 전에 보라 (Look before you leap). 이 코딩 스타일은 호출이나 조회를 하기 전에 명시적으로 사전 조건들을 검사합니다. 이 스타일은 EAFP 접근법과 대비되고, 많은 if 문의 존재로 특징지어집니다.
다중 스레드 환경에서, LBYL 접근법은 《보기》와 《뛰기》 간에 경쟁 조건을 만들게 될 위험이 있습니다. 예를 들어, 코드 if key in mapping: return mapping[key] 는 검사 후에, 하지만 조회 전에, 다른 스레드가 key를 mapping에서 제거하면 실패할 수 있습니다. 이런 이슈는 록이나 EAFP 접근법을 사용함으로써 해결될 수 있습니다.
if (handle != null) {
start(tongue, french, 1500);
}
'기술 이야기' 카테고리의 다른 글
파이썬 빠르게 제대로 익히는 방법 (0) | 2022.04.07 |
---|---|
브라우저로 텔레그램 챗봇 만들기 (0) | 2022.02.02 |
SOLID - SRP 단일 책임의 법칙 (0) | 2021.04.07 |
python coverage with unittest 적용하기 feat. travis (2) | 2021.01.11 |
[Python] Pacakge에서 모듈간 import 에러 __init__.py 순서 (0) | 2020.11.08 |
mDNS, DNS-SD - Discovery 문제 IGMP를 확인하자 (0) | 2020.06.25 |
[.NET] A callback was made on a garbage collected delegate of type (0) | 2020.06.11 |
댓글