프리코스를 위한 나만의 과제 가이드

박세건·2023년 10월 16일
0

우테코 깃허브를 참고해서 작성하였습니다.

깃허브 제출 순서

1. 우테코 깃허브의 저장로를 fork(우측 상단 fork 버튼 클릭)

2. fork한 저장소를 내 컴퓨터로 clone(복제) 한다(cmd에 입력)

git clone https://github.com/{본인_아이디}/{저장소 아이디}.git
ex) git clone https://github.com/PARKSEGUN/java-onboarding-test.git

클론 폴더로 이동(이동 상태를 유지한 상태로 밑에 과정 진행)

// clone한 폴더로 이동하는 방법
cd {저장소 아이디}
ex) cd java-baseball-test

3. 기능 구현을 위한 브랜치 생성(cmd에 입력)

git checkout -b {본인 아이디, 깃허브 아이디, parksegun}
ex) git checkout -b javajigi

4. 통합 개발 환경(IDE, 인텔리제이)으로 가져오기

  • 메뉴에서 File -> New -> project from existing sources...
  • 클론한 파일 선택
  • import project from external model 선택
  • Gradle 선택
  • 빌드가 정상적인지 확인

5. 기능 구현

  • 기능 구현

6. 기능 구현 후 add, commit(cmd 사용)

git status // 변경된 파일 확인
git add -A(또는 .) // 변경된 전체 파일을 한번에 반영
git commit -m "메시지" // 작업한 내용을 메시지에 기록

7. 본인 원격 저장소에 올리기(cmd 사용)

커밋은 로컬에만 반영되기때문에 깃허브에도 적용하기위해 push

git push origin (브랜치 이름, parksegun)
ex) git push origin parksegun

적용하면 깃허브에 내 이름으로된 브랜치가생성되고 수정한 부분이 push 된다.

8. github 서비스에서 Pull Request를 보낸다.

푸쉬를 진행했기때문에 woowacourse의 저장소로 Pull Request를 보내준다.
pull Request 하라는 문구가 보이지 않는다면

클릭후 New Pull Request 클릭 후 수정된 부분을 보낸다

  • 제목 : [$미션제목] $이름 미션 제출합니다.
    ex(온보딩] 박세건 미션 제출합니다.

!!!!여기까지 진행후 지원 플랫폼에 과제 제출

제출가이드 필히 읽기!

5기 선배분들의 1주차 회고록을 읽고..

5기 선배분들은 1주차 문제를 마주하고 어떻게 문제를 해결했으며 어려움점은 무엇이였는지, 무엇을 경험했는지를 알기위해 선배분들의 1주차 회고록을 읽게되었다.
회고록을 읽고 느낀점을 정리해보자 한다.
회고록 1번
회고록 2번
회고록 3번
회고록 4번

기능 요구 사항에 기재되지 않은 내용은 '스스로 판단'하여 구현한다.

  • 위와 같은 진행 방식이 있기때문에 '모호함'이 의도될 수 있으니 주의하자.
  • 요구사항으로 인해 개발자의 주관으로 결정해야하는 사항이 존재할 수 있다.
  • 문제에는 주어지지 않았지만 반드시 다뤄져야할 예외 상황들도 존재할 수 있다.

기능 단위로 commit을 해야한다는 것

  • commit 메시지를 보고 어떤 기능인지 알 수 있도록 작성
    ex)
<type>(<scope> 여기 문제 번호): <short summary>

type

  • feat : 새로운 기능 추가
  • fix : 버그 수정
  • docs : 문서 관련
  • style : 스타일 변경 (포매팅 수정, 들여쓰기 추가, …)
  • refactor : 코드 리팩토링
  • test : 테스트 관련 코드
  • build : 빌드 관련 파일 수정
  • ci : CI 설정 파일 수정
  • perf : 성능 개선
  • chore : 그 외 자잘한 수정

기능 목록 작성하고 설계하는 것을 추천

아래와 같은 순서로 작성해보자

  • 요구사항을 파악한다.
    ex) 어떤 입력값이 주어지는지, 무엇을 반환해야 하는지, 추가적인 조건은 없는지
  • 프로그램의 흐름을 작성한다.
  • 필요한 함수 목록을 작성한다.
  • 필요한 함수의 구현 방식을 생각해 작성한다.
  • 기능을 구현한다.

