Skip to content

woorim960/modern-agile-codingtest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

💻 모던 애자일 코딩테스트

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

  • 동아리명 : 모던 애자일
  • 개설 : 2020.12.03(목)
  • 기수 : 1기

👨🏻‍💻 모던 코더


💡 동아리 활동

  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'로 만듦
  3. '파일명.js'를 개인별 Fork한 Repo의 Branch로 PUSH
  4. 개인별 깃허브 Repo에 PUSH된 Branch를 woorim960/modern-agile-codingtest로 PR을 보냄
  5. 리뷰어 박우림이 도착한 PR을 검토하여 코드 리뷰
  6. 해당 과정을 반복
    -> 자바스크립트 문법에 적응 & 효율적인 코딩과 컨벤션을 유지할 수 있을 때까지

🔖 예시

  • 최적화 전 코드
/*
 * 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 [MAX, MIN] = a > b ? [a, b] : [b, a];

    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 ModernAgile() {
    상수 또는 클래스 변수

    인스턴스 변수

    생성자

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

function modernAgile() {
    변수

    기능 구현
}

• 반복하지 마라

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

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에서 작업한 내용에 대한 이해가 가능하도록 작성한다.