LazarusCompleteGuide:3.1

From 흡혈양파의 번역工房
Revision as of 16:17, 15 February 2013 by Onionmixer (talk | contribs) (LCG 3.1 draft)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

라자루스 메인 메뉴

메인 메뉴의 상위에 위치한 라자루스 메뉴는 일상 프로그래밍에서 필요로 하는 기능으로 접근할 수 있도록 해준다. 내장된 기능 외에도 IDE를 다양한 방식대로 맞춤 사용할 수 있으며 자주 사용하는 메뉴 옵션을 키보드에 단축키로 설정할 수 있다 (Environment ⇒ Options... ⇒ Editor, Key Mappings).


파일 메뉴

파일 메뉴는 파일을 작업할 때 필요한 기본 기능에 접근하도록 해준다.

그림 3.1: 파일 메뉴


일부 프로그램들은 하나의 파일만 가지는데, 언젠가는 더 많은 파일이 필요할 것이다. 이때 File ⇒ New form을 이용해 새로운 (빈) 폼을 생성한다. 모든 폼은 유닛을 기반으로 하기 때문에 새로운 폼과 함께 새로운 유닛이 자동으로 생성된다.


기능 또는 프로시저 묶음을 구분하여 유지하고자 하는 경우 File ⇒ New Unit 옵션을 사용한다. 이는 그러한 프로시저를 위치시킬 수 있는 빈 유닛을 (폼 없이) 제공한다.


새로운 프로젝트 또는 다른 상황에서 위의 두 가지 옵션으로 충분하지 않은 경우, File ⇒ New…라는 또 다른 옵션이 있다. 다양한 프로젝트 타입에 관한 자세한 정보는 4장에서 찾을 수 있다.


File ⇒ Open... 과 File ⇒ Close 는 자체 설명적(self-explanatory) 옵션이다. File ⇒ Open Recent는 사용자가 최근에 마지막으로 열었던 몇 개의 파일을 리스트로 보여준다 (기본 값: 10개). 최근 연 파일의 수는 Environment ⇒ Options... ⇒ Environment ⇒ Files ⇒ Max recent files를 통해 변경할 수 있다.


완성된 프로젝트를 다른 이름으로 저장해야 하는 경우 (예: 다른 프로그래머에게 배포용) 파일마다 따로 처리하기보다는 Project ⇒ Publish Project... 를 이용하는 편이 수월하다.

그림 3.2: 디렉터리 제거 대화창


프로젝트를 작업하면서 사용자는 많은 불필요한 파일들을 저장하게 될 것이다 (예: 백업 카피). 델파이 프로젝트를 라자루스로 변환하면 오래된 델파이 파일이 더 이상 필요하지 않음에도 불구하고 디렉터리에 남아 있다. 그러한 파일들은 File ⇒ Clean directory... 옵션을 이용해 제거할 수 있다. 최종 대화창의 Directory 필드에서 제거하고자 하는 디렉터리를 선택한다. 프로젝트가 열려 있다면 해당 디렉터리가 기본적으로 표시될 것이다. 하위 디렉터리를 정리하고 싶다면 해당 확인상자를 클릭한다.


제거할 (정리할) 파일을 선택하기 위해서는 Remove files matching filter 콤보 상자를 이용해 필터를 설정하라. 제공되는 필터 중 하나를 선택하거나 사용자의 기본 필터를 입력한다.


삭제되지 않은 파일들은 Keep files matching filter 필드로 들어간다. 이러한 파일들은 Remove file matching filter 필터에 포함시켜도 여전히 남는다. 이 두 필터가 중복된 엔트리를 가진 경우 혼동될지도 모른다! 첫 1000 바이트에 특수 문자가 포함되면 파일은 '텍스트' 파일로 확인된다.


File ⇒ Print 옵션은 라자루스 패키지 printers4lazide가 설치되었을 때만 표시된다. 설치되지 않았다면 Package ⇒ Install Uninstall packages... 를 이용해 설치할 수 있다.


에디터에서 텍스트를 선택하여 Print 옵션을 이용하는 경우 변경된 설정은 사용자가 다음에 라자루스를 시작할 때 적용된다. 따라서 File ⇒ Restart 옵션을 이용하는 편이 더 빠르다.


