좋은 소프트웨어 작성법
Overview
Teaching: 15 min
Exercises: 0 minQuestions
다른 분들이 사용할 수 있는 소프트웨어를 어떻게 작성할 수 있을까?
Objectives
R 코드를 작성하는 모범사례를 기술하고 각 모범사례에 대한 정당성을 설명한다.
프로젝트 폴더 구조화
작업 프로젝트 폴더를 구조
하위 폴더를 코드, 매뉴얼, 데이터, 바이너리, 출력 그래프 등으로 구분하여 프로젝트 폴더를 구조화 시키고, 잘 조직화하고, 깔끔하게 한다.
완전 수작업으로 할 수도 있고, RStudio New Project
기능을 활용하거나 ProjectTemplate
같은 팩키지를 사용한다.
Tip: ProjectTemplate - 가능한 해결책
프로젝트 관리를 자동화하는 한 방식은 제3자 팩키지,
ProjectTemplate
을 설치하는 것이다. 해당 팩키지는 프로젝트 관리에 대한 이상적인 디렉토리 구조를 설정해 놓는다. 팩키지가 자동으로 분석 파이브라인/작업흐름을 구성해서 구조화해 놓는다. RStudio 기본설정된 프로젝트 관리 기능과 Git을 섞어 사용하면, 작업을 기록할 뿐만 아니라, 동료 연구원과 작업산출물 공유를 가능케 한다.
ProjectTemplate
을 설치한다.- 라이브러리를 불러 적재한다.
- 프로젝트를 초기화한다.
install.packages("ProjectTemplate") library(ProjectTemplate) create.project("../my_project", merge.strategy = "allow.non.conflict")
ProjectTemplate
과 기능에 대한 자세한 사항은 ProjectTemplate 홈페이지를 방문한다.
가독성 높은 코드를 생성한다.
코드 작성에 있어 가장 중요한 부분이 코드를 가독성 있고 이해가능하게 작성하는 것이다. 누군가 여러분이 작성한 코드를 골라 무슨 작업을 수행하는지 이해할 수 있어야 한다: 흔히 누군가는 6개월 후에 바로 당신이 될 수 있고, 만약 그렇게 작성하지 않았다면 과거 자기 자신 본인을 분명히 저주할 것이다.
문서화: 왜(why) 그리고 무엇(what)은 OK, 어떻게(how)는 No.
처음 코드를 작성할 때, 주석은 명령어가 무엇을 수행하는지 기술한다. 왜냐하면, 여전히 학습중으로 개념을 명확히 하고, 나중에 다시 상기하는데 도움이 된다. 하지만, 이러한 주석은 나중에 작성한 코드가 어떤 문제를 해결하고자 하는지 기억을 하지 못하면 그다지 도움이 되지 못한다. 왜(why) 문제를 해결하려고 하는지, 그리고 어떤(what) 문제인지 전달하는 주석을 달려고 노력한다. 어떻게(how)는 그 다음에 온다: 정말 걱정하지 말하야 되는 사항은 구체적인 구현이다.
코드를 모듈화 하라
소프트웨어 카펜트리에서 추천하는 것은 작성한 함수를 분석 스크립트와
구별해서 별도 파일에 저장시키는 것이다. 프로젝트 R세션을 열 때,
source
함수로 불러올 수 있게 별도 파일로 저장한다.
분석 스크립트를 너저분하지 않게 하고, 유용한 함수 저장소를 프로젝트 분석 스크립트에 적재할 수 있게 함으로써 이러한 접근법이 깔끔하다. 또한 관련된 함수를 쉽게 무리지어 묶는다.
문제를 한입크기 조각으로 쪼갠다.
처음 시작할 때, 문제 해결과 함수 작성은 어마어마한 작업이고, 코드를 쪼개는 것도 힘들다. 문제를 소화가능한 덩어리로 쪼개고, 나중에 구현에 관한 구체적인 사항을 걱정한다: 해결책을 코드로 작성할 수 있는 지점까지 문제를 더 작게 그리고 더 작은 함수로 계속 쪼개 나간다. 그리고 나서 다시 거꾸로 빌드해서 만들어 낸다.
작성한 코드가 올바른 작업을 수행하도록 만든다
작성한 함수를 테스트해서 확실히 동작하게 만든다.
여러분이 반복하지 마라!
함수는 프로젝트 내부에서 재사용을 쉽게 한다. 프로젝트를 통해서 유사한 코드 라인 덩어리를 보게 되면, 대체로 함수로 옮겨져야 되는 대상을 찾은 것이다.
연산작업이 연속된 함수를 통해 실행되면, 프로젝트는 모듈로 만들기 쉽고, 변경하기 쉽다. 항상 특정한 입력값을 넣으면 특정한 출력값이 나오는 경우에 특히 그렇다.
스타일을 고집하라
코드에 일관된 스타일을 지킨다.
Key Points
프로젝트 폴더를 구조화 시키고, 잘 조직화하고, 깔끔하게 만든다.
방법(how)이 아닌 무엇(what), 이유(Why)를 문서에 남긴다.
프로그램을 짧고 단일 목적을 갖는 함수로 분해한다.
다시 실행가능한 테스트 코드를 작성한다.
여러분이 반복하지 마라.
여러분이 반복하지 마라.
명칭, 들여쓰기, 다른 코딩 스타타일에도 일관성을 유지한다.