'웹/웹.도움말'에 해당되는 글 21건

AutoSet6 환경에서 SVN 설정하기

웹/웹.도움말
오토셋을 한번 설치하고 나면 별일없이 잘 돌아가기에 아주 유용하게 사용했습니다. 
또한 오토셋 카페지기이신 차오이(키놀)님이 도움을 주셔서 큰 어려움이 없이 사용했습니다. 

이 문서는 http://cafe.naver.com/autoset.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=402&를 참고하여 작성되었습니다. 
구버젼 문서를 줄이고 약간 추가한 수준입니다. 게시물에 등록된 사진은 참고용으로 위 주소에서 가져온 관계로 설명과는 다를 수 있습니다. 

1. AutoSet6(도나, 6.x) 설치 : 오토셋 6.3.1 전체 설치 파일(93.1MB) - 다운로드

2. Tortoise SVN 설치 : TortoiseSVN 1.7.1 설치, 한국어 언어팩 설치 - 다운로드

 3. 바탕화면에 설치된 "오토셋 6 매니저 실행" 아이콘을 클릭하고 웹서버와 SVN 서버를 실행합니다.

  웹서버 시작 : 오토셋 매니저 - 파일 > 웹서버 시작
  SVN 서버 시작 : 오토셋 매니저 - 파일 > SVN  시작
  시스템 서비스로 등록 :  오토셋 매니저 - 파일 > NT 서비스 바로가기 > "웹서버 서비스로 등록"을 클릭합니다. 


4. SVN 저장소 설정

AutoSet6에서 SVN 저장소 루트 디렉토리는 "오토셋 경로\AutoSet\repos" 입니다. 
 SVN  저장소 루트 디렉토리에 여러 개의 이름으로 필요한 수 만큼 다음과 같이 저장소를 만들수 있습니다. 

repos/aaa
repos/bbb
repos/ccc

도스창을 실행해서 저장소 위치로 이동합니다.

윈도우 [시작] - [실행] - cmd 입력 후 엔터

