[pre-course] 최종코테 준비 - 실전

오잉·2022년 12월 15일
0

우아한테크코스

목록 보기
2/7

최종코테 시험장에 들고갈 용도

안 돌아가는 프로그램보다 돌아가는 쓰레기

시간 내에 모든 기능 요구 사항을 충족하기 위해 최선을 다하세요.
안 돌아가는 프로그램보다 돌아가는 쓰레기를 만들어도 괜찮아요.
그런 다음 클린 코드, 리팩터링, 테스트 등을 챙기는 거예요.


제출 방법

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사용예시

2) InputView (input 받기 전 안내문구는 그냥 여기서 출력하는게 나을듯)

3) inputValidator 만들기만 하고 예외처리 x

4. repository 구현 (30)

1) save, delete, deleteAll

2) findByXXX

5. domain 구현

  • 각 객체가 직접 일하게 하자1

  • 각 객체가 직접 일하게 하자2

  • 객체 예시

  • 만약 enum 사용할거면

  • enum 복잡한 예시
    연관성이 있는 상수는 static final 대신 enum을 활용한다

  • Repository에 의존

  • Generator

  • Validator

6. controller -> 종합


week2영상) 기능목록

  • 객체지향 프로그래밍
      1. 기능을 가지고 있는 클래스를 인스턴스화(=객체)한다
      1. 필요한 기능을 (역할에 맞는) 인스턴스가 수행하게 한다 (의인화)
      1. 각 결과를 종합한다

세부 사항

  • 기능 목록 작성
  • 기능들 이름 정하기
  • 이 기능들을 어떤 클래스에 모을까
  • 각 기능별로 뼈대 만들기
  • 커밋 feat(baseball): create skeleton code
  • 구현1 -> 테스트 -> 커밋 feat(baseball): 서로 다른 임의의 수 3개를 생성하는 기능 구현
  • 구현2 -> 테스트 -> 커밋 feat(baseball): 몇 개의 숫자가 같은지 알 수 있는 기능 구현
    ...

여기까지가 1. 기능을 가지고 있는 클래스를 인스턴스화(=객체)한다, 2. 필요한 기능을 (역할에 맞는) 인스턴스가 수행하게 한다(의인화)
이제부터 3. 각 결과를 종합한다 !!

  • 결과 종합 -> 커밋 feat(baseball): 기능 완성

profile
오잉이라네 오잉이라네 오잉이라네 ~

0개의 댓글