클린 코드의 기술

강현석·2023년 3월 11일
0

book-review

목록 보기
4/10
post-thumbnail

클린 코드의 기술

한줄평(★☆☆☆☆) - Clean Code 책이 더 좋은듯?


클린 코드 관련 책은 많이 읽었지만, 신간이라서 구매해보았다.
가격대에 비해서 책이 얇아서 매우 아쉽지만, 인상깊었던 내용 위주로 정리해보려고 한다.

효율성보다는 이식성을 선택한다

  • 유닉스 설계 원칙 중 하나
  • 이식성
    • 어떤 시스템 혹은 프로그램이 한 환경에서 다른 환경으로 이동했을 때 여전히 정상적으로 동작하는 능력
    • 이식성이 좋으면 효율성이 떨어짐 (반비례 관계)
  • 효율성보다 이식성을 선호함

예제

def calculate_average_age(*args):
	a = np.array(args)
	return np.average(a)

아래와 같은 이유로 이식성이 없음

  • 함수의 이름이 다른 문맥에서 사용될 만큼 일반적이지 않음
  • 외부 라이브러리 활용(numpy)
    • 사용자는 이 라이브러리를 설치하지 않았을 것이기 때문
def average(*args):
	return sum(args) / len(args)

아래와 같은 이유로 이식성이 있음

  • 함수의 이름이 일반적임
  • 라이브러리를 사용하지 않으므로, 라이브러리가 deprecated되도 걱정할 필요가 없음

단, 라이브러리를 사용함에 있어서 가치가 충분하다면 사용 가능

Captive user interface를 피한다

  • 유닉스 설계 원칙 중 하나
  • Captive User Interface
    • 프로그램의 주요 실행 흐름이 시작되기 전에 사용자의 상호작용을 요구함
      • input() 함수와 같은 프로그래밍 기능
    • 코드의 사용성 제한
      • 오직 사용자의 참여 후에만 동작하도록 설계되었기 때문
  • 코드를 Captive User Interface 뒤에 두면, 사용자와의 상호작용이 없을 때는 코드를 활용할 수 없음

예제

def your_life_expectancy():
	age = int(input('몇살인가요?'))
    
    if age < 85:
    	exp_years = 72 * 0.8 * age
    else:
    	exp_years = 22 - 0.2 * age
        
    print('당신의 기대 수명은 {exp_years} 년입니다.')
    
your_life_expectancy()

만약 기대수명을 그래프로 출력하고 싶다면?

  • 매번 수동으로 나이를 입력해서 결괏값을 별도로 저장해야 함

즉, 이 함수는 두 가지 일을 하고 있음 (사용자 입력, 기대수명 계산)

Captive User Interface를 제거하면?

def your_life_expectancy(age):  
    if age < 85:
    	return 72 * 0.8 * age
    return 22 - 0.2 * age
    
age = int(input('몇살인가요?'))

exp_years = your_life_expectancy(age)
print('당신의 기대 수명은 {exp_years} 년입니다.')

기대 수명을 계산하는 함수를 어디서든 활용할 수 있음

  • User Interface를 제거하여 이식성을 얻음
profile
볼링을 좋아하는 안드로이드 개발자

0개의 댓글