클린 코드
책을 읽게 된 계기
- 작년, 대학교 2학년 2학기에 배운 안드로이드 프로그래밍 수업에서 9주차부터 13주차까지 프로젝트를 진행하였는데, 코드가 길어지면 길어질 수록 코드를 작성하는 시간보다 내가 작성한 코드를 읽는 시간이 훨씬 더 많다는 사실을 깨달았다. 이후, 이를 어떻게 해결하면 좋을까라는 고민을 하였고 여러 방법을 찾던 중, 로버트 C. 마틴이 쓴 <클린 코드>라는 책을 알게 되었고 클린 코드를 작성하기 위한 패턴과 규칙을 익혀 깨끗하고 가독성 좋은 코드를 작성하고 싶어 본 책을 읽게 되었음
기억할 좋은 속담 문구(덴마크말: “사소한 곳에서 발휘하는 정직은 사소하지 않다.”) → 사소한 것은 중요하다.
Ærlighed i små ting er ikke nogen lille ting.
= “Honesty in small things is not a small thing.”
깨끗한 코드가 중요한 이유
→ 아무리 비싸고 화려한 집이라도 비뚤어진 바닥 타일이나 지저분한 책상 등 아주 사소한 것들이 전체 매력을 깎아먹는다. 소프트웨어의 대다수 활동은 유지보수에 초점을 맞춘다. 따라서 소프트웨어 자체가 겉으로 화려해도 코드가 깨끗하지 못하다면 유지보수가 어려운 코드가 되므로 클린 코드가 중요하다.
훌륭한 소프트웨어 기법: 집중, 침착, 사고 + 5S 원칙(Seiri, Seiton, Seiso, Seiketsu, Shutsuke)
→ 5S 원칙: 1951년, TPM이라는 품질 관리론이 일본 업계에 등장, 생산이 아닌 ‘유지보수’에 초점을 맞춤
- 정리 또는 조직(정렬): 모든 변수 이름에 주목해야 함(첫아이 이름 지을 때 심사숙고하듯이)
- 정돈 또는 단정함(체계화)
- 청소 또는 정리(광내기)
- 청결 또는 표준화: 청결은 경건과 마찬가지(집이 아무리 아름다워도 책상이 지저분하면 아름다움 반감)
- 생활화 또는 규율: 작은 것에도 충실한 사람이 큰 것에도 충실(티끌 모아 태산이다.)
참고: https://youtu.be/QriSv73uLrg
애자일 소프트웨어 장인 정신
나쁜 코드도 돌아는 간다. 하지만 코드가 깨끗하지 못하면 개발 조직은 기어간다. 매년 지저분한 코드로 수많은 시간과 상당한 자원이 낭비된다. 그래야 할 이유가 없다. 로버트 마틴은 이 책에서 혁명적인 패러다임을 제시한다. 그는 오브젝트 멘토(ObjectMentor)의 동료들과 힘을 모아 ‘개발하며’ 클린 코드를 만드는 최상의 애자일 기법을 정제해 책 한 권에 담았고, 이 책은 소프트웨어 장인 정신의 가치를 심어 주며 프로그래밍 실력을 높여줄 것이다. 여러분이 노력만 한다면. 어떤 노력이 필요하냐고? 코드를 읽어야 한다. 아주 많은 코드를. 그리고 코드를 읽으면서 그 코드의 무엇이 옳은지, 그른지 생각도 해야 한다. 좀 더 중요하게는 전문가로서 자신이 지니는 가치와 장인으로서 자기 작품에 대한 헌신을 돌아보게 된다. 이 책은 세 부분으로 나뉜다. 처음 몇 장은 클린 코드를 작성하는 원칙, 패턴, 실천을 설명한다. 둘째 부분은 사례 연구를 몇 가지 소개하는데, 점점 더 복잡해진다. 각 사례 연구는 코드를 깨끗하게 고치는, 즉 문제가 있는 코드를 좀 더 튼튼하고 효율적인 코드로 바꾸는 연습이다. 셋째 부분은 결말이다 사례 연구를 만들면서 수집한 휴리스틱과 ‘냄새’를 마지막 장에서 열거한다. 그 결과로 코드를 읽고, 짜고 정리하는 과정에서 우리가 생각하는 방식을 묘사한 지식 기반을 얻는다.
이 책을 읽고 나면 아래의 내용을 알게된다고 한다.
- 좋은 코드와 나쁜 코드를 구분하는 방법
- 좋은 코드를 작성하는 방법과 나쁜 코드를 좋은 코드로 바꾸는 방법
- 좋은 이름, 좋은 함수, 좋은 객체, 좋은 클래스를 작성하는 방법
- 가독성이 높아지도록 코드 형식을 맞추는 방법
- 코드 논리를 흩뜨리지 않고서 오류 처리를 완벽하게 구현하는 방법
- 단위 테스트와 테스트 주도 개발을 적용하는 방법
'Development' 카테고리의 다른 글
[Development] 오늘 하루 시연 영상 with Android(JAVA) (0) | 2023.08.03 |
---|---|
[Development] 구글 코랩 런타임 연결 끊김 방지(2023년 최신 버전) (0) | 2023.07.20 |
[ChatBot] Dialogflow를 활용한 콘도 예약·신청 챗봇 구축 (0) | 2023.05.09 |
[API] fetch()를 이용한 날씨 API 불러오기 실습 (0) | 2023.05.08 |
[JS] ES6 템플릿 리터럴: 백틱(``)과 달러(${}) 사용법 (0) | 2023.05.08 |