편집 메뉴

그림 3:3 편집 메뉴


Edit 메뉴는 클립보드의 사용과 소스 코드의 조작에 예상되는 명령을 포함한다. 편집 도중에 버튼 또는 키를 잘못 눌렀거나 옵션에서 원하는 효과가 나타나지 않은 경우 Undo 버튼을 ([Ctrl] + [Z]) 눌러 실행을 취소할 수 있다.


실행을 취소하면 에디터는 사용자가 실수하기 전 상황으로 복구시킨다. 실수로 실행 취소를 너무 많이 실행할 경우 Redo 는 Undo의 효과를 취소할 수 있다.


Edit 메뉴는 소스 코드를 포맷팅(formatting)하는 데 사용하는 다수의 명령을 포함한다. 하지만 소스 코드의 포맷팅에 관해 보편적으로 수용되는 규칙은 없다.


Pascal의 구문 규칙을 따르는 한 (예: 각 문장 끝에 세미콜론을 붙임) 컴파일러는 사용자의 소스 코드의 포맷에 대해 불평하지 않을 것이다.


하지만 프로시저를 두 칸(two characters)씩 들여 쓰는(indenting) 규칙 등 특정 규칙들을 따름으로써 자신의 코드 가독성을 향상시킬 수 있다.

그림 3.4: 편집 메뉴에서 이용 가능한 텍스트 선택 옵션


포맷팅 명령은 텍스트 중 일부가 (또는 전체가) 선택되었다고 가정한다. 텍스트는 수동으로 선택하거나 Edit ⇒ Select 메뉴를 통해 선택할 수 있다. Indent selection 옵션은 선택한 텍스트를 우측으로 이동시키고, Unindent selection은 선택한 텍스트를 특정 문자 수 만큼 좌측으로 이동시킨다.


몇 자를 들여 쓸 것인지는 Environment ⇒ Options... ⇒ Editor ⇒ General ⇒ Indent and Tabs ⇒ Block indent 를 이용해 변경할 수 있다.


기본 값은 두 칸이다.


Edit ⇒ Enclose selection... 메뉴는 선택한 텍스트 주변에 추가하고자 하는 인클로징(enclosing) 구조를 선택할 수 있는 대화창이 나타난다. 여기서 루프 (예: while...do) 또는 시퀀스를 (예: begin...end) 선택할 수 있다.

그림 3.5: 선택한 텍스트의 인클로징을 위한 대화창, Edit ⇒ Enclose selection...을 통해 접근


