최종코테 시험장에 들고갈 용도
안 돌아가는 프로그램보다 돌아가는 쓰레기
시간 내에 모든 기능 요구 사항을 충족하기 위해 최선을 다하세요.
안 돌아가는 프로그램보다 돌아가는 쓰레기를 만들어도 괜찮아요.
그런 다음 클린 코드, 리팩터링, 테스트 등을 챙기는 거예요.
제출 방법
fork -> clone -> git checkout -b hanueleee -> ...기능 단위 커밋... -> push -> PR -> 지원플랫폼에서 내 지원 현황 -> 제출하기
https://github.com/woowacourse/woowacourse-docs/tree/main/precourse


기본 구조
- view (입출력)
- controller (총괄)
- domain (각 역할을 하는 객체들)
- repository (저장해둬야 하는 값)
유의사항
전체
- add하고 commit하는거 잊지 말기 ㅠㅠ 무지성 commit 금지!
- 중간중간 디버깅 하면서 하자 (테스트코드 & application)
- command + option + l (줄 정렬)
객체지향 관련
- 클래스 코딩 순서 : 상수 -> 멤버 변수 -> 생성자 -> 메서드
- final 키워드를 통해 값이 변경을 막는다
- 객체의 상태 접근 제한 (인스턴스 변수를 private으로)
- 비즈니스 로직과 UI로직을 분리한다
(현재 객체의 상태를 보기 위한 로그 메시지 성격이 강하다면 toString()을 통해 구현한다. View에서 사용할 데이터라면 getter 메서드를 통해 데이터를 전달한다.)
- 객체에서 데이터를 꺼내지(get)말고 메시지를 던지도록. 객체가 직접 일하도록!!
기타
- else 키워드 x (대신 return)
- equals 와 == 구분! (equals가 문자열 비교임)
네이밍관련
- 클래스는 명사
- 메소드는 동사 혹은 전치사
- 결과를 boolean으로 받는경우 메서드명을 is로 시작한다.
- 출력을 위해 값을 가져오는 경우 메서드명을 get으로 시작한다
- 변수 이름에 자료형 x ex. carNameList (x)
기능목록
- 기능목록
- 클래스 설계와 구현, 함수(메서드) 설계와 구현과 같이 너무 상세하게 작성x
- 너무 세세한 부분까지 정리x
- 구현해야 할 기능 목록을 정리하는 데 집중
- 정상적인 경우도 중요하지만, 예외적인 상황도 기능 목록에 정리
- 예외상황 : 기능 구현하면서 계속해서 추가하기
- 기능목록 업데이트
- 기능 목록은 기능 구현을 하면서 변경될 수 있다
- 기능을 구현하면서 문서를 계속 업데이트
google-java-styleguide
https://stealth-conifer-dd4.notion.site/google-java-styleguide-7fa868473b9d4459b20b2f04719d1ad0
순서
1. 기능목록 및 구조짜기 (45)
- 문제 요구사항 읽으면서 기능목록 작성
- ApplicationTest 먼저 확인 (여기 포함된 예외처리는 기능목록에 추가)
- 클래스 구조짜기 (view-controller-domain-repository)
- 구조보면서 기능들 이름 정하기 (class명#method명)
=> git commit -m "feat(docs): 기능목록 추가"
2. skeleton 구현 (15)
=> git commit -m "feat: 전체 뼈대 구현"
3. view 구현 (20)
- ** 도메인과 ui로직분리 (view와 model은 서로 의존하면 안된다) -> dto 만들기
1) OutputView (결과값 출력)

- printerror사용예시


4. repository 구현 (30)
1) save, delete, deleteAll

2) findByXXX

5. domain 구현
6. controller -> 종합

week2영상) 기능목록
- 객체지향 프로그래밍
- 기능을 가지고 있는 클래스를 인스턴스화(=객체)한다
- 필요한 기능을 (역할에 맞는) 인스턴스가 수행하게 한다 (의인화)
- 각 결과를 종합한다
세부 사항
- 기능 목록 작성
- 기능들 이름 정하기
- 이 기능들을 어떤 클래스에 모을까
- 각 기능별로 뼈대 만들기
- 커밋 feat(baseball): create skeleton code
- 구현1 -> 테스트 -> 커밋 feat(baseball): 서로 다른 임의의 수 3개를 생성하는 기능 구현
- 구현2 -> 테스트 -> 커밋 feat(baseball): 몇 개의 숫자가 같은지 알 수 있는 기능 구현
...
여기까지가 1. 기능을 가지고 있는 클래스를 인스턴스화(=객체)한다, 2. 필요한 기능을 (역할에 맞는) 인스턴스가 수행하게 한다(의인화)
이제부터 3. 각 결과를 종합한다 !!
- 결과 종합 -> 커밋 feat(baseball): 기능 완성