728x90
2022/09/21(수)
개발자가 불행해질 때?
1. 코드가 엉망진창일 때
- 소프트웨어 프로페셔널이란?
- 항상성 = 일관성 (어느 정도 일의 완성도의 보장)
- 전문성 (말의 무게가 달라짐)
→ 클린 코드를 작성하려면 프로페셔널의 정신이 없으면 만들 수 없다
- 소프트웨어 코드 반감기
- 코드를 작성했을 때 절반 정도가 바뀌는데 걸리는 시간 = 1년 8개월 1년 10개월 (굉장히 짧다)
- 이유는 바뀌지 않으면 기술력을 잃어 버리지 않기 위해서 이다
- 기존에 있던 기술자들이 은퇴하고 나면 만들 수 없다 (잊혀진다)
→ 즉, 항상 유지 보수와 새로운 기능의 신형 코드가 들어가게 된다.
- 코드 재설계
- 레거시한데는 이유가 있다
- 왜 코드가 스파게티가 됐을까?
- 고객의 요구 등으로 인해 수정하다 보면 원래 코드는 사라지고 엉망이 되기도 한다.
- 깨진 창 이론
- 들어갈 때 없으니까 코드를 아무 곳이나 넣게 됨
- 코드 리팩터링의 목표
- 깨끗한 코드를 유지한다
- 처음 만들 때부터 깨끗한 코드를 만들 수 없다 리팩토링을 통해서 가능하다!
- 생상성이나 유지 보수성을 늘리기 위해서 작성해야 한다.
- 지속적인 수정으로 개선하는 수밖에 없다.
- 코드는 이해하기 쉬워야 한다.
- 다른 사람이 그것을 이해하는 데 들이는 시간을 최소화하는 방식 채택
- 1회용 코드는 되도록 피해야 한다.
- 깨끗한 코드란?
- 논리가 간단해야 버그가 숨어들지 못함
- 의존성은 최대한 줄여야 유지 보수 쉬워짐
- 한 가지를 제대로 해야 한다.
- 깨끗한 코드는 잘 쓴 문장처럼 읽힌다.
- 작성자가 아닌 사람도 읽기 쉽고 고치기 쉬움
- 단위 테스트 케이스와 수용 테스트 케이스 존재
- 깨끗한 코드는 언제나 주의 깊게 짰다는 느낌을 준다.
- 클래스, 메소드, 함수 등을 최대한 줄인다.
- 중복 줄이기(최대 2번만), 표현력 높이기, 초반부터 간단한 추상화 고려하기.
- 이름
- 이모지를 이름으로 사용한다면? → 식별하기 어려움
- 특정 단어 사용 : GET(예외가 없는 데이터를 가져올 때), FETCH(통으로 가져올 때), DOWNLOAD(무언가를 다운받아서 ..)
- CanListenOnPort() 같은 이름이 오류와 내용까지 파악할 수 있다
- 변수 명에 세부 정보 붙이기 (밀리 초 값 저장이라면 _ms)
- 사용 범위가 넓으면 긴 이름을 사용
- 대문자나 밑줄을 의미 있게 활용
- 의미가 오해 되지 않는 이름이 최선의 이름
- 상한/하한을 정할 경우 max_, min_을 앞에 접두어로 사용
- 경계를 포함할 경우 first, last가 좋은 이름
- 경계의 시작만 포함하고 끝은 포함하지 않을 경우 begin, end가 좋은 이름
- 불리언(boolean)의 경우 is와 has 사용
- 숙제
- 맡고 있는 코드의 중복을 체크해보자
- 코드 중복을 체크하는 프로그램 소나 큐브 .. extension 등
- code duplication utility를 찾아서 자기 코드를 돌려서 중복도가 몇 퍼센트인지 확인
- 책
- 마이클 페더즈에 레거시 코드 활용 전략
728x90