Qt 코딩 스타일 (편집 편) > QT 강좌/팁

본문 바로가기
사이트 내 전체검색

QT 강좌/팁

QT/Win32 Qt 코딩 스타일 (편집 편)

페이지 정보

작성자 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 4건 조회 10,508회 작성일 14-10-22 10:48

본문

Qt는 오픈소스로 개발이 되서 전세계 수십만(?)의 개발자가 사용하는 프레임워크이기 때문에 강력한 코딩 스타일 규칙이 존재 합니다.

크게 두가지 가이드라인 문서가 존재하는 데

(1) 편집기 측면에서의 코딩 스타일
(2) C++ 측면에서의 코딩 규칙들(언어 측면)

오늘은 먼저 쉬운 편집 측면에서의 코딩 스타일을 올립니다.
티스토리에 있는걸 옮겨 놓았기 때문에 약간은 읽기 불편할 수 있습니다. ^^
참고로 제 티스토리는 늘 반말체입니다.

/*!
 *
 * 여기서 부터 내용 시작
*/

보통 팀 단위의 프로젝트를 진행하게 되면 대개의 경우 코딩 컨벤션을 정해 놓고 개발을 하는 경우가 많다.
A4 한장에서부터 몇장 분량 더 크게 나가면 구글의 C++ 코딩 컨벤션 처럼 방대한 분량의 규칙을 정하기 까지 한다.

Qt 도 오랜 시간의 개발 기간을 거쳐 수많은 개발자들의 갑론을박을 거쳐 지금의 형태로 완성 되었을 것이다.

별거 아닌 규칙처럼 보여도 매우 합리적인 근거에 기반을 두고 만들어진 규칙인 만큼 Qt를 사랑하는 사람들이라면 도입을 한번 생각해보자.




--- 들여쓰기

들여쓰기는 4칸의 공백(space)을 둔다.
탭이 아닌 공백이다. (에디터에 탭을 공백으로 바꾸는 옵션이 있다면 켜 놓도록 하자)




--- 변수 선언

변수는 한 라인에 한개 씩 선언한다.
짧거나 의미 없는 이름은 피하자. (예 : "a", "rbarr", "nughdeget")
한글자 변수명은 카운터나 임시변수에서 목적이 분명할 때 사용 할 수 있다.
변수 선언은 미리 선언하지 않고 필요한 곳에서 선언 한다.

[잘못된 예]
int a, b;
char *c, *d;

[올바른 예]
int width;
int height;
char *nameOfThis;
char *nameOfThat;

변수명과 함수명은 소문자로 시작한다. 연속 단어의 경우 첫 글자는 대문자로 한다.
약어는 사용하지 않는다.

[잘못된 예]
short Cntr;
char ITEM_DELIM = '\t';

[올바른 예]
short counter;
char itemDelimiter = '\t';

클래스는 대문자로 시작한다. 공용 클래스(Public classes)의 경우 대문자 'Q'로 시작하며 공용 함수는 소문자 'q'로 시작한다.
Qt 소스를 작성하는 개발자만 해당. :)
class QRgb;
qRgb()


약어의 경우 전부 대문자로 사용하는 것이 아니라 camel-case 규칙에 따라 첫 글자만 대문자를 사용한다.
잘못된 예 : QXMLStreamReader
올바른 예 : QXmlStreamReader




--- 공백 (Whitespace)

Statements 그룹 사이에는 빈 줄 하나를 넣는다.
항상 한 줄의 빈 줄을 사용한다. (두줄 이상 금지)
키워드와 중괄호 사이에는 공백 하나를 둔다.

[잘못된 예]
if(foo){
}

[올바른 예]
if (foo) {
}

포인터와 참조는 타입과 '*' 또는 '&' 사이에 공백을 하나 둔다. 다만 '*' 또는 '&'과 변수 사이에는 공백없이 붙여 쓴다.
char *x;
const QString &str;
const char * const y = "hello";

단항 연산자는 앞뒤에 공백을 둔다.
  a = b + c;

형변환 연산자 뒤에는 공백이 없다.
가능하다면 C스타일의 형변환은 피한다.

[잘못된 예]
char* blockOfMemory = (char*) malloc(data.size());

[올바른 예]
char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size()));

한 줄에 여러 statements를 두지 말자
제어문의 Body는 새로운 줄로 시작한다.
[잘못된 예]
if (foo) bar();

[올바른 예]
if (foo)
    bar();




--- 중괄호(Braces)

if ~ else 와 같이 중괄호가 연결되어 사용 되는 경우 아래와 같은 규칙으로 사용한다.
[잘못된 예]
if (codec)
{
}
else
{
}

[올바른 예]
if (codec) {
} else {
}

예외 : 함수나 클래스 선언의 경우 중괄호를 라인의 처음에서 시작한다.
static void foo(int g)
{
    qDebug() << "foo : %i", g);
}

class Moo
{
};

명령문이 두줄 이상일 때에만 중괄호를 사용하자
[잘못된 예]
if (address.isEmpty()) {
  return false;
}

for (int i=0; i<10; ++i) {
    qDebug("%i", i);
}

[올바른 예]
if (address.isEmpty())
    return false;

for (int i=0; i<10; ++i)
  qDebug("%i", i);

예외 : 조건문이 여러줄에 걸쳐 있을 경우 명령문이 한줄이어도 중괄호 사용 가능
if (address.isEmpty()) || !isValid()
  || !coded) {
  return false;
}

예외 : if ~ else 문중 한쪽만 명령어가 여러개 인 경우 if, else절 모두 중괄호를 사용한다.
[잘못된 예]
if (address.isEmpty())
    return false;
else {
    qDebug("%s", qPrintable(address));
    ++iter;
}

