테스트코드

숫자야구게임 - 단위테스트

2023. 3. 20. 18:41
목차
  1. 경험해야할 학습 목표
  2. 경험할 객체지향 생활 체조 원칙
  3. 함수(메소드)
  4. code convention, format 맞추기

경험해야할 학습 목표

  • 자바 code convention을 지키면서 프로그래밍하는 경험
  • JUnit 사용법을 익혀 단위 테스트하는 경험
  • 학습테스트를 하면서 JUnit 사용법을 익히는 경험
  • 메소드를 분리하는 리팩터링 경험

경험할 객체지향 생활 체조 원칙

이번 과정을 통해 연습할 원칙은 다음 두 가지이다.

  • 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다.
  • 규칙 2: else 예약어를 쓰지 않는다.

이 두가지 원칙을 통해 메소드를 분리해 메소드가 한 가지 작업만 담당하도록 구현하는 연습을 목표로 한다.
이 같은 원칙 아래에서 메소드의 라인 수를 15라인이 넘지 않도록 구현한다.

Clean Code 가이드

함수(메소드)

작게 만들어라.

  • 함수를 만드는 첫 번재 규칙은 '작게'다. 함수를 만드는 두 번째 규칙은 '더 작게'다.

한 가지만 해라.

  • 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만 해야 한다.

함수 당 추상화 수준은 하나로

  • 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장이 동일한 추상화 수준에 있어야 한다.
  • 코드는 위에서 아래로 이야기처럼 일해야 좋다.

서술적인 이름을 사용하라

  • 이름이 길어도 괜찮다.
  • 이름을 정하느라 시간을 들여도 괜찮다.
  • 이름을 붙일 때는 일관성이 있어야 한다.

함수 인수

  • 함수에서 이상적인 인수 개수는 0개(무항)이다. 다음은 1개이고, 다음은 2개이다.
  • 3개는 가능한 피하는 편이 좋다.
  • 4개 이상은 특별한 이유가 있어도 사용하면 안된다
  • 인수가 2 ~ 3개 필요한 경우가 생긴다면 인수를 독자적인 클래스를 생성할 수 있는지 검토해 본다.
Circle makeCircle(double x, double y, double radius);
Circle makeCircle(Point center, double radius);

side effect를 만들지 마라.

  • side effect는 많은 경우 예상치 못한 버그를 발생시킨다.

명령과 조회를 분리하라.

  • 함수는 뭔가를 수행하거나 답하거나 둘 중 하나만 해야 한다. 둘 다 하면 안된다.
  • 개체 상태를 변경하거나 아니면 개체 정보를 반환하거나 둘 중 하나다.

오류 코드보다 예외를 사용하라.

  • 오류 처리도 한 가지 작업이다.
    • 함수는 '한 가지' 작업만 해야 한다. 오류 처리도 '한 가지' 작업에 속한다.
    • 그러므로 오류를 처리하는 함수는 오류만 처리해야 마땅하다.
  • try/catch 블록은 원래가 추하다. 코드 구조에 혼란을 일으키며, 정상적인 동작과 오류 처리 동작을 뒤섞는다. try/catch 블록을 별도 함수로 뽑아내는 편이 낫다.
public void delete(Page page) {
    try {
        deletePageAndAllReferences(page);
    } catch (Exception e) {
        logError(e);
    }
}

반복하지 마라.

  • 중복은 소프트웨어에서 모든 악의 근원이다.

함수를 구현하는 방법은?

소프트웨어를 구현하는 행위는 여느 글짓기와 비슷하다. 논문이나 기사를 쓸 때는 먼저 생각을 기록한 후 읽기 좋게 다듬는다. 초안은 대개 서투르고 어수선하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다.

필자는 함수를 구현할 때도 마찬가지다. 처음에는 길고 복잡하다. 들여쓰기 단계도 많고, 중복된 루프도 많다. 인수 목록도 아주 길다. 이름은 즉흥적이고 코드는 중복된다. 하지만 필자는 그 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스도 만든다.

그런 다음 필자는 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메소드를 줄이고, 순서를 바꾼다. 때로는 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.

결국에는 앞에서 다룬 규칙을 따르는 함수를 얻을 수 있다. 처음부터 딱 짜내지 않는다. 그게 가능한 사람은 없으리라.

code convention, format 맞추기

형식을 맞추는 목적

  • code convention은 중요하다! 너무 중요해서 무시하기 어렵다.
  • code convention은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다.

적절한 행의 길이를 유지하라

가로 format 맞추기

  • 120자 정도로 행 길이를 제한한다.

팀 규칙

  • 모든 프로그래머는 자신이 선호하는 규칙이 있다. 하지만 팀에 속한다면 자신이 선호해야 할 규칙은 바로 팀 규칙이다.
  • 팀은 한 가지 규칙에 합의해야 한다. 그리고 모든 팀원은 그 규칙을 따라야 한다.

'테스트코드' 카테고리의 다른 글

숫자 야구 게임  (0) 2023.03.29
단위테스트  (0) 2023.03.20
  1. 경험해야할 학습 목표
  2. 경험할 객체지향 생활 체조 원칙
  3. 함수(메소드)
  4. code convention, format 맞추기
'테스트코드' 카테고리의 다른 글
  • 숫자 야구 게임
  • 단위테스트
ewok
ewok
ewok
기록장
ewok
전체
오늘
어제
  • 분류 전체보기
    • 웹개발 교육
      • HTML
      • CSS
      • JavaScript
      • Database
      • Java
      • jQuery
      • Ajax
      • Bootstrap
      • jsp
      • Spring
      • MyBatis
      • 프로젝트
    • JAVA
    • SpringBoot
      • 기초
      • AWS
      • 개인프로젝트
    • Spring Security
    • JPA
    • 테스트코드
    • Error
    • CS
      • 컴퓨터 구조
      • 이산수학
    • 알고리즘
      • 정리
      • Java
    • SQL
    • 자격증
      • SQLD
      • 정보처리기사
    • Git

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • branch
  • merge commit
  • 노랭이
  • sqld 자격증
  • SQLD
  • git bash
  • sqld 합격
  • 브랜치
  • org.hibernate.tool.schema.spi.CommandAcceptanceException
  • this
  • GIT
  • 생성자
  • 버전 관리
  • org.springframework.beans.factory.UnsatisfiedDependencyException
  • base

최근 댓글

최근 글

hELLO · Designed By 정상우.
ewok
숫자야구게임 - 단위테스트
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.