기능이나 변수에 대해 설명 해주는 주석을 사용해보자

코드를 작성할 때에 주석을 사용해보자.
주석 내용은 이전에 작성했던 기능 목록 작성 내용을 이용해서 작성해보자.
주석은 가독성을 늘려주기때문에 내 코드를 검사할 분들을 위해서 주석을 사용하자

어떤 기능을 담당하는 지, 어떤값을 파라미터로 가져왔는지, 어떤 값을 리턴하는지

시간이 남는다면 docs에 함수와 클래스에대한 설명이나 체크리스트를 만들자.

  • 기능 목록 작성 + 데이터 유효성 검사에 대한 체크리스트
    데이터 유효성 검사 : 올바른 데이터가 들어왔는지 확인 제한사항을 확인하고 빠진 부분 잡아내기
    기능 목록 : 문제를 해결하기위해 필요한 기능(함수)들

ex)

- [ ]  데이터 유효성 검사
    - [x]  ~~배열이 아닌 다른 형식의 데이터가 들어왔을 때~~
        - 함수의 파라미터 타입이 List<Inteager> 이기 때문에 이러한 예외 사항은 없을 것이다
    - [x]  배열이지만 원소가 2개가 아닐 때
    - [x]  입력한 페이지 수가 한 페이지 차이가 아닐 때
    - [x]  왼쪽 페이지가 홀수가 아니고, 오른쪽 페이지가 짝수가 아닌 경우
    - [x]  400페이지를 넘어간 경우
    - [x]  0 이하의 값을 입력한 경우
- [x]  pobi 왼쪽, 오른쪽 값 계산 → 큰 값 결정
- [x]  crong 왼쪽, 오른쪽 값 계산 → 큰 값 결정
- [x]  pobi와 crong 중 큰 사람 결정
- [x]  결과 return
    - [x]  pobi가 더 크다면 1 리턴
    - [x]  crong이 더 크다면 2 리턴
    - [x]  동일하다면 0 리턴

클래스, 함수, 변수명은 변수가 담당하는 의미를 알 수 있게 설정해보자

가능한Object Calisthenics Rule 1: One level of indentation per method 규칙을 지켜보자

  • 한 메서드에 오직 한 단계의 들여쓰기만
    재사용성과 가독성을 위해서 유지해서 작성해보자

느낀점이나 회고록을 쓰기위한 메모

코딩 문제를 해결하면서 검색해보거나 사용했던 방법을 메모해서 회고록이나 느낀점을 더 효율적으로 작성할 수 있게 하자

나만의 테스트 케이스를 만들어서 테스트해보기

문제를 연습해보면서 제시해주는 테스트를 통과하지만 내가 생각해서 만든 테스트를 통과하지 못하는 경우가 있었다.
나만의 반례를 만들어서 테스트해보자!

시간이 남는다면 작성 코드를 다시한번 확인하고 회고록 작성

  • 오류가 발생하지않았지만 그래도 발견하지 못했던 예외사항이 있을 수 있기때문에 시간이 남는다면 코드를 다시 한번 확인하자
    코드를 다시 한번 보면서 더 효율적인 방법을 찾고 수정할 수 있기 때문.

  • 우아한테크코스의 중요하게보는 '회고'에 대해서 작성하면서 다시 한번 배운점에 대해서 상기 시킬 수 있기때문에 느낀점을 적고 제출 할 때에 도움이 될것이고 다른 분들에게도 분명히 도움이 될것이기때문에 작성해보자.

제출하기 하루이틀 전에 진행!