Edit ⇒ Comment selection은 행이 시작되는 지점에 두 개의 슬래시(//)를 추가하여 선택한 텍스트를 주석문(comment)으로 만든다. 주석문을 다시 코드로 변경하려면 모든 // 주석문 표시를 제거하는 Edit ⇒ Uncomment selection을 통해 실행할 수 있다. 일시적으로 코드 섹션을 코멘트 아웃(comment out)하는 것은 코드의 일부분에 문제가 있을 때 유용하다. 해당 부분을 제외한 나머지 코드 부분을 검사하므로 의심이 가는 코드를 삭제하고 재입력하는 수고를 덜어 준다.


Edit ⇒ Toggle comment 는 주석 처리되지 않은 행을 주석 처리하거나 이미 주석 처리된 행은 주석 해제를 하여 현재 주석문 상태를 되돌린다. 해당 기능으로 빠른 접근을 가능하게 하려면 Environment ⇒ Options... ⇒ Editor, Key mapping 에서 단축키를 할당하면 된다.

그림 3.6: 정렬 선택 대화창


Edit ⇒ Sort selection은 선택한 에디터 텍스트를 여러 방식으로 정렬하도록 해준다. Pascal은 소스 코드 내 키워드의 순서와 관련해 특정 규칙을 따르기 때문에 (begin이 먼저 오고 뒤에 end가 붙는다) 프로시저 내에서 코드를 알파벳순으로 정렬하는 것은 의미가 없다.


하지만 값의 리스트를 정렬하는 것은 매우 유용하다. 대화창의 미리보기 창에서는 선택한 정렬 옵션을 선택된 텍스트에 적용시켰을 때 결과를 보여준다. Direction 옵션은 Ascending 또는 Descending으로 정렬하도록 해준다. Ascending은 오름차순, 즉 a, b, c 순이며, Descending은 내림차선, c, b, a 순으로 정렬한다.


Domain 옵션은 정렬을 실행할 수준을 설정하는 데 사용한다:

Lines는 각 행의 첫 문자를 정렬하는데, 다음과 같다:

1.  procedure Button1Click(Sender: TObject);
2.  procedure FormCreate(Sender: TObject);
3.  procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
4.  procedure FormPaint(Sender: TObject);
5.  procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6.  procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7.  procedure FormDestroy(Sender: TObject);


위는 다음과 같이 바뀐다:

1.  procedure Button1Click(Sender: TObject);
2.  procedure FormCreate(Sender: TObject);
7.  procedure FormDestroy(Sender: TObject);
6.  procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3.  procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5.  procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4.  procedure FormPaint(Sender: TObject);


단어가 사전처럼 정렬되며 아래 uses 절이

관련자료1


아래와 같이 바뀐다.

관련자료2


Paragraph를 이용하면 선택한 텍스트를 단락(paragraph)으로 나눈 후 정렬한다. Paragraph는 들여쓰기가 적게 된 텍스트로 시작된다. 앞의 예제를 다시 들자면,

1.  procedure Button1Click(Sender: TObject);
2.  procedure FormCreate(Sender: TObject);
3.  procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
4.  procedure FormPaint(Sender: TObject);
5.  procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6.  procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7.  procedure FormDestroy(Sender: TObject);


위의것이 아래와 같이 바뀐다.

1.  procedure Button1Click(Sender: TObject);
2.  procedure FormCreate(Sender: TObject);
7.  procedure FormDestroy(Sender: TObject);
6.  procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3.  procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5.  procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4.  procedure FormPaint(Sender: TObject);


Case Sensitive 옵션을 설정 시 정렬하기는 소문자와 대문자의 차이를 고려한다. Ignore Space 옵션으로 설정 시 여러 개의 빈 칸(space)을 하나의 빈 칸으로 취급한다.


다음 메뉴 옵션인 Edit ⇒ Uppercase selection 은 선택된 텍스트 내 모든 문자를 대문자로 변환하고, Edit ⇒ Lowercase selection 은 문자를 모두 소문자로 변환한다.


식별자 이름과 키워드의 일관된 대·소문자 표기법(casing)은 코드의 명료성을 증가시키고 식별자를 쉽게 검색할 수 있도록 해준다. 소스 코드를 쓰는 동안 포맷하지 않는 경우 추후에 포맷할 수 있다.


Edit ⇒ Tabs to spaces in selection 은 Environment ⇒ Options... ⇒ Editor ⇒ General ⇒ Indent and Tabs ⇒ Tab widths 로부터 설정을 이용해 탭(tab)을 공백(space)으로 변환한다. 공백의 수는 정해져있지 않지만 tabulator의 남은 공간을 채울 필요가 있다. 선택한 텍스트에서 한 행의 문자가 80자를 초과하는 경우 Edit ⇒ Break lines in selection 옵션을 이용해 워드랩(word-wrap)할 수 있으며, 다음 행부터 시작된다. 워드랩이 실행되기 전에 행의 최대 길이는 Environment ⇒ Options... ⇒ Editor ⇒ Display ⇒ Right margin 에 설정된 값이다. 기본 값인 80을 원하는 값으로 수정할 수 있다. IDE는 클립보드의 내용 삽입뿐 아니라 다른 요소들도 삽입도 허용한다. Edit ⇒ Insert from Character Map 은 표준 키보드 키로 입력할 수 없는 특수 문자의 입력을 가능하게 한다. 문자 맵(Character map)은 두 페이지로 나뉘는데, 하나는 ANSI 문자이고 하나는 유니코드용으로, 원하는 문자로 빠르게 접근할 수 있도록 해준다. 문자를 한 번 클릭하면 코드 내에서 커서 앞에 문자가 삽입된다.


Edit ⇒ Insert text를 사용 시 제공하는 하위메뉴, CVS keyword, General, Insert ToDo를 통해 사전에 정해진 단어나 문구(phrase)를 (보일러 플레이트 텍스트) 삽입할 수 있다. CVS keyword는 버전 제어 시스템에 구체적인 제어 단어를 삽입 시 사용된다. 하위메뉴에 열거된 각 제어 단어의 의미는 버전 제어 시스템의 문서를 참고한다.


General 하위메뉴는 유닛에 포함시키고자 하는 다양한 문서 요소들과 텍스트 GUID를 생성 및 삽입시키는 기능을 제공한다. Insert ToDo 는 사용자가 ToDo note의 상세 내용을 입력할 수 있는 대화창을 보여주는데, 이는 이후에 에디터의 현재 커서 위치에 삽입되는 ToDo comment로 포맷된다. 사용자는 View ⇒ ToDo list 를 통해 사용자의 모든 ToDo notes를 검토할 수 있다.

소스 코드가 너무 길거나 너무 복잡해지면 코드의 섹션을 구분된 프로시저로 구성해야 한다. 여기에 Edit ⇒ Extract procedure... 를 이용할 수 있다. 아래와 같은 예제에서,

procedure DoSomething;
begin
  CallSomething;
end;


CallSomething; (;도 포함) 행을 선택하고 Extract 프로시저 옵션을 선택하면 그림 3.8에 나타나는 대화창이 표시된다.

그림 3.7: 문자 맵에서 이용 가능한 문자, Edit ⇒ Insert from Character Map을 통해 접근
그림 3.8: Edit ⇒ Extract procedures… 대화창


Procedure 라디오 버튼을 선택하고 Name of new procedure에 NewProc을 입력하면 코드는 다음으로 변경된다:

procedure NewProc;
begin
  CallSomething;
end;

procedure DoSomething;
begin
  NewProc;
end;


선택한 코드에서 새로운 프로시저가 생성되고, 본래 코드는 새로운 프로시저로의 호출로 대체된다. Extract procedure... 은 사용된 변수는 무엇이든 살펴본 후 자동으로 파라미터 리스트와 로컬 변수를 생성한다. 예를 들어, Form1에 대한 해당 메소드를 고려해보자:

procedure TForm1.DoSomething(var Ernie, Bert);
  var
  i: Integer; // comment
begin
  Ernie := Ernie + Bert;
  for i:= Ernie to 5 do begin
  end;
end;


for 루프(loop)를 선택하고 새로운 프로시저 NewProc를 생성한다. 변수 i는 선택된 코드에서만 발견되기 때문에 새로운 프로시저로 이동한다. Ernie는 선택된 코드 외부에서 사용되므로 파라미터가 된다.

procedure NewProc(const Ernie: Integer);
  var
  i: Integer; // comment
begin
  for i:= Ernie to 5 do begin
  end;
end;

procedure TForm1.DoSomething(var Ernie, Bert: Integer);
begin
  Ernie := Ernie + Bert;
  NewProc(Ernie);
end;


변수 i 뿐만 아니라 주석문 또한 새로운 프로시저로 이동된다. Pascal은 매우 광범위한 언어이므로 Extract procedure가 가능한 파스칼 구조를 모두 다 지원하지는 않음을 발견할 것이다.

그림 3.9: 검색 메뉴


검색하기

객체 지향 프로그래밍은 전체적 디자인이 더 많은 객체를 모듈화할수록 복잡성이 증가한다는 단점이 있다. 따라서 사용자가 소스 코드의 키 비트(key bit)를 빠르게 위치시킬 수 있는 강력한 검색 기능의 이용성이 매우 중요해진다. 라자루스의 오픈 소스 특성에서 장점 중 하나는 사용자의 코드뿐만 아니라 소스 코드를 검색할 수 있다는 점이다. 사용자는 정확한 스펠링이 알려지지 않은 부분 기억된(half-remembered) 식별자를 검색할 일이 생길 것이다. 라자루스는 개발자가 검색 필드에 사용할 수 있는 정규 표현식으로 된 집합을 제공함으로써 수많은 가능한 스펠링 중에 하나가 들어맞길 기다릴 필요성을 없앤다.