개발 공부 유니티, C#/스터디
클린 코드 정리
와디더
2023. 7. 3. 21:35
변수명 작명
- 변수의 의도를 명확히
- 검색하기 쉬운 네이밍 사용
- 유추하기 힘든 기발한 이름을 사용하지 마라
- 한 개념에 한 단어 사용
- 가져오는 것을 fetch, retrieve, get을 혼용해서 쓴다던가 하는 것들을 통일하기
- 해법 영역에서 가져온 이름 사용
- VISITOR, JobQueue 등 프로그래밍 외에도 전산 용어, 알고리즘 등에서 쓰이는 보편적인 용어들로 작명
함수
- SRP(Single Responsibility Principle) : 한 가지 일만 하도록 작게 만들기
- 매개변수를 최소화
- 명령과 조회를 분리
- 뭔가를 수행하던지, 뭔가에 답하던지 둘 중 하나만 하기
- 오류 코드보다 예외 사용 (요건 경우에 따라 좀 다른것 같기도 함)
- 코드 중복 방지
주석
- 주석은 나쁜 코드를 보완하지 못한다.
- 좋은 주석
1. TODO
2. 법적 설명 Copyright (C) 2023 Object Mentor
3. 정보 제공 주석
//테스트 중인 Responder 인스턴스를 반환한다.
protected abstract Responder responderInstance();
4. 의도를 설명하는 주석
return 1; //우선순위가 높음
- 나쁜 주석
- 코드에 뻔히 설명된 내용 주석
- HTML주석
- 소설가
컨벤션을 지킬 것
경계 처리
타팀, 라이브러리(외부 코드) 사용시 경계 부분 처리
경계를 어댑터 패턴으로 보완하기
예제 원문 : https://jusungpark.tistory.com/22
//어댑터 패턴 예제
//콘센트 어댑터처럼 사용하는 것을 떠올리면 용이
public interface Duck
{
public void quack();
public void fly();
}
public class MallardDuck implements Duck
{
@Override
public void quack()
{
System.out.println("Quack");
}
@Override
public void fly()
{
System.out.println("I'm flying");
}
}
public interface Turkey
{
public void gobble();
public void fly();
}
public class WildTurkey implements Turkey
{
@Override
public void gobble()
{
System.out.println("Gobble gobble");
}
@Override
public void fly()
{
System.out.println("I'm flying a short distance");
}
}
//Turkey를 Duck으로 사용하기 위한 Adapter
public class TurkeyAdapter implements Duck
{
Turkey turkey;
public TurkeyAdapter(Turkey turkey)
{
this.turkey = turkey;
}
@Override
public void quack()
{
turkey.gobble();
}
@Override
public void fly()
{
turkey.fly();
}
}
//클라이언트에서 사용
public class DuckTestDrive
{
public static void main(String[] args)
{
MallardDuck duck = new MallardDuck();
WildTurkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
System.out.println("The turkey says...");
turkey.gobble();
turkey.fly();
System.out.println("The Duck says...");
testDuck(duck);
System.out.println("The TurkeyAdapter says...");
testDuck(turkeyAdapter);
}
public static void testDuck(Duck duck)
{
duck.quack();
duck.fly();
}
}
학습 테스트
외부 코드를 테스트 클래스를 선언
우리 코드의 문제인지 외부의 문제인지 쉽게 파악할 수 있음.
클래스
- 클래스도 SRP를 따라야 함.
- 변수, 함수가 클래스가 하기 적합한 일인지 확인
- 변수, 함수의 갯수가 적어야 함
쓰레드를 이용한 동기 작업에서 SRP원칙을 지키고 독립적으로 작동해야만 문제가 발생하지 않는다.
critical section은 작게 만들기 (성능 저하를 유발)