나에게 클린코드란?

가언·2024년 7월 9일

클린 코드란?

나에게 클린코드란... 남들이 자신의 코드를 읽어봤을 때 의문점이 없는 코드, 예측이 되는 코드를 클린코드라고 생각한다..!
"강사님"의 의견 :

  • 가독성이 좋은 코드
  • 성능이 좋은 코드
  • 안정성이 좋은 코드

즉,

  • 코드는 이해하기 쉬워야 한다.
  • 코드는 다른 사람이 그것을 이해하는 데 들이는 시간을 최소화 하여야 한다
  • 이해를 위한 시간을 최소화 하는 것이 더 좋은 목표이다.

클린코드를 해야하는 이유

  • 나쁜 코드는 지속적인 생산성 하락과 관리 비용가 증가한다.

    깨진 유리창 법칙

    깨진 유리창 하나를 방치해 두면, 그 지점을 중심으로 범죄가 확산되기 시작한다는 이론
    코드는 시간이 지남에 따라 지저분한 코드가 되며, 이는 "깨진 유리창 법칙"과 유사한 원리로 설명될 수 있습니다. 초기에는 작은 결함이나 비일관성이 눈에 띄지 않을 수 있지만, 이를 방치하면 점차 더 큰 문제로 발전하게 된다.

    워드 커닝엄

    코드를 읽으며 짐작했던 기능을 각 루틴이 그대로 수행한다면 클린 코드라 불러도 되겠다.
    코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드라 불러도 되겠다.

지켜야할 클린코드 규칙

  1. 의도가 분명하게 이름 지을 것
  2. 변수의 길이가 길어도 되지만, 가독성을 해치면 안됨.
  3. List를 사용하지않고 복수형으로 적기, 줄어서 쓰지 않기
  4. 접미사로 컨테이너가 포함된 이름은 복수단어로 대체하는 것이 좋다.
  5. 보편적인 약어쓰지 말자
  6. 발음하기 어려운 메소드는 사용하지 말자
  7. 패턴을 빼놓고 적기
  8. 가급적이면 if/else, while 문 등에 들어가는 블록은 길지 않게 작성하며, 주로 메소드 호출 등의 짧고 간단한 내용으로 적는 것이 좋다.
  9. 가능하면 메소드를 최대한 빨리 반환하는 것이 좋다.
    • 로직 역추적 불가능=어디에서 어떤 조건이 이런 반환값을 만들어냈는지 알아내기 어려움
    • 굳이 아래 로직을 안 타도 되는데(=확인할 필요 없는 로직도) 타는 경우가 발생
    • return을 앞에서 하면 성능적으로 좋고, 메모리에 올려둘 필요가 없음
  10. 중복 코드는 없애는 것이 좋다.
  11. 주석은 나쁜 코드를 보완하지 못함
    • 좋은 코드 > 나쁜 코드+좋은 주석
    • 의미를 명료하게 밝히는 주석 작성
    • 위치를 표시하는 주석은 지양->TODO/Fix me 주석 작성
    • 수정한 저자 정보 주석, 주석 처리된 코드는 지양

결론

처음부터 완벽한 소스코드를 작성하는 사람은 아무도 없다.
그냥 완벽한 코드도 없다. 누군가에게는 다른 시선이 존재하기 때문이지~
이유를 제시하고 설득할 수 있으면 가능하다.
처음부터 클린코드를 짜겠다는 생각보다는 리팩토링하겠다는 생각을 하자
그렇다면 처음부터 클린코드를 염두에 두며 코드를 짜게 될 것이다!

참고

✅ Google guava / Apache Commons

자바의 표준 라이르버리를 오픈 소스화 해서 화려하게 쓸 수 있게 도와주는 도구

  • 다른 언어의 좋아보이는 메소드를 자바에 확장
  • String: Upper/...자르기,...=>StringUtils
    +log, format(date, time) ...
    public class ToStringUtils{
    	public void toString(Object obj){
        	System.out.println(obj.toString());
       }
    }

리팩토링과 설계

리팩토링은 일부 관점이 사전 설계와 충돌하지만 결론적으로 리팩토링은 디자인을 보완한다

  • 유연성 강조보다 설계를 간결하게 만드는 쪽에 좀 더 관심을 둔다.

사전 설계(upfront design)란?

  • 재 작업 비용을 줄이기 위해서 SW 구조에 대해 사전에 고민을 하는 방식
  • 요구사항 변경이 일어나 부분에 대해서 미리 예측해서 구현하는 방식

리팩토링 방법

  • 백업을 만들어 두고, 형상관리를 사용한다
  • 검증된 리팩토링 도구를 사용한다.
  • 단위 테스트 케이스를 만든다.
profile
@gari_guri

0개의 댓글