Search

클린코드를 위한 간단한 팁 3가지

Intro

클린 코드를 위해 쉽게 적용 가능하지만 효과가 좋은 몇 가지 팁을 공유한다.

1. 드 모르간의 법칙

드 모르간의 법칙을 이용하면 조건문을 좀 더 읽기 쉽게 바꿀 수 있다.
드 모르간의 법칙 1. NOT(A AND B) = NOT(A) OR NOT(B) 2. NOT(A OR B) = NOT(A) AND NOT(B)
# Don't if not required_one or not required_two: print("Provide all required values") # Do if not (required_one and required_two): print("Provide all required values")
Python
복사
부정표현을 OR 조건으로 연결하는 것 보다는 드 모르간의 법칙으로 치환하는 것이 더 쉽게 이해된다.

2. 불리언 보다 enum

어떤 객체의 상태를 표현할 때, 선택지가 두 개라면 쉽게 불리언(boolean)을 떠올리게 된다.
예를 들어, 유저가 1)activated 상태와 2)deactivated 상태를 가질 수 있다고 하자.
유저가 회원가입을 했을 때는 1)activated 상태고, 회원탈퇴를 한 경우는 2)deactivated 상태다.
쉽게 user의 상태를 is_activated라는 불리언 값으로 표현할 수 있다.
하지만 이런 경우 선택지가 두 가지 일지라도 enum을 사용하는 것이 더 좋다.
만약 유저가 회원가입 이전에 인증을 거쳐야하고, 이 때 3)pending이라는 유저 상태가 추가 되었다고 하자.
그럼 이 때 is_activated 값은 어떻게 해야할까? null로 처리해야 할까?
또 정상적으로 회원가입이 되었다고 해도 is_activated 값이 False인 경우를 해석하는 것이 모호하다.
논리적으로 보면 2)deactivated 상태와 3)pending 상태 모두 is_activated = False에 해당한다.
따라서 불리언이 필요한 상황에서는 대부분 enum으로 처리하는 것이 더 명확하고 유연한 해결책이 된다.
좀 더 자세한 내용은 아래의 글을 참고하면 된다.

3. 상한 조건은 exclusive하게

날짜나 숫자에 대한 상한 조건(upper bound)은 exclusive하게 설정하는 것이 좋다.
exclusive하다는 말은 조건에서 해당 값을 제외한다는 의미다.
# Don't datetime.now() <= datetime(2023, 12, 31) -- (1) # Do datetime.now() < datetime(2024, 1, 1) -- (2)
Python
복사
만약 오늘이 아직 2024년이 아닌지 확인하고 싶다면, 아래의 조건(2)을 이용해야한다.
위의 조건(1)은 12월 31일 00시 00분 00초 이하인 경우를 표현하고 있다.
만약 12월 31일 00시 00분 00초에서 1초만 지나더라도 원하는 결과를 얻을 수 없다.
# Don't age <= 1 -- (1) # Do age < 2 -- (2)
Python
복사
이번에는 나이를 표현하는 예시다.
일반적으로 나이는 정수로 표현하지만 영유아의 경우 개월수로 표현하기도 한다.
따라서 위의 조건(1)은 1살 x개월을 포함하지 않는다.
만약 2살 미만을 표현하고 싶은 것이라면 아래의 조건(2)을 사용하는 것이 좋다.
위의 두 가지 경우는 시간 개념 때문에 각 구간의 경계가 불연속적(discrete)으로 구분되지 않는다.
디지털로 표현된 시간은 불연속적으로 표현되지만 시간이라는 특성상 논리적인 실수가 자주 발생한다는 의미다.
따라서 시간 표현에 대한 조건문을 만들 때 상한 경계에 대해 유의하는 습관을 들여야 한다.