자바 명명 규칙(출처)

  1. 메소드명에는 파스칼 표기법을 사용한다.
    (ex. public void SendMessage(String message) {} )
  2. 속성에 접근하는 메소드명의 접두사는 'get','set'을 사용한다.
    (ex. public void setDisplayName)
    (ex. public void getDisplayName)
  3. 데이터를 조회하는 메소드명의 접두사는 find를 사용한다.
    (ex. public void findData(String data){})
  4. 데이터를 입력하는 메소드명의 접두사는 input을 사용한다.
    (ex. public void inputData(HashMap data){})
  5. 데이터를 변경하는 메소드명의 접두사는 modify를 사용한다.
    (ex. public void modifyData(HashMap data){})
  6. 데이터를 삭제하는 메소드명의 접두사는 delete를 사용한다.
    (ex. public void deleteData(String data){})
  7. 데이터를 초기화 하는 메소드명의 접두사는 initialize을 사용한다.
    (ex. public void initData(String data){})
  8. 반환값의 타입이 boolean인 메소드는 접두사로 is를 사용한다.
    (ex. public void isData(String Data){})
  9. 데이터를 불러오는 메소드명의 접두사는 load를 사용한다.
    (ex. public void loadData(){})
  10. 데이터가 있는지 확인하는 메소드명의 접두사는 has를 사용한다.
    (ex. public void hasData(){})
  11. 보다 지능적인 set이 요구될때 사용하는 메소드명의 접두사는 register를 사용한다.
    (ex. public void registerAccount(){})
  12. 새로운 객체를 만든뒤 해당 객체를 리턴해주는 메소드명의 접두사는 create를 사용한다.
    (ex. public void createAccount(){})
  13. 해당 객체를 다른 형태의 객체로 변환해주는 메소드명의 접두사는 to를 사용한다.
    (ex. public void toString(){})
  14. 해당 객체가 복수인지 단일인지 구분하는 메서드명의 접미사는 s를 사용한다.
    (ex. public void getMembers(){})
  15. B를 기준으로 A를 하겠다는 메소드명의 전치사는 By를 사용한다.
    (ex. public void getUserByName(String name){})

클린 모드 체크리스트

  • 한 메서드에 오직 한 단계의 들여쓰기(indent)만 허용했는가?

  • else 예약어를 쓰지 않았는가?

  • 모든 원시값과 문자열을 포장했는가?
    참고
    간단하게 객체 내의 모든 원시 요소를 캡슐화하기만 함면된다.
    원시 요소란,

int age = 20;	//원시타임의 변수 선언
Age age = new Age(20);	/원시 타입의 변수를 객체로 포장한 변수 선언
  • 콜렉션에 대해 일급 콜렉션을 적용했는가?
    참고
    일급 컬렉션이란, 컬렉션을 포함하는 해당 Class는 컬렉션을 제외한 다른 멤버 변수를 포함하지 말아야 합니다.
    콜렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다.
  • 3개 이상의 인스턴스 변수를 가진 클래스를 구현하지 않았는가?
    쉽지 않은 연습일 수 있다. 가능하면 인스턴스 변수의 수를 줄이기 위해 노력한다.
  • getter/setter 없이 구현했는가?
    묻지 말고 시켜라
    핵심 로직을 구현하는 도메인 객체에 getter/setter를 쓰지 않고 구현했는가?
    단, DTO는 허용한다.
  • 메소드의 인자 수를 제한했는가?
    4개 이상의 인자는 허용하지 않는다.
    3개도 가능하면 줄이기 위해 노력해 본다.
  • 코드 한 줄에 점(.)을 하나만 허용했는가?
    디미터(Demeter)의 법칙(“친구하고만 대화하라”)을 지켰는가?
    예를 들어 location.current.representation.substring(0, 1)와 같이 여러 개의 점(.)이 등장하면 리팩토링할 부분을 찾아본다.
  • 메소드가 한가지 일만 담당하도록 구현했는가?
  • 클래스를 작게 유지하기 위해 노력했는가?
    클래스는 50줄을 넘지 않게 하나의 패키지에 10개이상의 파일이 담기지 않기를 권장한다.
  • 줄여 쓰지 않는다(축약 금지)
    이름이 길어진다면 그 역할이 너무 많은 기능을 갖고있는 것은 아닌지 고민할 필요가있다.
    의미전달이 명확한게 더 중요하기 충분히 길어도된다.

느낀점...

  • 커밋 메시지 작성

  • 구현 기능 목록 작성(기능 명세)

  • 커밋 메시지 작성

  • 네이밍 처리

  • 클린 코드 규칙

프리모스 오리엔테이션을 보고...

중요하게생각하는것

  • 자기주도
  • 프리코스를 통해 역량을 키우는 것
  • 올인해보자
  • 미치는 경험을 해보자
  • 1주차 내용에 관한 리뷰나 소통 등은 2주차에 진행
profile
멋있는 사람 - 일단 하자

0개의 댓글