svnadmin create --fs-type fsfs [새로 만들 저장소의 이름"]

svnadmin create --fs-type fsfs project01 라고 입력해서 만들었습니다.
 
오토셋 경로/repos/project01 이라는 이름으로 디렉토리가 만들어 집니다. 


위 이미지는 autosetOrga 란 이름으로 저장소를 만든 예이며, 본인이 원하는 이름으로 만드시면 됩니다. 

 
제대로 생성이 되었는지 확인하기 위해 

svn checkout file:///AutoSet6/repos/project01  명령을 통해 확인할 수 있습니다.
체크아웃된 리비젼 0 라는 메시지가 나오면 됩니다.  

svnserve -d -r [저장소의 이름] 명령으로 SVN 서버를 기동할 수 있습니다. 
이 명령 실행시 도스창은 멈춰서 있게 됩니다.

참고문서 덧글에는 SVN 서버를 자동으로 구동하기 위해 SVNSERVManager 툴을 추천합니다만
제가 해보니 이 툴을 설치하고 제거해도 구동에는 문제가 없습니다.
오토셋6에서는 자동으로 실행되는 걸로 추측됩니다. 오토셋 매니저에 서비스 등록 메뉴가 없어서 사용해 봤습니다. 



새로 도스창을 열어서 다음 명령으로 SVN 구동을 확인할 수 있습니다. 

svn checkout svn://192.168.0.1/project01 



마찬가지로 체크아웃된 리비젼 0 라는 메시지가 나오면 잘 처리가 된겁니다. 
파일을 하나 만들어서 수정하고 커밋을 하고 나면 리비젼 숫자가 바뀝니다. 이건 Tortoise 설정후 해볼 수 있습니다. 

참고로 도스창에서 위 명령을 사용하면 C 드라이브에 사용자 계정 아래에 project01 이란 이름으로 디렉토리가 만들어지고 그 아래에 파일들이 만들어져서 저장(동기화)됩니다.



만들어진 저장소 디렉토리 하위를 보면 오토셋 경로/repos/conf/passwd  파일이 있는데 

[user] 문구 다음에 SVN 서버의 project01 저장소에 접속할 사용자 아이디와 패스워드를 입력합니다. 

user01 = user01password




오토셋 경로/repos/project01/conf/svnserve.conf 파일을 열어서 편집합니다. 

anon-access = none     <-- 익명 사용자 읽기권한 없앰
auth-access = write    <-- 인증자 쓰기 권한 허용

password-db = passwd   <-- 바로전 편집한 파일

realm = AutoSet Project01 Repository <-- 저장소 인증후 나오는 타이틀



5. TortoiseSVN 설정

TortoiseSVN을 설치하면 따로 프로그램 창이 만들어지지 않고 탐색기에 명령이 덧붙여집니다. 
탐색기 빈곳을 마우스 오른버튼을 눌러서 [TortoiseSVN]-[설정]을 선택하여 언어를 한국어로 바꿔줍니다.

마우스 오른버튼을 눌러서 SVN 체크아웃을 선택하여 저장소 URL 에 svn://192.168.0.1/project01 을 입력하고 확인 버튼을 누릅니다.

인증정보 저장 창이 나타나면 아까 작성한 사용자명과 암호를 입력하고 입력정보 저장을 체크박스를 클릭하고 확인 버튼을 누르면 인증이 완료되고 체크아웃이 됩니다. 

TortoiseSVN은 [SVN 커밋]과 [SVN 업데이트]의 의미를 잘 구분해 사용하면 사용에 큰 문제가 없습니다. 

TortoiseSVN  설정 부분은 다음을 기약해 봅니다.  맨 위에 표식된 참고문서를 참고하셔도 됩니다.


 
Name
Password
Homepage
Secret

제로보드 사용시 다음과 같은 경고시 처리 방법

웹/웹.도움말

제로보드 사용시 다음과 같은 경고가 생길 경우,


Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0


php.ini 파일의 다음 값을 off 또는 0 으로 만든다.

session.bug_compat_warn = 1

register_globals 옵션을 enabled 로 하지 않으면 세션 extention 은 전역변수를 데이타로 인지하지 않기 때문에 register_globals = enable 로 해놓으시면 세션 변수나 폼으로 넘어오는 변수들을 넘어온 변수를 바로 쓸수 있게 해주는 옵션인데 보안상 안좋다는 이유로 disable 로 해줄 것으로 권장되는 옵션입니다. 
Name
Password
Homepage
Secret

웹브라우저들의 공통 단축키

웹/웹.도움말


Alt+Home : 홈페이지로

F11 : 전체 화면 보기

Ctrl+W : 페이지 닫기

Ctrl+P : 인쇄

Ctrl+H : 이전 열었던 페이지 목록

Ctrl+T : 새 탭 열기

Ctrl+Shift+T : 이전에 닫은 탭 다시 열기

Alt+D, F6 : 주소바로 이동

Ctrl+E, Ctrl+K : 검색바로 이동

Alt+R, F5 : 새로 고침

Alt+좌우 방향키 : 이전, 다음 페이지로 이동

Ctrl+Tab, Shift+Ctrl+Tab : 이전, 다음 탭으로 이동 

Ctrl+PageUP, Ctrl+PageDown : 이전, 다음 탭으로 이동

Spacebar, Shift+Spacebar : 페이지 위, 아래로 이동

검색바, 주소바 입력 후 Alt+엔터 : 새 탭으로 열기

링크 위에서 마우스 휠 클릭 ,Ctrl+왼쪽 버튼 클릭  : 새 탭으로 열기

Name
Password
Homepage
Secret

변수 작성 규칙과 띄워쓰기

웹/웹.도움말

이글은 인터넷에서 있는 글을 가져왔습니다만 많은 복사본으로 인해 어디가 소스인지를 잘 모르겠습니다. 그래서 그냥 가져온 글을 오타와 글자 크기 정도만 수정하여 붙였습니다. 혹시 문제가 된다면 댓글을 남겨주세요. 

그외 여기저기 떠도는 글들을 모아서 붙일 예정입니다. 


ver 0.1




이 네이밍 규칙은 닷넷 스파이더 팀에서 만든 [C# Coding Standards and Best Programming Practices]를 바탕으로 만들었습니다. 

1. 네이밍 관례와 표준

  이 문서 전반에 걸쳐 파스칼표기법과 카멜 표기법이 사용된다.  

  파스칼 표기법 - 모든 단어에서 첫번째 문자가 대문자이며 나머지는 소문자이다.

    예: BackColor

  카멜 표기법 - 최초에 사용된 단어를 제외한 첫번째 문자가 대문자이며 나머지는 소문자이다.

    예: backColor

 

1. 클래스 명에는 파스칼 표기법을 사용한다.

public class HelloWorld

{

...

}


2. 함수(Method) 명에는 파스칼 표기법을 사용한다.

void SayHello(string name)

{

...

}


3. 변수와 함수 파라미터에는 카멜표기법을 사용한다.

int totalCount = 0;

void SayHello(string name)

{

string fullMessage = "Hello " + name;

...

}


4. 인터페이스에는 접두사 "I"가 포함된 파스칼표기법에 따른다. ( Example: IEntity )


5. 변수명에 헝가리안 표기법을 사용하지 않는다. 이전에는 많은 프로그래머들이 변수명에 데이타 타입에 해당하는 접두사를 첨가하겨 맴버변수에는 m_을 접두사로 사용하는 헝가리안 표기법을 사용했다. 

string m_sName;
int nAge;

그러나 닷넷 코딩 표준에서 헝가리안 표기법은 추천하지 않는다. 데이타 타입을 사용하는 것과 멤버 변수를 표현하기 위한 m_ 은 사용해서는 안된다. 모든 변수는 카멜 표기법을 사용해야 한다. 몇몇 프로그래머들은 아직 m_를 붙이거나 데이타 타입을 표시하는 것을 더 좋아하겠지만, 이제 이것들은 멤버 변수를 확인하기위한 쉬운 방법이 아니다.


6. 변수에 모든 의미를 충분히 담아라. 약어를 사용하지 말것.

좋은 예:

string address

int salary


나쁜 예:

string nam

string addr

int sal


7. i, n, s 같이 한글자로 된 이름을 사용하지 말것. index, temp 같은 이름을 사용할 것.

한가지 예외가 있다면 루프에서 반복을 의미하는 변수를 하용하는 경우이다.

for ( int i = 0; i < count; i++ )

{

...

}

만일 변수가 단지 반복을 위한 카운터로만 사용된다면 그리고 그것이 루프안에 있는 다른 어떤 곳에서도 사용되지 않는다면, 많은 사람들은 아직까지 다른 적합한 단어는 만들어서 사용하는 것보다 i를 사용하는 것을 선호한다.


8. 지역변수에는 밑줄(_)을 사용하지 않느다.


9. 모든 멤버 변수들은 앞에 밑줄(_)을 사용해야 한다. 그래야 다른 지역변수들과 구분할 수 있다.


10. 키워드와 비슷한 이름을 하용하지 말것.


11. boolean 이 들어가는 변수, 속성, 함수(method)등은 "is" 또는 유사한 접두사를 사용한다.

예: private bool _isFinished


12. 네임스페이스 명은 표준 패턴을 따라야 한다.

<회사명>.<제품명>.<최상위모듈>.<하위모듈>


13. UI 구성요소를 위하여 적당한 접두사를 사용해야 한다. 그래서 다른 변수들과 구분할 수 있어야 한다.

여기 추천하는 서로 다른 두 가지 방식이 있다.


a. 모든 UI 구성요소를 위하여 공통적인 접두사(ui_)를 사용하는 것이다. 이것은 모든 UI 구성요소를 묶는데 도움을 줄 것이고 쉽게 이해하고 접근하게 할 것이다.

b. 각각의 UI 구성요소마다 접두사를 적용하는 방법. 간단한 목록이 아래에 있다. 닷넷은 다양한 컨트롤들이 제공되므로 더 많은 컨트롤(써드파티 컨트롤을 포함한)에 대한 표준을 정의해야 한다.

 Control  prifix  Control  prifix
 Label  lbl  Checkbox  chk
 TextBox  txt  CheckBoxList  cbl
 DataGrid  dtg  RadioButton  rdo
 Button  btn  RadioButtonList  rbl
 ImageButton  imb  Image  img
 Hyperlink  hlk  Panel  pnl
 DropDownList  ddl  PlaceHolder  phd
 ListBox  lst  Table  tbl
 DataList  dtl  Validators  val
 Repeater  rep    
    

14. 파일명은 클래스 명과 같아야 한다.

예를 들어, 클래스 명이 "HelloWorld" 라면 파일명은 "HelloWorld.cs" 이어야 한다.


15.  파일명은 파스칼 표기법을 사용한다.


메서드나 함수 이름은 반드시 동사이면서 소문자로 시작해 대소문자를 섞어 써야 한다.

  • getName(), computeTotalWidth()
  • C++ 개발 커뮤니티에서 일반적인 용례이다. 이 형식은 변수 이름과 같지만  C++에서 함수는 형식상 변수와 이미 구별된다.  

약어와 동의어를 이름으로 사용할 때는 반드시 대문자가 아니어야 한다.

  • exportHtmlSource();    // 아님: exportHTMLSource();
    openDvdPlayer();        // 아님:  openDVDPlayer();
  • 기본 이름에 대해 모두 대문자를 사용하면 위에서 제시한 명명 규칙과 충돌한다. 이런 종류의 변수는 dVD, hTML 등으로 이름 지어야 하나 분명 가독성이 매우 나쁘다. 위 예에서 보여준 다른 문제는 이런 이름을 다른 것과 붙여 사용할 때 가독성이 심각하게 나빠진다는 점이다. 즉, 약어 다음에 오는 단어가 원하는 만큼 돋보이지 않게 된다. 


특정한 명명규칙
16. get/set은 반드시 속성(attribute)에 직접 접근할 때 사용해야 한다.
  • employee.getName();
    employee.setName(name);

    matrix.getElement(2, 4);
    matrix.setElement(2, 4, value);
  • C++ 개발 커뮤니티에서 일반적인 용례이며, 자바에서는 거의 표준이 되었다.

 

17. compute는 무언가 계산하는 메서드에서 사용한다.

  • valueSet->computeAverage();
    matrix->computeInverse();
  • 이 것은 시간을 소비할 수 있는 연산이라는 것을 즉시 알아챌 수 있는 단서를 제공해 반복해서 사용한다면 결과를 따로 저장해 두는 것을 고려하도록 할 수 있다. 이처럼 용어를 일관되게 사용하면 가독성을 향상시킨다.

 

18. find는 무언가 찾는 메서드에서 사용한다.

  • vertex.findNearestVertex();
    matrix.findMinElement();
  • 최소한의 계산이 포함된, 간단한 검색 메서드라는 것을 즉시 알아챌 수 있는 단서를 다른 개발자에게 제공한다. 이처럼 용어를 일관되게 사용하면 가독성을 향상시킨다.

 

19. initialize는 객체 또는 개념을 만들 때 사용한다.

  • printer.initializeFontSet();
  • 영국어 initialise보다 미국어 initialize를 사용해야 하며, 약어 init는 피해야 한다.

 

20. GUI 요소(component)를 나타내는 변수는 해당 요소 타입 이름을 접미어로 사용해야 한다.

  • mainWindow, propertiesDialog, widthScale, loginText,
    leftScrollbar, mainForm, fileMenu, minLabel, exitButton, yesToggle 등.
  • 해당 변수 타입을 통해 리소스 객체를 즉시 알아챌 수 있는 단서를 사용자에게 제공하므로 가독성을 향상시킨다.

 

21. 복수형은 객체 모음(collection)을 나타내는 이름에 사용해야 한다.

  • vector<Point> point;
    int                 values[];
  • 변수 타입과 더불어 해당 요소에 수행할 수 있는 연산을 즉시 알아챌 수 있는 단서를 사용자에게 제공하므로 가독성을 향상시킨다.

 

22. 접두어 n은 객체 수를 나타내는 변수에 사용해야 한다.

  • nPoints, nLines
  • 객체 수를 나타내는 이 관례적인 표기법은 수학에서 가져왔다.

 

23. 접미어 No는 엔티티(entity) 번호를 나타내는 변수에 사용해야 한다.

  • tableNo, employeeNo
  • 엔티티 번호를 나타내는 이 관례적인 표기법은 수학에서 가져왔다. 세련된 다른 방법은 iTable, iEmployee처럼 접두어 i를 붙이는 것이며, 이를 통해 효과적으로 그런 변수를 명명된 반복자로 만들 수 있다.

 

24. 반복자 변수는 i, j, k 등으로 호출해야 한다.

  • for (int i = 0; i < nTables; i++) {
        :
    }


    for (vector<MyClass>: : iterator i = list.begin(); i != list.end(); i++) {
        Element element = *i;
        ...
    }
  • 반복자를 나타내는 이 관례적인 표기법은 수학에서 가져왔다. 변수 이름으로 j,  k 등은  중첩 루프에서만 사용해야 한다. (옮긴이 주: 이 표기법은 되도록 간단한 루프에서만 사용하고 복잡하거나 긴 루프에서는 의미있는 이름을 사용하는 게 좋다.)

 

25. 접두어 is는 불린 변수와 메서드에 사용해야 한다.

  • isSet, isVisible, isFinished, isFound, isOpen
  • C++ 개발 커뮤니티에서 일반적이며 자바에서는 일부분에서 강제하는 용례이다. 접두어 is를 사용하면 status나 flag처럼 좋지 못한 불린 이름을 선택하는 흔한 문제를 해결할 수 있다. 사실 isStatus나 isFlag는 적절하지 못하므로 더 의미있는 이름을 선택해야 한다.

    다음은 상황에 따라 접두어 is보다 더 나은 방법 몇 가지로 has, can 그리고 should 접두어를 사용한다.
        bool hasLicense();
        bool canEvaluate();
        bool shouldSort();

 

26. 반의어는 반드시 대응하는 연산에 대해 사용해야 한다[1].

  • get/set, add/remove,  create/destroy, start/stop, insert/delete,
    increment/decrement, old/new, begin/end, first/last, up/down, min/max,
    next/previous, open/close, show/hide, suspend/resume, etc.
  • 대칭 관계를 통해 복잡성을 낮출 수 있다.

 

27. 이름에 약어는 피해야 한다.

  • computeAverage();    // 아님: compAvg();
  • 두 가지 단어 종류를 생각해야 하는데, 첫 번째는 사전에 있는 일반 단어이며 절대 약어로 쓰면 안 된다. 즉, 절대 다음처럼 쓰지 않는다.

    command 대신 cmd
    copy        대신 cp
    point        대신 pt
    compute  대신 comp
    initialize   대신 init
    등.

    그에 반해 약어/두문자어가 더 자연스런 특정 분야의 관용구는 약어 형태를 유지해야 하며, 절대 다음처럼 쓰지 않는다.

    html 대신 HypertextMarkupLanguage
    cpu  대신 CentralProcessingUnit
    pe   대신 PriceEarningRatio
    등.

 

28. 포인터를 이름에 사용하는 것은 특히 피해야 한다.

  • Line* line;    // 아님: Line* pLine;
                      // 아님: Line* linePtr;
  • C/C++ 환경에서 많은 변수가 포인터이므로 이와 같은 관례는 따르기가 거의 불가능하다. 또한 C++에서 객체는 흔히, 프로그래머가 특정 구현 내용을 무시할 수 있는 간접 타입이다. 포인터를 이름에 사용할 때는 객체의 실제 타입이 특별히 중요할 때에 한해 해당 타입을 강조하기 위해서이다.

 

29. 부정적인(negated) 불린 변수 이름은 반드시 피해야 한다.

  • bool isError;    // 아님: isNoError
    bool isFound;  // 아님: isNotFound
  • 문제는 이런 이름을 논리 부정 연산자와 함께 사용할 때 이중 부정을 통해 결과가 만들어지므로 생긴다. !isNotFound 의 의미를 즉시 명확하게 알아차릴 수 없다.

 

30. 열거 상수는 공통 타입 이름을 접두어로 붙인다.

  • enum Color {
        COLOR_RED,
        COLOR_GREEN,
        COLOR_BLUE,
    };
  • 이러한 것은 해당 선언을 어디에서 찾을 수 있는지, 어느 상수가 함께 속한 것인지, 그리고 그 상수가 어떤 개념을 나타내는지 등 추가 정보를 제공한다. 다른 방법은 Color: : RED, Airline: : AIR_FRANCE 등과 같이 항상 공통 타입을 통해 해당 상수를 참조하는 것이다.

 

31. 예외 클래스는 Exception 접미어를 붙여야 한다.

  • class AccessException
    {
        :
    }
  • 예외 클래스는 실제 해당 프로그램의 주된 설계 부분이 아니며(옮긴이 주: 프로그램에서 주된 처리 로직이 아니라는 뜻), 이와 같이 이름을 붙이면 다른 클래스와 상대적으로 구별된다.

 

32. 함수(무언가를 반환하는 메서드)는 이름 앞에 반환하는 것을, 프로시저(void 메서드)는 이름 앞에 하는 일을 써야 한다.

  • 가독성을 높일 수 있다. 이를 통해 해당 단위에서 해야 하는 것과 특히 하지 않는 모든 것을 명확히 한다. 더불어 해당 코드의 부작용을 더 쉽게 제거할 수 있다.(옮긴이 주: 이 항목은 의미가 명확하지 않음)

  •  

2. 들여쓰기


1. 들여쓰기에는 TAB 을 사용한다. SPACE를 사용하지 않는다. Tab 사이즈는 4로 정의한다.


2. 주선은 코드와 같은 레벨에 있어야 한다(들여쓰기의 레벨을 같이 사용한다.).

좋은 예:

// Format a message and display
string fullMessage = "Hello " + name;
DateTime currentTime = DateTime.Now;
string message = fullMessage + ", the time is : " + currentTime.ToShortTimeString();
MessageBox.Show ( message );


좋지 않은 예:

// Format a message and display
    string fullMessage = "Hello " + name;
    DateTime currentTime = DateTime.Now;
    string message = fullMessage + ", the time is : " + currentTime.ToShortTimeString();
    MessageBox.Show ( message );


3. 중괄호는 중괄호 밖에 있는 코드와 같은 레벨에 있어야 한다.

            
4. 논리적인 코드 그룹은 빈 줄 하나로 구분해야 한다.

좋은 예:
        bool SayHello ( string name )
        {
               string fullMessage = "Hello " + name;
               DateTime currentTime = DateTime.Now;

               string message = fullMessage + ", the time is : " + currentTime.ToShortTimeString();

               MessageBox.Show ( message );

               if ( ... )
               {

                       // Do something
                       // ...


                       return false;

               }

               return true;

        }


안 좋은 예:

        bool SayHello (string name)
        {
               string fullMessage = "Hello " + name;
               DateTime currentTime = DateTime.Now;
               string message = fullMessage + ", the time is : " + currentTime.ToShortTimeString();
               MessageBox.Show ( message );
               if ( ... )
               {
                       // Do something
                       // ...
                       return false;

               }
               return true;
        }


5. There should be one and only one single blank line between each method inside the class.


6. 중괄호는 다른 라인과 분리되어 있어야하며 라인을 같이 쓰면 안된다.

좋은 예:
               if ( ... )    

               {

                       // Do something

               }


안 좋은 예:
               if ( ... )     {

                       // Do something

               }


7. 지시자(operator)와 괄호 앞뒤로는 한 칸의 공간을 남긴다.

좋은 예:

               if ( showResult == true )
               {
                       for ( int i = 0; i < 10; i++ )
                       {
                              //
                       }
               }


나쁜 예:

               if(showResult==true)
               {
                       for(int    i= 0;i<10;i++)
                       {
                              //
                       }
               }


8. 연관된 코드를 묶을때는 #region을 사용해라. #region을 사용해서 묶는다면 그 페이지는 훨씬 간략해질 것이다.


9. private 멤버 변수, 속성, 그리고 메쏘드는 파일의 하단에 그리고 public 멤버들을 파일의 하단에 위치하도록 하라.


 









switch 문은 다음 형식이어야 한다.

  • switch (condition) {
        case ABC :
            statements;
            // 지나감

        case DEF :
            statements;
            break;

        case XYZ :
            statements;
            break;

        default :
            statements;
            break;
    }
  • 각 case 키워드를 전체 switch 문에 대해 들여쓰기한다는 점에 주의한다. 이를 통해 전체 switch 문을 두드러지게 한다. 또한 : 문자 앞에 있는 여분의 빈칸에 주의한다. case 문에 break 문이 없으면 항상 명시적으로 '지나감'이라고 주석을 달아야 한다. break 문이 없는 것은 일반적인 오류이므로, 사용하지 않을 때는 의도적이라는 것을 명확히 해야 한다. 


do-while 문은 다음 형식이어야 한다.

  • do {
        statements;
    } while (condition);
  • 이 형식은 위에서 제시한 일반 구역 규칙을 따른다. 

기본 들여쓰기는 2로 해야 한다.

  • for (i = 0; i < nElements; i++)
      a[i] = 0;
  • 들여쓰기를 1로 하면 코드의 논리적 레이아웃을 강조하기엔 작고, 4보다 크면 많은 단계로 중첩한 코드가 읽기 어려울 뿐만 아니라 줄을 나눠야 할 가능성도 커진다. 들여쓰기는 2, 3 그리고 4 중에서 선택하는 것이 일반적이며 2를 선택해 코드를 나눌 기회를 줄인다. (역자주:  개인적으로 2보다는 4가 구분하기 더 좋고 일반적으로 가장 많이 쓰는 형태가 아닐까 생각한다. 또한 깊게 중첩한 코드는 피하는 게 좋다.)


while 문은 다음 형식이어야 한다.

  • while (condition) {
        statements;
    }
  • 이 형식은 위에서 제시한 일반 구역 규칙을 따른다.

기본 들여쓰기는 2로 해야 한다.

  • for (i = 0; i < nElements; i++)
      a[i] = 0;
  • 들여쓰기를 1로 하면 코드의 논리적 레이아웃을 강조하기엔 작고, 4보다 크면 많은 단계로 중첩한 코드가 읽기 어려울 뿐만 아니라 줄을 나눠야 할 가능성도 커진다. 들여쓰기는 2, 3 그리고 4 중에서 선택하는 것이 일반적이며 2를 선택해 코드를 나눌 기회를 줄인다. (역자주:  개인적으로 2보다는 4가 구분하기 더 좋고 일반적으로 가장 많이 쓰는 형태가 아닐까 생각한다. 또한 깊게 중첩한 코드는 피하는 게 좋다.)


부동소수점 상수는 항상 소수점과 함께 써야 한다.

  • double total = 0.0;          // 아님: double total = 0;
    double speed = 3.0e8;    // 아님: double speed = 3e8;

    double sum;
        :
    sum = (a + b) * 10.0;
  • 이는 정수와 부동소수점 수의 본질적인 차이를 강조한다. 수학적으로 두 모델은 완전히 다르며 호환되지 않는 개념이다. 또한 위의 마지막 예제처럼 코드의 어떤 지점에서 명확하지 않을 수 있는 대입되는 변수(sum)의 타입을 강조한다.

 

부동소수점 상수는 항상 소수점 앞에 숫자를 써야 한다.

  • double total = 0.5;    // 아님: double total = .5;
  • C++에서 숫자와 표현식 시스템은 수학에서 빌려왔으므로 가능한 구문에 대한 수학적 관례를 따라야 한다. 또한 .5보다 0.5가 휠씬 읽기 쉬우며 정수 5와 헷갈리지 않는다. 


루프 변수는 해당 루프 바로 앞에서 초기화해야 한다.

  • isDone = false;        // 아님: bool isDone = false;
    while (!isDone) {     //         :
        :                         //         while (!isDone) {
    }                           //              :
                                 //         }

 

54. do-while 루프는 피한다.

  • do-while 루프는 해당 루프의 가장 아래에 조건이 있기 때문에 일반적인 while 루프와 for 루프보다 가독성이 떨어진다. 해당 루프의 사용 범위를 이해하려면 반드시 전체 루프를 살펴봐야 한다. 게다가 do-while 루프는 while 루프나 for 루프로 쉽게 바꿔 쓸 수 있으므로 필요하지 않다. 이 구조의 사용을 줄여 가독성을 향상시킨다.

 

55. 루프에서 break와 continue 사용을 피해야 한다.

  • 이 문장은 구조적인 대체 코드보다 가독성을 더 높일 수 있을 때만 사용해야 한다.

 

56. 무한 루프는 while (true) 형식을 사용해야 한다.

  • while (true) {
        :
    }


    for (;;) {       // 아님!
        :
    }

    while (1) {    // 아님!
        :
    }
  • 1에 대해 시험하는 것은 필요하지도 의미적이지도 않다. for (;;) 형식은 가독성이 매우 나쁘며 실제 무한 루프인지 명확하지 않다.

파일 내용은 반드시 80 열(column) 내로 유지해야 한다.

  • 80 열은 편집기, 터미널 에뮬레이터, 프린터와 디버거의 공통적인 치수이며 여러 사람이 공유하는 파일은 이런 제한을 지켜야 한다. 이를 통해 프로그래머 사이에 파일을 전달할 때 의도하지 않은 줄바꿈을 피할 수 있어 가독성을 향상시킨다.

객체 이름이 암시되어 있으면 메서드 이름에서 반복 사용하지 말아야 한다.

  • line.getLength();    // 아님: line.getLineLength();
  • 클래스 선언에서 두 번째가 자연스러운 것처럼 보이지만 불필요하게 사용한 예이다.
 

get/set은 반드시 속성(attribute)에 직접 접근할 때 사용해야 한다.

  • employee.getName();
    employee.setName(name);

    matrix.getElement(2, 4);
    matrix.setElement(2, 4, value);
  • C++ 개발 커뮤니티에서 일반적인 용례이며, 자바에서는 거의 표준이 되었다.

 

17. compute는 무언가 계산하는 메서드에서 사용한다.

  • valueSet->computeAverage();
    matrix->computeInverse();
  • 이 것은 시간을 소비할 수 있는 연산이라는 것을 즉시 알아챌 수 있는 단서를 제공해 반복해서 사용한다면 결과를 따로 저장해 두는 것을 고려하도록 할 수 있다. 이처럼 용어를 일관되게 사용하면 가독성을 향상시킨다.

 

18. find는 무언가 찾는 메서드에서 사용한다.

  • vertex.findNearestVertex();
    matrix.findMinElement();
  • 최소한의 계산이 포함된, 간단한 검색 메서드라는 것을 즉시 알아챌 수 있는 단서를 다른 개발자에게 제공한다. 이처럼 용어를 일관되게 사용하면 가독성을 향상시킨다.

 

19. initialize는 객체 또는 개념을 만들 때 사용한다.

  • printer.initializeFontSet();
  • 영국어 initialise보다 미국어 initialize를 사용해야 하며, 약어 init는 피해야 한다.

 

20. GUI 요소(component)를 나타내는 변수는 해당 요소 타입 이름을 접미어로 사용해야 한다.

  • mainWindow, propertiesDialog, widthScale, loginText,
    leftScrollbar, mainForm, fileMenu, minLabel, exitButton, yesToggle 등.
  • 해당 변수 타입을 통해 리소스 객체를 즉시 알아챌 수 있는 단서를 사용자에게 제공하므로 가독성을 향상시킨다.

 

21. 복수형은 객체 모음(collection)을 나타내는 이름에 사용해야 한다.

  • vector<Point> point;
    int                 values[];
  • 변수 타입과 더불어 해당 요소에 수행할 수 있는 연산을 즉시 알아챌 수 있는 단서를 사용자에게 제공하므로 가독성을 향상시킨다.

 

22. 접두어 n은 객체 수를 나타내는 변수에 사용해야 한다.

  • nPoints, nLines
  • 객체 수를 나타내는 이 관례적인 표기법은 수학에서 가져왔다.

 

23. 접미어 No는 엔티티(entity) 번호를 나타내는 변수에 사용해야 한다.

  • tableNo, employeeNo
  • 엔티티 번호를 나타내는 이 관례적인 표기법은 수학에서 가져왔다. 세련된 다른 방법은 iTable, iEmployee처럼 접두어 i를 붙이는 것이며, 이를 통해 효과적으로 그런 변수를 명명된 반복자로 만들 수 있다.

 

24. 반복자 변수는 i, j, k 등으로 호출해야 한다.

  • for (int i = 0; i < nTables; i++) {
        :
    }


    for (vector<MyClass>: : iterator i = list.begin(); i != list.end(); i++) {
        Element element = *i;
        ...
    }
  • 반복자를 나타내는 이 관례적인 표기법은 수학에서 가져왔다. 변수 이름으로 j,  k 등은  중첩 루프에서만 사용해야 한다. (옮긴이 주: 이 표기법은 되도록 간단한 루프에서만 사용하고 복잡하거나 긴 루프에서는 의미있는 이름을 사용하는 게 좋다.)

 

25. 접두어 is는 불린 변수와 메서드에 사용해야 한다.

  • isSet, isVisible, isFinished, isFound, isOpen
  • C++ 개발 커뮤니티에서 일반적이며 자바에서는 일부분에서 강제하는 용례이다. 접두어 is를 사용하면 status나 flag처럼 좋지 못한 불린 이름을 선택하는 흔한 문제를 해결할 수 있다. 사실 isStatus나 isFlag는 적절하지 못하므로 더 의미있는 이름을 선택해야 한다.

    다음은 상황에 따라 접두어 is보다 더 나은 방법 몇 가지로 has, can 그리고 should 접두어를 사용한다.
        bool hasLicense();
        bool canEvaluate();
        bool shouldSort();

 

26. 반의어는 반드시 대응하는 연산에 대해 사용해야 한다[1].

  • get/set, add/remove,  create/destroy, start/stop, insert/delete,
    increment/decrement, old/new, begin/end, first/last, up/down, min/max,
    next/previous, open/close, show/hide, suspend/resume, etc.
  • 대칭 관계를 통해 복잡성을 낮출 수 있다.

 

27. 이름에 약어는 피해야 한다.

  • computeAverage();    // 아님: compAvg();
  • 두 가지 단어 종류를 생각해야 하는데, 첫 번째는 사전에 있는 일반 단어이며 절대 약어로 쓰면 안 된다. 즉, 절대 다음처럼 쓰지 않는다.

    command 대신 cmd
    copy        대신 cp
    point        대신 pt
    compute  대신 comp
    initialize   대신 init
    등.

    그에 반해 약어/두문자어가 더 자연스런 특정 분야의 관용구는 약어 형태를 유지해야 하며, 절대 다음처럼 쓰지 않는다.

    html 대신 HypertextMarkupLanguage
    cpu  대신 CentralProcessingUnit
    pe   대신 PriceEarningRatio
    등.

 

28. 포인터를 이름에 사용하는 것은 특히 피해야 한다.

  • Line* line;    // 아님: Line* pLine;
                      // 아님: Line* linePtr;
  • C/C++ 환경에서 많은 변수가 포인터이므로 이와 같은 관례는 따르기가 거의 불가능하다. 또한 C++에서 객체는 흔히, 프로그래머가 특정 구현 내용을 무시할 수 있는 간접 타입이다. 포인터를 이름에 사용할 때는 객체의 실제 타입이 특별히 중요할 때에 한해 해당 타입을 강조하기 위해서이다.

 

29. 부정적인(negated) 불린 변수 이름은 반드시 피해야 한다.

  • bool isError;    // 아님: isNoError
    bool isFound;  // 아님: isNotFound
  • 문제는 이런 이름을 논리 부정 연산자와 함께 사용할 때 이중 부정을 통해 결과가 만들어지므로 생긴다. !isNotFound 의 의미를 즉시 명확하게 알아차릴 수 없다.

 

30. 열거 상수는 공통 타입 이름을 접두어로 붙인다.

  • enum Color {
        COLOR_RED,
        COLOR_GREEN,
        COLOR_BLUE,
    };
  • 이러한 것은 해당 선언을 어디에서 찾을 수 있는지, 어느 상수가 함께 속한 것인지, 그리고 그 상수가 어떤 개념을 나타내는지 등 추가 정보를 제공한다. 다른 방법은 Color: : RED, Airline: : AIR_FRANCE 등과 같이 항상 공통 타입을 통해 해당 상수를 참조하는 것이다.

 

31. 예외 클래스는 Exception 접미어를 붙여야 한다.

  • class AccessException
    {
        :
    }
  • 예외 클래스는 실제 해당 프로그램의 주된 설계 부분이 아니며(옮긴이 주: 프로그램에서 주된 처리 로직이 아니라는 뜻), 이와 같이 이름을 붙이면 다른 클래스와 상대적으로 구별된다.

 

32. 함수(무언가를 반환하는 메서드)는 이름 앞에 반환하는 것을, 프로시저(void 메서드)는 이름 앞에 하는 일을 써야 한다.

  • 가독성을 높일 수 있다. 이를 통해 해당 단위에서 해야 하는 것과 특히 하지 않는 모든 것을 명확히 한다. 더불어 해당 코드의 부작용을 더 쉽게 제거할 수 있다.(옮긴이 주: 이 항목은 의미가 명확하지 않음)  



fready 2011.07.13 12:57 신고 URL EDIT REPLY
좋은자료 감사합니다. 제가 하는 프로젝트에도 적용해봐야겠네요. 감사합니다.
Favicon of http://gudle.net BlogIcon 애부리기 구들 | 2011.09.06 10:12 신고 URL EDIT
저도 글을 적어두고 한동안 잊고 있었습니다.

댓글을 보고 다시 되새겨봅니다.

감사합니다.
Name
Password
Homepage
Secret

wizmall 스킨 위치

웹/웹.도움말
압축스킨을 푼 후 디렉토리 통째로 각각 아래와 같은 폴더 밑으로 넣으시면 관리자 모드에서 적용됩니다.

wizmember 스킨계열(회원등록, 수정등에 적용) : /wizmember/

wizboard 스킨계열
 - 보드스킨 : /wizboard/skin/
 - 아이콘스킨 : /wizboard/icon/
 - 리플라이스킨 : /wizboard/skin_reple/
 - 페이징스킨 : /wizboard/skin_btnm/

카드모듈스킨계열
/skinwiz/cardmodule/

카트(장바구니)스킨 계열
/skinwiz/cart/

견적 스킨 계열
/skinwiz/estimate/

메인스킨
/skinwiz/index/

검색 스킨 계열
/skinwiz/search/

숍 디스플레이(상품디스플레이) 스킨 계열
/skinwiz/shop/

상품 상세보기 스킨 계열
/skinwiz/viewer/

공동구매 스킨 계열
/skinwiz/wizcoorbuy

위시리스트(상품 보관함) 스킨 계열
/skinwiz/wizwish

등이 있구여..

기타로
달력스킨 계열
/util/wizcalendar/

폼메일스킨계열
/util/wizmail/skin/

투표(폴) 스킨계열
/util/wizpoll/

이 있습니다.

현재 짚코드도 스킨형식으로 새로 고칠려구 하고 있습니다.
Favicon of http://aquaminx.tistory.com BlogIcon 앙꼬마 2008.11.26 04:07 신고 URL EDIT REPLY
그누 계열만 가지고 8개의 쇼핑몰을 만들어본적이 있는데...
위즈몰도 살펴보니 괜찮을것같네요 ^^
Favicon of http://gudle.net BlogIcon 애부리기 구들 | 2008.11.26 04:27 신고 URL EDIT
쇼핑몰은 공개된 프로그램을 사용해서 돌려본 수준입니다.
디자인 능력이 항상 부족해서 시간에 비해 그림이 안나옵니다.
샘플 사이트를 복사하는 건 되지만 창작은.. 좌절입니다.

그누 게시판도 좋은 스킨이 많아서 관심 많이 가진 녀석인데
제로보드로 작업해 둔 코드랑 잘 안맞아서 작업하는게 귀찮아서
그냥 제로보드로 작업합니다.

몇개 허접한 게시판도 있습니다만 게시판 요구가 하두 다양해서
양해구하고 그냥 제로보드 게시판을 사용합니다.

그누는 견적관련 스킨때문에 뒤져본건데.. 버젼업 되고나서
깔끔해졌습니다만 아직 제대로 파악하지 못한 수준입니다.

역시 하던걸 하는게 편해서..
Favicon of http://gudle.net BlogIcon 애부리기 구들 2008.11.26 04:29 신고 URL EDIT REPLY
위즈몰도 쓸만합니다.

공개된 프로그램인데다 MS윈도우에서도 잘 돌아가다보니 편하게 쓸수 있습니다.
아무래도 MS윈도우 환경에서는 100% 완전한건 아니지만 작은 규모로는 쓸만합니다.

코드도 디자인도 좀 예전꺼여서 많이 손봐야 하긴 하지만
대부분의 기능은 지원됩니다.
Favicon of http://aquaminx.tistory.com BlogIcon 앙꼬마 | 2008.11.26 04:39 신고 URL EDIT
^^ 그냥 손에 익은게 제일 편한것같습니다.
스킨 만드는 작업이 제일 왕짜증 ㅠㅠ
간격맞추느라 결국..투명이미지로 스페이싱 조정하는게
제일 편하다는 꽁수로 몇년째 버티고 있습니다.
다만 예전만큼 리눅스와 맥 윈도 클라이언트를
굳이 신경안쓰고 익스만 신경쓰면된다는..
참 편하면서도 이상한 환경에 있는 우리나라가 좋은것같기도 하고 아닌것같기도 하면서 뭐...그렇네요 ^^
Favicon of http://aquaminx.tistory.com BlogIcon 앙꼬마 2008.11.26 05:11 신고 URL EDIT REPLY
아 티스토리 관리자 모드에서 넘어온경우...메뉴가 아래로 내려가는경우가 좀 있나봐요
저도 이글 관리자모드에서 들어오니 메뉴가 아래있네요
Favicon of http://gudle.net BlogIcon 애부리기 구들 | 2008.11.26 10:15 신고 URL EDIT
음.. 아무래도 티스토리에서 사용하는 같은 변수이름을 사용하는 스타일시트가 블로그마다 서로 다른 정열방식으로 인해 생기는 버그가 아닌가 생각합니다.

테터툴즈에 보고된게 없는걸로 봐서..

스킨 제작자가 태그 열고 태그 닫지 않은 그런 문제로 인해 발생할 수도 있겠네요. 뭐.. 추측입니다만...
Name
Password
Homepage
Secret

티스토리 툴바