Skip to content

우애 2기 팀원들의 코딩테스트 스터디를 위한 코드 저장소

License

Notifications You must be signed in to change notification settings

modern-agile-team/coding-test-study-2term

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 

Repository files navigation

💻 우아한 애자일 2기 코딩테스트 스터디

의지가 있는 학생들을 선별하여 ‘SW 개발 전문 동아리’인 ‘우아한 애자일’을 개설하였다.

  • 동아리명 : 우아한 애자일
  • 활동 기간 : 2021.05.03(월) ~ 2022.01.31(월)
  • 기수 : 2기

👨🏻‍💻 우아한 코더


💡 동아리 활동

  1. 주 5일 미팅 : 매일 “어제 한 일, 오늘 할 일”에 대한 대화를 나누며 스터디를 진행합니다.
  2. 테크톡 : 모두가 IT 강사가 되어 2주에 한 번씩 기술 강연을 진행합니다. 맡은 Topic에 대해서는 전문가가 될 정도로 공부하여 서로에게 지식을 나누어줍니다. “내가 할 공부를 남이 대신 해주어서 공부할 시간을 단축하고 효율을 높이자”는 취지입니다.
  3. 코딩 컨벤션 : 단순히 개발만을 목적으로 하지 않습니다. 효율적이고 가독성 좋은 코드를 유지하며, 실제 유지보수가 가능하도록 코딩합니다.
  4. 코드 리뷰 : 개발자 대회에서 인정받은 팀장의 코딩 노하우를 코드 리뷰를 통해 공유하고, 팀원들의 잘못된 코드와 습관을 지적하며 효율적인 성장을 추구합니다.
  5. 협업 : 프런트엔드팀과 백엔드팀으로 나누어 각자 맡은 역할을 수행합니다. 백엔드팀은 DB설계 및 구현, API 서버 설계 및 구현, 전체 시스템 아키텍쳐 설계 등을 맡고, 프런트엔드팀은 구현된 API를 통해 웹 페이지를 구현합니다. 백엔드 팀과 협의하여 일정 부분의 기능 구현을 프런트에서 맡기도 합니다.
  6. 알고리즘 : 효율적인 코드를 위한 사고력을 키웁니다. sort, dfs-bfs, 완전탐색, 시뮬레이션, 구현 등에 대한 정도로 취업을 위해 필요한 만큼만 다룹니다.
  7. 멘티이자 멘토 : 선배가 동아리를 수료하면, 멘토로서 멘티의 코드를 리뷰해줍니다. 즉, 2기가 선발되면 1기가 멘토 역할을 수행하며 1인 2명씩 관리해줍니다. 실제 개발 경험을 통해 효율적인 코드와 개발 방법들에 대한 노하우를 공유해 줍니다. 이를 통해 선배는 또 한 번 성장하게 되며, 리더로서 나아갑니다. 또한 선배와 후배의 유대감을 형성하고, IT를 전문적으로 배우고자하는 학생들의 기대를 충족시켜줄 수 있습니다.

📈 무엇을 왜 하는가?

  • 언어 : 자바스크립트, SQL
  • 저지 사이트 : 프로그래머스
    코딩 문제 풀이를 통하여 자바스크립트와 SQL 문법을 익히고, 효율적인 코딩과 컨벤션이 무엇인지 공부한다. 궁극적으로 자바스크립트 언어를 통해 웹 서비스를 개발하기 위함이다.

🔍 어떻게 하는가?

  1. 주어진 코딩테스트 과제를 수행
  2. 풀이한 코딩 문제를 '파일명.js'로 만든 후 관련 폴더(ex: programmers)에 저장
  3. '파일명.js'를 개인별 Fork한 Repo의 Branch(ex: 각자 이름)로 PUSH
  4. 개인별 깃허브 Repo에 PUSH된 Branch를 wooahan-agile/coding-test-study-2term의 개인 Branch(ex: 각자 이름)로 PR을 보냄
  5. 리뷰어 각 멘토가 도착한 PR을 검토하여 코드 리뷰
  6. 해당 과정을 반복
    -> 자바스크립트 문법에 적응 & 효율적인 코딩과 컨벤션을 유지할 수 있을 때까지
  • 아래 과정을 따라하세요❗️
# 1. 우아한 애자일의 코테 저장소 Fork
# 2. 본인의 코테 저장소를 Clone (로컬의 저장소 폴더가 생성된다.)

# 3. 우아한 애자일의 코테 저장소와 동기화 (변경된 내역을 나의 저장소에도 일치시켜주는 작업)

# 먼저 로컬부터 동기화해줘야 한다. (Fork 하기 전의 레포. 즉, 우애 레포의 remote 이름을 "upstream"이라고 해준다.)
# upstream 추가 -> 통상적으로 upstream이라고 해주는게 원칙이다.
$ git remote add upstream https://github.com/wooahan-agile/coding-test-study-2term
# upstream 레포의 변경 내역을 로컬의 저장소와 병합
$ git pull upstream master

# 본인이 작업할 브랜치 생성 (ex: git branch 브랜치명)
$ git branch kimjisu
# 해당 브랜치로 이동 (ex: git checkout 브랜치명)
$ git checkout kimjisu
# 로컬의 master와 이동한 브랜치를 병합 (이로써 로컬의 kimjisu 브랜치와 upstream의 master 브랜치가 동기화되었다.)
$ git merge master

# 4. 관련 폴더(ex: programmers) 생성
$ mkdir programmers

# 5. programmers 폴더로 이동
$ cd programmers

# 6. 풀이한 코드 업로드 (파일명 : 짝수와-홀수.js)

