좋은 코드란?
- 깔끔한 코드는 읽고, 이해하고, 수정하기 쉬움
- 코드는 명확한 이름, 일관된 형식, 의미 있는 주석으로 체계적으로 구성
- 좋은 코드는 테스트가 가능하며 코드와 함께 유닛 케스트를 작성해야 함
- 클래스와 함수는 분명한 하나의 일을 하도록 구현해야 함
- 코드는 모듈화되어야 하며 중복을 피해야 함
- 오류 처리는 코드베이스 전체에서 철저하고 일관성있게 이루어져야 함 (로깅)
- 코드는 작성자가 아닌 사용자를 염두에 두고 설계해야 함
- 단 중요한 일에 더 완벽을 기할 것
행동적인 부분
- 긍정적인 자세
- 남과 비교하지 않기
- 커리어를 길게 보기
- 질문 잘 하기
- 의사 소통 잘하기
- 문제 정의 잘하기
- 결과 내기
기술적인 부분
- 프로그래밍 언어 선택하기 (파이썬, 스칼라, 자바)
- 구문 및 데이터 유형 이해하기
- 기본 문법 이해 -> 고급 문법 이해
- 상황에 맞게 적합한 구문과 데이터 유형 사용
- 많이 코딩해보기 (그러면서 고민해보기)
- 남의 코드 보고 배우고 내 코드 리뷰 받기
- 깔끔하고 읽기 쉬운 코드 작성하기
- 많이 코딩해보면서 고민하기와 코드 리뷰 받기가 핵심
- 팀에 시니어가 없다면 오픈소스 코드 보기
- 생산성 툴 익히기
- git과 github
- 커맨드라인에서 자유롭게 커밋하고 브랜치 만들고 PR 만들기
- 소스코드 에디터 (IDE: Integrated Development Environment)
- 단축키 많이 사용해보기
- 플러그인 많이 사용해보기
- git과 github
코드 작성 원칙
- DRY (Don't repeat yourself)
- KISS (Keep it simple, stupid)
DRY
- 같은 코드를 여러 번 작성하고 있다면? 시간 낭비!
- 한 번 작성하여 필요한 곳에 재사용 할 수 있는 방법을 찾아야 한다!
- 반복되는 작업이라면 함수로 만들 것
- 동반한 일이 반복된다며 루프로 만들 것
- 비슷한 클래스를 반복해서 만든다면 클래스 계승 구조를 사용해볼 것
KISS
- 불필요한 복잡성을 피하고 코드를 가능한 한 단순하게 유지
- 코드를 꼭 짧게 작성해야 한다는 것은 아님 (특히 람다 함수)
- 내장 함수 사용
- 너무 많은 기능을 하나의 함수로 구현하지 말 것
- 한 함수가 너무 길어지면 이를 다수의 함수로 나눌 것
- 결국 읽기 쉽고 이해하기 쉬운 코드를 작성하기 위해 노력
- 다른 사람들이 사용하기 쉽고 테스트가 쉬워짐
기술 부채와 스타트업
- 스타트업의 경우 생존이 더 중요하기에 기술 부채가 점점 커짐
- 즉 의도적으로 모드의 품질보다는 속도에 초점을 마추게 됨
- 스타트업 코드에 기술부채가 없다면 뭔가 잘못된 거임
- 어느 시점에는 이를 갚기 위해 코드/서비스 리팩토링을 시작해야 함
- 그러면 어떤 시점이 기술부채를 갚을 수 있는 시점
- 서비스 관련 사고들의 빈도수와 심각성을 트래킹 - > 대형사고 발생 - > 기술부채를 갚아야 하는 시점
- 새 기능 개발과 기존 코드 리팩토링을 적절히 밸런스 (예를 들면 60:40)
코딩 규칙과 모범 사례 따르기
- 일관된 포맷 및 이름 지정 규칙
- 개인적으로 혹은 팀 내에서 이름 명명 규칙을 정하고 진행
- 함수 이름, 변수 이름, 파일 이름은 이해하기 쉽고 약어를 피하는 것이 좋음
- 의미 있고 설명적인 변수 이름 사용
- 적절한 주석 및 문서화
- 제어 구조와 알고리즘의 효율적인 사용
코드 리뷰
- 주니어 개발자나 새로 온 개발자들을 트레이닝시키는 최선의 방법
- 단점은 리뷰를 해야 하는 사람들이 이미 바쁜 사람들이라는 점
좋은 코드 리뷰 방법
- 코드 리뷰를 요청하는 이
- 요청시 되도록이면 조금씩 자주 요청, unit test와 같이 요청하면 최상
- 주석을 최대한 추가하고 무슨 이유에서 뭘 하려고 하는 것인지 설명
- 리뷰에 대한 피드백을 너무 감정적으로 받아들이지 않기
- 코드 리뷰를 하는 이
- 코딩 스타일에 대한 것보다는 코드 자체에 대해 이야기
- 객관적으로 쓰고 비판하는 어조는 피하기
- 충분히 시간을 들여 도움이 되는 리뷰를 제공
- 코드 리뷰에 편리한 툴 사용
unit test
- 모듈의 특정 기능 (함수) 테스트, 보통 하나의 함수를 테스트
integration test
- 여러 모듈을통합하여 하는 한 차원 위의 테스트
acceptance test
- 트래픽등을 생성하여 시스템에 로드를 주고 견디는지 보는 테스트
ui test
- 요즘은 셀레니움드으이 툴을 이용하여 웹페이지 자체의 ..
테스트의 중요성
- 많은 회사들이 코드 변경의 일부로 unit test를 의무적으로 요구
- 테스트가 없으면 아예 코드 체크인이 실패
- 테스트가 많을수록 이점이 존재
- 시스템의 안정성 증대
- 나중에 refactoring할 경우 혹은 새로 들어온 신입 엔지니어가 코드 수정할 때 굉장히 편리
- 어떤 경우에는 테스트를 작성하기가 너무 힘든 경우들이 있음
- 이 경우 스프린트 플랜닝 때 시간을 넉넉히 배당
반응형