오늘 한 것

  • "좋은 코드 나쁜 코드" 3장 읽기.

 

좋은 코드 나쁜 코드의 3장에서는 코드 계약에 대해 설명한다.
코드 계약은 명확한 부분과 세부 조항으로 나눌 수 있다.
명확한 부분은 클래스, 함수의 이름, 반환값, 인자 및 반환 유형, 검사 예외(컴파일 타임) 등이 해당한다.
세부 조항은 사용하기 위한 조건이나 환경등을 기술한 주석문, 문서, 비검사 예외(런타임) 등이 해당한다.
이 장에서는 코드 계약을 다른 개발자에게 전달하기 위한 여러 기법에 대해 소개한다.
주석, 문서화, 코드 등의 수단을 활용해 코드 계약을 작성할 수 있다.
다른 개발자들이 내가 작성한 코드를 올바르게 이해하고 사용하게 도와주는 방법으로 가장 좋은 것은 코드에 의도를 충분히 담는것이다.
주석이나 문서를 통해 코드 계약을 전달하는 것은 가급적 피하는것이 좋다.
업데이트가 되지 않는다면 다른 개발자에게 오히려 혼란만 가중시키기 때문이고 무엇보다 읽지 않을 수 있다. 이런 상황에서 코드 계약대로 사용해주기를 기대하기는 어렵다.
의존성 주입, 정적 팩토리 메서드 생성자, 예외 등을 활용해 애초에 의도하지 않은 상황을 차단하는 것이 버그가 침투하는 것을 더 효과적으로 막을 수 있다.

 


오늘 배운 것

1. 좋은 코드 나쁜 코드 - 3장 코드 계약

요약

  • 코드베이스는 계속 변하고 일반적으로 여러 개발자에 의해 변경된다
  • 다른 개발자가 코드를 잘못 사용하는 경우를 생각해보고 이런 상황을 최소화하는 방식으로 코드를 만드는것이 좋다.
  • 코드 계약의 세부 조항은 개발자가 코드를 올바르게 사용하게 만들기 위한 방법이지만 신뢰할 수 있는 방법은 아니다. 더 나은 접근법은 명백한 항목으로 계약의 내용을 전달하는 것이다.
  • 일반적으로 컴파일러를 사용해 계약을 확인하는 것이 가장 신뢰할 수 있는 방법이다. 이것이 불가능할 경우 체크, 어서션을 사용하여 런타임에 계약을 확인할 수 있다.

유의할 점

  • 자신에게 분명하다고 해서 다른사람에게도 분명한 것은 아니다
  • 다른 개발자는 무의식중에 나의 코드를 망가뜨릴 수 있다
  • 시간이 지나면 자신의 코드를 기억하지 못한다

다른 개발자가 내가 작성한 코드를 사용하기 위해 알아야 하는 것

  • 여러 가지 상황에서 어떤 함수를 호출해야 하는지
  • 클래스가 무엇을 나타내며 언제 사용되어야 하는지
  • 어떤 값을 인수로 사용해야 하는지
  • 코드가 수행하는 동작이 무엇인지
  • 어떤 값을 반환하는지

다른 개발자가 내 코드의 사용법을 알아내기 위해 취할 수 있는 방법

  • 함수, 클래스, 열거형 등의 이름을 살펴본다
  • 함수, 생성자, 매개변수 유형 또는 반환값의 유형 같은 데이터 유형을 살펴본다.
  • 함수/클래스 수준의 문서나 주석문을 읽어본다.
  • 직접 와서 물어보거나 메신저로 문의한다
  • 내가 작성한 함수와 클래스의 구현 코드를 읽는다.

코드 계약

  • 선결 조건
  • 사후 조건
  • 불변 사항

계약의 명확한 부분과 세부 조항

명확한 부분

  • 함수와 클래스 이름
  • 인자 유형
  • 반환 유형
  • 검사 예외

세부 조항

  • 주석문과 문서
  • 비검사 예외

 

'TIL' 카테고리의 다른 글

TIL-2023.01.06  (0) 2023.01.06
TIL-2023.01.05  (0) 2023.01.05
TIL-2023.01.03  (0) 2023.01.03
TIL-2023.01.02  (0) 2023.01.02
TIL-2021.02.18  (0) 2021.02.18