[올바른 예]
if (address.isEmpty()) {
    return false;
} else {
    qDebug("%s", qPrintable(address));
    ++iter;
}

[잘못된 예]
if (a)
if (b)
...
else
...

[올바른 예]
if (a) {
    if (b)
    ...
    else
    ...
}

명령어 줄이 비었을 때 중괄호 사용
[잘못된 예]
    while (a);

[올바른 예]
    while (a) {}




--- 괄호

표현식을 그룹화 할 때 괄호를 사용한다.
[잘못된 예]
if (a && b || c)

a + b & c

[올바른 예]
if ((a && b) || c)

(a + b) & c




--- Switch 문

case 라벨은 switch 와 같은 열에 위치한다.
case 의 끝에는 break 문(또는 return)이 있어야 하며 그렇지 않을 경우(break가 없는) case 문이 바로 나오지 않는 다면 주석을 달아 break가 없음을 알린다.

switch (myEnum) {
case Value1:
    doSomething();
    break;
case Value2:
case Value3:
    doSomethingElse();
    // fall through
default:
    defaultHandling();
    break;
}




--- Jump 문(break, continue, return, 그리고 goto)

jump 문 뒤에는 'else'를 사용하지 않음
[잘못된 예]
if (thisOrThat)
    return;
else
    somethingElse();

[올바른 예]
if (thisOrThat)
    return;
somethingElse();

예외 : 코드가 대칭적으로 되어 있는 경우 가독성을 위해 else를 사용할 수 있다.




--- Line Break

한 줄에 100칸 이상 사용하지 말자.
단항 연산자가 여러 줄에 걸쳐 있을 경우 맨 앞에 사용 하자. 일부 창 크기가 작은 에디터에서 가려져 실수로 빠뜨릴 수가 있다.

[잘못된 예]
if (longExpression +
    otherLongExpresstion +
    otherOtherLongExpression {
}

[올바른 예]
if (longExpression
    + otherLongExpresstion
    + otherOtherLongExpression {
}

Qt !!!

추천0

댓글목록

인라이너님의 댓글

no_profile 인라이너 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

잘못된 예 라고 표현하기는 좀 그런것 같습니다.
코딩 컨밴션은 조직 문화마다 다른데 옳고 그름을 나누기 보다는 Qt 전체적인 코딩 스타일이 이렇다라고 알려주는 정도로 쓰는게 나을듯 해 보입니다.
실제 Qt Creator 에서도 옵션에서 Code Style 에서 다양한 코딩 컨밴션을 적용할수 있도록 하고 있습니다.
항상 좋은글들은 감사히 보고 있습니다 ;)

devilqoo님의 댓글의 댓글

no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

Qt 문서에 "Wrong" 이라고 쓰여있는걸 번역해 옮기 다보니 잘못된 예라고 하였네요.

아마도 문서 자체가 Qt 오픈소스에 기여를 하려는 사람들에게 Qt 개발 가이드라인을 강제하려는 목적이다 보니 그런 용어를 사용했으리라 생각 됩니다.

실은 번역을 마치고 저도 오늘부터 이 가이드라인에 따라 습관을 고치고 있습니다. 사내에 아직 코딩 가이드라인이 없다보니. ㅎㅎ

devilqoo님의 댓글

no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

아래는 참고 자료로 구글의 C++개발자를 위한 스타일 가이드 라인입니다.
예전에 영문판을 보려다 1/3보고 포기했는 데 어느 훌륭하신 분들이 한글화를 완료하였습니다.

가이드라인의 장단점을 들며 설명을 잘 해 놓았네요.
그리고 읽다 보면 왠지 C++ 속성 스터디 하는 느낌도 듭니다. :)

http://likelink.co.kr/29552

구름님님의 댓글

no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

고등학교때 담임선생님이 전산과목을 가르치셨습니다. 그분께서 하신말이 기억나네요.
'프로그램 코딩은 내가 보기보단 남이 보기에 편하고 좋게 작성하라'
한국 말이라는것은 알아도 그땐 잘 이해가 안갔는데, 겪어보니 알겠더군요.
같은 내용이라 생각됩니다. 물론 코딩 스타일에 나만의 개성이 생겨나기 마련이지만서도.

Total 198건 1 페이지
QT 강좌/팁 목록
번호 제목 글쓴이 조회 추천 날짜
198 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3886 0 09-10
197 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5451 0 12-03
196 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6847 1 03-07
195 QT/Embedded no_profile 요원009 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11228 0 11-13
194 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6413 0 05-18
193 QT/Embedded no_profile 잉농 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6172 0 05-14
192 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6549 0 04-01
191 QT/Embedded no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 21872 1 03-31
190 QT/Win32 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13203 0 03-17
189 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5844 0 02-13
188 QT/Win32 no_profile 인라이너 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5762 1 02-12
187 QT/Embedded no_profile 김아무개 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16067 0 11-12
186 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5824 0 11-11
185 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5883 0 11-11
열람중 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10509 0 10-22
183 QT/Win32
Qt와 C++11 댓글+ 2
no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10844 1 10-12
182 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10469 0 10-09
181 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7525 0 10-02
180 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8609 0 10-01
179 QT/X11 no_profile 별님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5411 0 09-25
178 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6047 0 09-16
177 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7522 0 09-03
176 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7448 0 09-02
175 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7934 2 09-02
174 QT/X11 no_profile 나무나무나무 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8354 0 07-25
173 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6751 2 07-11
172 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9357 2 07-09
171 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6558 2 07-08
170 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13029 1 07-07
169 QT/X11 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8218 0 07-02
게시물 검색

  • 게시물이 없습니다.

회원로그인

설문조사

새로운 홈페이지에 대한 평가

접속자집계

오늘
63
어제
497
최대
3,878
전체
4,081,903

Copyright © korone.net. All rights reserved.