참고 문서

- CodeComplete2

- 읽기 좋은 코드가 좋은 코드다

- 실용주의 프로그래머

- CleanCode

 

1. 해당 함수명을 읽었을 때 무슨 역할을 하는 함수인가 기능과 이름을 일치 시키는 것.

   - CreateABC() -> CreateUI() 와 같이 해당 함수가 하는 역할을 이름만 보고 유추할 수 있을 수준으로 작명하자.

 

2. 각 함수는 하나의 작업만 진행해야 한다.

   - CalcRotation 함수내부에서 Rotation 관련 작업만 처리되어야한다. Scale, Location 등 다른 작업은 그에 맞는 함수를 만들어 작업하도록 하자.

void CalcRotation()
{
	Scale = Set(X Y Z);
    Location = Set(PrevLocation + CurLocation);
    Rotation = Set(Rotation)
}-------------------- X
// 아래와 같이 각 함수 역할에 맞는 함수를 구현
void CalcScale()
{
	Scale = Set(X Y Z);
}
void CalcLocation()
{
	Location = Set(PrevLocation + CurLocation);
}
void CalcRotaiton()
{
	Rotation = Set(Rotation);
}

3. Pair를 갖는 함수인 경우 각 Pair는 서로 동일한 클래스에 위치해야한다.

   - class A::Init() / class A::Reset() or class A::Begin() / class A::End() or class A::Play / class A::Stop() 등 Pair를 이루는 함수는 항상 같은 클래스에 선언 및 구현하자.

class A
{
public:
    void Play();
    void Stop();
    
    void Init();
    void Reset();
    
    void Begin();
    void End();
}

4. 작업하는 모든 사람이 익숙한 방식의 로직으로 설계하도록 노력하자.

   - 그 조직에서 설계된 방식에 맞춰가도록 노력하자. 나만의 로직 및 함수 네이밍을 따라가는 것은 코드를 분석하는데 곤란한 상황이 많이 연출된다.

 

5. 함수 설계 시 무슨 역할을 하는 함수인지 주석으로 우선 서술 한 뒤 그것을 Code로 변경하고, 함수의 역할이 올바르게 구현되었는지 확인하자. 

  - 내가 설계한 함수를 두번, 세번 검수하는 작업을 거치자.

1. void Add(int a , int b)
{
	// 변수 두개를 더한다.
}

2. void Add(int a, int b)
{
	// 변수 두개를 더한다.
    int result = a + b;
}

3. 정확한 명세대로 구현이 되었는가 확인한다.

6. 상속 클래스를 설계 시 가상함수로 선언 되었으나 함수 내부가 빈 case 가 있는 경우 각 클래스의 상속 관계가 올바른지 다시 한번 확인한다.

   - 빈 함수가 있다는 것은 주로 잘못된 클래스 설계에서 나타난다.

   - Ex) class 전화기

 

 class 전화기
{
	public:
    전화기();
    ~전화기();
    
    virtual void 전화하기();
    virtual void 전화끊기();
    
    virtual void 번호누르기();
    virtual void 번호지우기();
}
전화기::전화하기()
{
	//전화하기
}

class 핸드폰 : public 전화기
{
	public:
    핸드폰();
    ~핸드폰();
    
    virtual void 전화하기() override;
    virtual void 전화끊기() override;
    
    virtual void 번호누르기() override;
    virtual void 번호지우기() override;
}
핸드폰::전화하기()
{
	//전화하기
}
class 삐삐 : public 전화기
{
	public:
    삐삐();
    ~삐삐();
    
    virtual void 전화하기() override;
    virtual void 전화끊기() override;
    
    virtual void 번호누르기() override;
    virtual void 번호지우기() override;
}
삐삐::전화하기()
{}

 

'프로그래밍 > 리팩토링' 카테고리의 다른 글

리팩토링이란?  (0) 2020.02.15

WRITTEN BY
KeithHong
개인 기록 공간입니다. 잘못된 정보에 대한 수정 및 조언은 항상 감사합니다 ( _ _ )

,