의식적인 연습의7가지 원칙
- 첫째, 효과적인 훈련 기법이 수립되어 있는 기술 연마
- 둘째, 개인의 컴포트 존을 벗어난 지점에서 진행, 자신의 현재 능력을 살짝 넘어가는 작업을 지속적으로 시도
- 셋째, 명확하고 구체적인 목표를 가지고 진행
- 넷째, 신중하고 계획적이다. 즉, 개인이 온전히 집중하고 '의식적'으로 행동할 것을 요구
- 다섯째, 피드백과 피드백에 따른 행동 변경을 수반
- 여섯째, 효과적인 심적 표상을 만들어내는 한편으로 심적 표상에 의존
- 일곱째, 기존에 습득한 기술의 특정 부분을 집중적으로 개선함으로써 발전시키고, 수정하는 과정을 수반
프리코스 3주차 진행 내용
- 1주차 - 프로그래밍 제약사항
- 자바 코드 컨벤션을 지키면서 프로그래밍한다
- indent(인덴트, 들여쓰기) depth 3이 넘지 않도록 구현한다. 2까지만 허용한다
- 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라
- 1주차 - 피드백
- space 도 convention 이다
- 불필요하게 공백 라인을 만들지 않는다
- git commit 메시지를 의미있게 작성한다
- 2주차 - 프로그래밍 제약사항
- 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다
- else 예약어를 쓰지 않는다
- 2주차 - 피드백
- java api 를 적극 활용한다
- 3주차 - 프로그래밍 제약사항
- 함수(또는 메소드)의 길이가 10라인을 넘어가지 않도록 구현한다
- indent(인덴트, 들여쓰기) depth 2이 넘지 않도록 구현한다.
- 함수(또는 메소드)의 인자 수를 3개까지만 허용한다.
- 3주차 - 피드백
- 상태 데이터를 가지는 객체에서 데이터를 꺼내려(get) 하지 말고 객체에 메시지를 보내라
* car.getPosition() == maxDistance;
* car.isMaxPosition(maxDistance);
- 상태 데이터를 가지는 객체에서 데이터를 꺼내려(get) 하지 말고 객체에 메시지를 보내라
- 요구사항 분석
- MD 파일로 구현할 기능 목록을 먼저 작성
꾸준히 진행할 하루 중의 일정 시간을 만들어야 한다
장난감 프로젝트 찾기 (문자열 덧셈 계산기)
1단계 - 단위테스트 연습
TDD 와 단위테스트는 다르다
내가 사용하는 API 사용법을 익히기 위한 학습 테스트에서 시작
내가 구현하는 메소드 중 input output 이 명확한 클래스 메소드 (utill)2단계 - TDD 연습
자신에게 친숙한 것을 먼저
웹, UI, DB 와 의존성이 없는 프로젝트3단계 - 메소드 리팩토링
정성적인 기준보다는 정량적이고 측정 가능한 방법으로 연습
메소드의 라인수 제한
else 사용하지 않기
local 변수가 꼭 필요한가?
Compose pattern 으로...함수의 추상화를 모두 같은 단계로 만들기요구사항 추가
음수가 들어오면 RuntimeException 발생
모든 원시값과 문자열을 포장한다4단계 - 장난감 프로젝트 난이도 높이기
로또
사다리 타기
볼링 게임 점수판
체스 게임
지뢰 찾기 게임5단계 - 의존관계 추가를 통한 난이도 높이기
메인 메소드 실행시키지 않고 완성시키기
컴파일 에러를 최소화
ATDD 기반으로 프로그래밍
레거시 코드를 TDD 로 만들어보기
객체지향 생활체조 원칙
- 한 세머드에 오직 한 단계의 들여쓰기만 한다
- else 예약어를 쓰지 않는다
- 모든 원시값과 문자열을 포장한다
- 한 줄에 점을 하나만 찍는다
- 줄여쓰지 않는다 (축약금지)
- 모든 엔티티를 작게 유지한다
- 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다
- 일급 콜렉션을 쓴다
- 케터/세터/프로퍼티를 쓰지 않는다
참고: 마틴 파울러 - 소트웍스 앤솔러지
ps. 메소드 인자 개수는 0개가 가장 좋다