본문 바로가기
C++ 200제/코딩 IT 정보

MFC 코딩 표준 7가지 방법, 꼭 확인하세요 (클래스, 인터페이서 UI 등)

by vicddory 2018. 4. 11.

MFC 코딩 표준 7가지 방법, 꼭 확인하세요 (클래스, 인터페이서 UI 등)


MFC 코딩 표준 1. 복잡하지 않게!


함수를 너무 길게 만들지 마세요.

화면에 꽉 찰 정도의 한 두 페이지면 충분합니다. 간단 명료해야 가독성이 높아지니 너무 길어진다면 기능별로 분할하세요.


MFC 코딩 표준 2. 반드시 분리해야할 인터페이스와 구현부, 그리고 UI와 구현부


CDialog 파생 클래스 안에 실제 구현 사항(아마도 클래스나 클래스 그룹)을 넣지 마세요.

별도의 CPP나 헤더 파일에 구현을 하고 당신은 인터페이스 클래스를 사용해야 합니다.


MFC 코딩 표준 3. 클래스/구조체 안에선 public 변수를 사용하지 마세요


대신, const와 유사한 Getter/Setter, 인라인 함수를 사용하세요. 그럼으로서, 코드의 수정과 유효한 매개 변수 분간도 용이해집니다. 마치 protected 변수와 유사합니다. 그리고, Global/static 변수도 왠만해선 사용하지 마세요.


클래스 구조체 안에선 public 변수를 사용하지 말자[MFC 코딩 표준 7가지 방법, 꼭 확인하세요]


클래스 구조체 안에선 public 변수를 사용하지 말자

MFC 코딩 표준 4. 길다란 Switch문은 피하세요


아래 같은 문장은 피해야 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch(CSpywareData::spyWareFound[i]->spytype)
{
case CSPYWAREFOUND::TYPEFILESPY:
    RemoveFileSpy(i);
    break;
case CSPYWAREFOUND::TYPEREGSPY:
    RemoveReg(i);
    break;
case CSPYWAREFOUND::TYPEPROCSPY:
    break;
case CSPYWAREFOUND::TYPECOOKIE:
    RemoveCookie(i);
    break;
}
cs


대신에, 이렇게 바꿔 보세요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Spyware
{
public:
    virtual ~Spyware();
    virtual void RemoveSpyware() = 0;
};
 
class FileSpyware : public Spyware
{
public:
    virtual void RemoveSpyware();
};
 
class RegistrySpyware : public Spyware
{
public:
    virtual void RemoveSpyware();
};
 
class ProcSpyware : public Spyware
{
public:
    virtual void RemoveSpyware();
};
 
class CookieSpyware : public Spyware
{
public:
    virtual void RemoveSpyware();
};
 
    .....
    .....
void CleanSpyware(Spyware* spy)
{
    spy->RemoveSpyware();
}
cs


MFC 코딩 표준 5. OO (Object Oriented)


클래스간에 공통점이 존재한다면 그들의 기본 클래스를 만들 수 있습니다.  예를 들어, 하나의 응용 프로그램에서 파생된 모든 클래스들은 내부의 공통 클래스에서 파생되어야 합니다. 새로운 기능을 추가하거나, 또는 하지 않거나, 또는 추가할 계획을 쉽게 실현할 수 있습니다. (예, 모든 다이얼로그의 배경이 흰색이라면).


※ 실제로 제가 몸담았던 모회사는 100여개의 다이얼로그를 일일이 하드 코딩 해놨었습니다....


MFC 코딩 표준 6. 클래스 정의


모든 클래스들은 Public 부분이 먼저 정의되고 다음에 protected, 마지막으로 private 부분이 정의되도록 구성해야 합니다. 인라인 함수는 클래스 내부 보단 헤더 파일의 맨 끝에 삽입합니다.


항상 얕은 복사에 대비하기 위해서 복사, 할당 operator도 선언하며, 따로 코드가 필요하지 않다면, private으로 선언하거나 정의부를 비워둡니다.


MFC 코딩 표준 7가지 방법, 꼭 확인하세요[C++ 프로그래밍, 프로그램 만들기]


MFC 코딩 표준 7. 생성자의 초기화 리스트 사용


생성자 초기화 목록의 순서에 주의하세요. 정의된 순서는 클래스 내부에도 영향을 미치니깐요.


1
2
3
4
A::A(const CString& param1, int param2)
    : m_var1(param1), m_var2(param2)
{
}
cs


위의 소스 대신,


1
2
3
4
5
A::A(const CString& param1, int param2)
{
    m_var1 = param1;
    m_var2 = param2;
}
cs


m_var1 또는 m_var2의 기본 자료형은 매우 중요합니다. 두 변수는 최소한 두 가지 역할을 담당합니다. 


MFC 코딩 표준 7가지 방법, 꼭 확인하세요 (클래스, 인터페이서 UI 등)

댓글