# 7. 깃 Staging Area에 저장 (ex: git add 파일명)
# 파일명에 "."을 하면 현재 폴더의 전체 파일을 tracked함.
# 파일명에 "-a"(all의 약자)을 하면 ".git" 폴더가 위치한 루트 경로부터 전체 파일을 tracked 함.
$ git add -a 

# 8. ".git" 폴더에 저장 (ex: git commit -m "브랜치명(이름): 메세지") -> "-m"은 message의 약자
$ git commit -m "kimjisu: 짝수와 홀수 풀이"

# 9. 본인이 Fork한 깃헙 저장소에 업로드 (ex: git push <Remote> <Branch>)
$ git push origin kimjisu

# 10. 본인이 Fork한 깃헙 저장소로 이동하여 Pull Request(PR)를 보낸다.
# 이때, 우애 저장소의 master 브랜치가 아닌 "본인 이름의 브랜치"로 보내야함을 주의!!!
# 이후 멘토가 코드를 리뷰한 후 우애 저장소의 본인 브랜치로 병합시켜주는 작업을 하게 된다.

🔖 예시

  • 최적화 전 코드
/*
 * for가 중복되기에 이를 하나로 짤 수 있는 방향으로 가는 것이 좋다.
 * return 값이 같다면 if문이 끝나는 시점에 한번만 호출하는 것이 좋다.
 * sum += a가 아닌 증가하는 값을 그대로 넣어주면 된다. -> sum += i;
 * else는 최대한 삼가고, else if로 조건을 명시해주는 것이 좋다.
 */
 
function solution(a, b) {
    let sum = 0;
    if (a === b) {
        return a;
    } else if (a > b) {
        for (let i = a; i >= b; i--) {
            sum += a;
            a = a-1;
        }
        return sum;
    } else {
        for (let i = a; i <= b; i++) {
            sum += a;
            a = a+1;
        }
        return sum;
    }
}
  • 최적화 후 코드...
/*
 * 선언되는 변수가 for나 while, if 등에서 한번만 사용된다면 사용된 구문 바로 상단에 선언해주는 것이 좋다. -> 어디서 사용된 것인지 알기가 좋으며, 최상단에 선언된 변수는 여러번 사용됐다는 걸 암묵적으로 알 수 있다.
 * 오래 사용될, 혹은 코드의 진행을 좌지우지하는 변수들 같은 경우는 상수로 선언해주며 대문자로 선언해야한다.
 * 대문자들로 지어진 변수는 상수이며, 보통 이러한 값들을 변경하는 경우 프로그램이 실행되지 않는다.
 * 자바스크립트는 const와 let밖에 없기 때문에 모든 const를 대문자로 짓지 않으며, 중요한 상수값들에 한해서만 대문자로 선언한다.
 * 상수는 변수보다 상단에 선언해야한다.
 */

function solution(a, b) {
    const MIN = Math.min(a, b),
          MAX = Math.max(a, b);

    let sum = 0;
    for (let num = MIN; num <= MAX; num++) {
        sum += num;
    }

    return sum;
}

📮 피드백

• 이름을 통해 의도를 드러내라.

변수 이름, 함수(메서드) 이름, 클래스 이름을 짓는데 시간을 투자하라. 이름을 통해 변수의 역할, 함수의 역할, 클래스의 역할에 대한 의도를 드러내기 위해 노력하라. 연속적인 숫자를 덧붙인 이름(arr1, arr2, arr3...)이나 불용어(info, Data, a, an, the)를 추가하는 방식은 적절하지 못하다.

• 축약하지마라.

의도를 드러낼 수 있다면 이름이 길어져도 괜찮다.

• space(공백)도 convention이다.

for, while, if문 사이의 space도 convention이다.

• 불필요하게 공백라인을 만들지 않는다.

공백 라인을 띄우는 것도 코드상에 문맥이 달라지는 부분에 의도를 가지고 뛰우면 좋겠다.

• 구현 순서도 convention이다.

구현 순서에 대한 convention을 지키는 것도 읽기 좋은 코드를 구현하는데 의미가 있다.

클래스의 구현 순서를 지키면서 프로그래밍한다.

class WoowahanAgile() {
    상수 또는 클래스 변수

    인스턴스 변수

    생성자

    메서드
}
전역 상수
전역 변수

function woowahanAgile() {
    변수

    기능 구현
}

• 반복하지 마라

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

const arr = [1, 2];

if (arr[0] === 1) {
    ...
}
if (arr[1] === 1) {
    ...
}

 코드는 아래처럼 for로 단축할  있다.

for (let num of arr) {
    if (num === 1) {
        ...
    }
}

• space vs tab 혼용

들여쓰기에 space와 tab을 혼용하지 않는다.

둘 중에 하나만 사용한다.

tab이 일반적이다.

• 의미없는 주석을 달지 않는다.

변수 이름, 함수(메서드) 이름을 통해 어떤 의도인지가 드러난다면 굳이 주석을 달지 않는다.

모든 변수와 함수에 주석을 달기보다 가능하면 이름을 통해 의도를 드러내고, 의도를 드러내기 힘든 경우 주석을 다는 연습을 한다.

• 값을 하드코딩하지 마라.

문자열 숫자 등의 값을 하드코딩하지 마라.

상수를 만들고 이름을 부여해 이 변수의 역할이 무엇인지 의도를 드러내라.

• git commit 메세지를 의미있게 작성해라.

commit 메시지에 해당 commit에서 작업한 내용에 대한 이해가 가능하도록 작성한다.

About

우애 2기 팀원들의 코딩테스트 스터디를 위한 코드 저장소

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published