[DelphiCon 요약] 델파이 코드 빠르게 작성하기 (Code Faster in Delphi)
- 2020-12-23
- Posted by: Narae Kim
- Category: 기술자료
- 원본 비디오 시청: https://delphicon.embarcadero.com/talks/code-faster-in-delphi/
- DelphiCon 전체 보기 (현재 무료, 향후 유료 전환 예상): https://delphicon.embarcadero.com/replays/
- 데브기어의 DelphiCon 소개 페이지로 가기: https://devgear.co.kr/archives/3692
델파이 코드 빠르게 작성하기 (Code Faster in Delphi) 를 요약했습니다. (이 요약 번역은 원본 비디오와 내용이 일부 다르거나, Q&A등 일부 생략되었을 수 있습니다.)
델파이 개발 환경 활용 능력을 향상시켜주는 신간 ‘Code Faster in Delphi’ 에 수록된 팁 몇가지를 데모와 함께 알려줍니다.
여러분의 소중한 시간을 절약할 수 있는 것이 있는 지 잠시 살펴보세요. (데브기어에서는 160 페이지 분량의 이 도서를 번역할 지를 검토 중입니다. 번역에 대한 여러분의 의견도 환영합니다)
- 델파이 코드 에디터에서 유용한 단축키 (도서에 10페이지에 걸쳐 소개된 단축키 중 몇가지)
- 폼 디자이너에서 유용한 단축키 (도서에 소개된 단축키 중 몇가지).
- 최신 RTL의 새 언어 기능을 이용하여, 오래된 코드를 현대화하기 예시
- 정규식을 활용하여 웹페이지에 있는 모든 이미지의 url을 가져오기
발표자 (Alister Christie)는 델파이를 배우려는 개발자에게 도움이 되는 LearnDelphi.tv를 운영하고 있습니다.
(역자 주: 더 많은 단축키가 정리된 표 다운로드 받기: https://tech.devgear.co.kr/465366 , 아래 내용 등 더 많은 단축키가 설명된 도서 안내: https://learndelphi.tv/codefaster )
코드 에디터 단축키
F12(폼 디자이너와 코드 에디터 전환)처럼 자주 쓰는 기능에서 단축키를 쓰면 엄청난 시간이 절약된다.
- 키워드를 빠르고 정확하게 입력하려면, 키워드 앞글자만 몇자 적고 Ctrl+Space를 사용하면 해당 키워드 목록이 표시되고, 방향키를 이용하여 원하는 키워드를 선택하면 자동 완성된다.
- 현재 줄에서 코드가 있는 가장 앞쪽으로 커서를 이동하려면, Ctrl+왼쪽 방향키를 사용한다.
- 지역 변수를 추가하려면, 일단 변수명을 쓰고 Ctrl+Shift+V를 사용하여 변수 선언을 바로 할 수 있다.
- 현재 줄을 삭제하려면, 원하는 줄에 커서를 두고 Ctrl+Y를 사용하면, 한 줄이 삭제된다.
- for 루프 코드를 빠르게 만들려면, for를 타이핑하고 Ctrl+J를 사용한다.
- 프로시저, 함수, 프로퍼티를 새로 만들 때는, 선언부에 프로시저나, 프로퍼티를 선언하고, Ctrl+Shift+C를 사용하면, 구현부 기본 코드가 자동 생성된다. 프로퍼티의 경우 선언된 Field와 Setter도 자동 생성된다.
- 프로시저, 함수, 프로퍼티의 매개 변수 등을 변경할 때는, 선언부( 또는 구현부에서) 매개 변수를 변경하고, Ctrl+Shift+Alt+P를 사용하면 이 단축키를 누른 위치의 매개변수가 구현부 (또는 선언부)에 똑 같이 반영되어 일치하게 된다.
- 특정 프로시저나 함수의 구현부와 선언부를 왔다갔다 할 때는, Ctrl+Shift+위/아래 방향키
- 프로시저나 함수의 내용을 보기 위해 이동할 때는, Ctrl+프로시저(또는 함수) 이름 클릭
- 이전 작업 위치로 가거나 다시 되돌아 오려면, Alt+좌/우 방향키
- 코드에 북마크를 달려면, Ctrl+Shif+원하는 숫자(1˜9)를 사용하면 커서가 위치한 줄에 북마크가 생긴다. 원하는 북마크로 바로 이동하려면, Ctrl+원하는 숫자(1˜9)를 사용한다. 겟잇 패키지 매니저에서 bookmark로 검색하여 보다 향상된 북마크를 설치할 수도 있다.
- 한 화면에 보이는 코드를 한줄이라도 더 늘리려면, 가장 윗쪽 툴바의 단축 아이콘 중 사용하는 것만 남기자 (예를 들어 뒤로/앞으로 가기를 Alt+좌/우 방향키를 사용한다면 해당 단축 아이콘을 숨겨도 된다. 아이콘을 드래그하여 툴바 바깥으로 꺼내면 없어진다.)
- 자주 쓰는 단축 아이콘을 꺼내 넣으려면, 단축아이콘이 표시되는 툴바에서 오른쪽 클릭+Customize
- 괄호를 사용한다면, Ctrl+Shift+좌/우 방향키로 괄호가 들어갈 곳을 정하고 시작하는 괄호를 누르면 선택된 곳의 앞뒤에 괄호가 생긴다. 대/중/소 괄호 모두 적용된다. And/Or 로 연결된 곳에서 Ctrl+W를 사용하면 범위가 한단계씩 늘어나면서 선택된다.
- 여러 줄은 한번에 주석처리하려면, 위의 자동 괄호 기능에서 { 를 사용할 수 있다. 하지만, Ctrl+/를 사용하여 각 줄 앞에 모두 //로 주석 처리하는 것이 더 일반적이다. 주석 처리된 상태에서 Ctrl+/를 사용하면 다시 선택된 모든 줄의 //이 제거된다.
- 코드 영역을 선택했는데 앞쪽을 더 선택하고 싶으면, Ctrl+Q+B로 선택 영역의 가장 앞으로 커서를 옮기고 나서 Shift+위방향키로 앞쪽의 코드도 선택 영역에 넣는다. 반대로 반대로 선택 영역의 가장 아래로 커서를 옮기려면,Ctrl+Q+K로 선택 영역의 가장 뒤로 커서를 옮기고 나서 Shift+아래 방향키로 뒤쪽 코드도 선택 영역에 넣는다.
- Shift+위/아래 방향키는 각 줄의 끝까지가 모두 선택된다. 하지만, 각 줄에서 한칸만 선택하려면, Shift+Alt+위/아래 방향키 (예를 들어 모든 줄에서 한자씩만 왼쪽으로 당기고 싶으며, 이 기능을 이용한 후 Delete키를 누르면 된다)
- 시작점에서 커서가 위치한 곳까지 사각형으로 코드 영역을 선택하기와 해당 줄 전체 선택하기를 왔다갔다 하려면, Ctrl+O+K를 사용하면 사각형으로 선택하기에서는 Shift+위/아래/좌/우 방향키를 사용하여 코드의 일부 영역을 사각형으로 선택할 수 있다.
- 여러줄을 한꺼번에 들여쓰거나 내어쓰려면, 여러줄을 선택하고 Tab과 Shift+Tab으로 들여쓰고 내어쓴다. Ctrl+Shift+I/U를 사용할 수도 있다.
- uses 절에 나열된 유닛들을 한줄에 하나씩만 표시하려면, Tools > Options > Language > Formatter > Delphi > Line Breaks 에서 “Line Breaks in Uses clauses”를 Yes로 설정하자. 그리고 나서 코드 에디터에서 Ctrl+D를 사용하면, 해당 유닛의 모든 코드에 설정된 코드 포맷이 적용된다. 해당 유닛 전체 코드가 아니라 Uses 절만 포맷을 적용하려면, 원하는 코드 영역을 선택한 후에 Ctrl+D를 사용하면 선택된 영역에만 코드 포맷이 적용된다.
폼 디자이너 단축키
- 폼 디자이너에 TMemo를 올리면서 바로 크기를 설정하려면, 툴 팔레트에서 TMemo를 클릭하고 나서, 폼 위에서 마우스를 클릭을 하고 누른 상태에서 드래그하면 드래그 된만큼 크기가 설정된 TMemo가 생긴다.
- 폼 디자이너에 TEdit를 여러개 한번에 추가하려면, 툴 팔레트에서 Shift+원하는 컴포넌트(TEdit)클릭 (툴 팔레트의 TEdit가 강조 표시 된다)하고 나서, 원하는 갯수 만큼 폼 위에 클릭한다. 풀려면, ESC를 클릭하거나 툴 팔레트에서 다른 컴포넌트를 선택한다.
- 툴 팔레트 검색창에서 원하는 콘트롤을 타이핑하고 엔터키를 쳐서 바로 폼 위에 추가하려면, 툴 팔레트에서 Ctrl+Alt+P 설정을 한다 (툴 팔레트 > 오른쪽 클릭 > Properties > 에서 > Persistent Search Filter 옵션을 활성화 하는 것과 같은 효과)
- TEdit를 폼 위에 추가한 후 디펄트로 입력됩 텍스트를 제거하려면, TEdit에서 오른쪽 클릭 > Clear Text (오브젝트 인스펙터에서 Text 프로퍼티를 찾아서 지우는 것과 같은 효과)
- 콘트롤의 이름이나 Text, 배치 등을 변경하려면, 해당 콘트롤에서 오른쪽 클릭 > Quick Edit이 상당히 유용하다.
- (마우스로 선택하기 힘든) 뒤쪽에 가려진 콘트롤의 위치를 변경하려면, 스트럭처 창에서 해당 콘트롤을 클릭한 후에 Ctrl+방향키로 위치 변경, Shift+방향키로 크기 변경을 할 수 있다. 하지만, 마우스로 빠르게 위치 변경을 하려면, 덮고 있는 콘트롤을 클릭한 상태에서 ESC키를 누르면, 아래에 가려진 콘트롤이 선택된다. 그 상태에서 마우스를 드래그하여 이동할 수 있다.
- 여러 콘트롤의 위치를 정렬하려면, 스트럭처 창 또는 폼 에서 Shift+클릭으로 여러 콘트롤을 동시 선택하고 나서, 기준이 될 콘트롤을 한번 더 클릭한다 (기준 콘트롤만 모서리가 검게 표시되고, 너머지는 회색으로 표시된다). 그 상태에서, 오른쪽 클릭 > Position > Align에서 원하는 정렬을 선택한다.
- VCL 폼 디자이너의 정렬선은,파랑색이 콘트롤 테두리 기준이고, 핑크색은 콘트롤 안의 텍스트 기준이다. 콘트롤을 움직이지 않고도 정렬션을 보고 싶으면, 콘트롤을 마우스를 누른 채로 좀 기다리거나 Shift키를 누르면 표시된다.
- 콘트롤A를 콘트롤B 안에 넣으려면, 스트럭처 창에서 콘트롤A를 드래그하여 콘트롤B 안에서 드롭한다. 또는 폼 위에서 콘트롤A를 Ctrl+X하고 콘트롤B를 마우스로 선택한 후 Ctrl+V를 한다.
- TSpeedButton을 사용해야하는데 실수로 TButton을 사용했다면, 폼 화면에서 Alt+F12를 사용하여 화면 소스로 이동한다. (폼 디자이너 > 오른쪽 클릭 > View As Text 와 같은 효과) 그리고 해당 콘트롤 이름을 이용하여 해당 코드를 찾아서 TButton을 TSpeedButton으로 변경한다. 경고 창이 나타나서 SpeedButton 은 Tab Order 프로퍼티가 없다고 해도 Ignore 버튼을 클릭한다. 오브젝트 인스펙터에서 TButton이 TSpeedButton으로 변경되었을 것이다. 하지만, 소스 코드에서는 TButton이 그대로 유지된다. 컴파일을 하면 오류 창이 뜨면서 바꿀 것인지를 물을 것이다 이때, Yes를 클릭하면 소스 코드 역시 TSpeedButton으로 변경되고 컴파일이 다시 진행된다.
- 이미 설정해 놓은 콘트롤을 살짝 바꾸어서 추가하고 싶을 때, 폼 디자이너에서 원하는 콘트롤을 선택하고 Ctrl+C 한 후에 메모장에서 Ctrl+V를 하면 해당 콘트롤을 구현하는 코드가 메모장에 복사되어 붙는다. (예를 들어, TButton을 TSpeedButton으로 변경, Caption 프로퍼티의 값 변경 등) 메모장의 코드를 원하는 대로 수정하고, Ctrl+C 한 후, 폼 위에서 Ctrl+V를 하면 해당 콘트롤이 추가된다. Ctrl+V를 3번 하면 콘트롤 3개가 추가된다. 이것은 콘트롤 여러개를 추가할 때도 유용하다.
- 여러 콘트롤에 공통된 프로퍼티를 변경하려면, 폼 디자이너에서 여러 콘트롤을 선택한 후 오브젝트 인스펙터의 검색창에서 원하는 프로퍼티를 입력하면, 입력된 문자에 해당하는 프로퍼티만 창에 표시된다. 원하는 프로퍼티의 값을 수정한다. 나타난 프로퍼티가 여러개인 경우, 원하는 프로퍼티로 가려면, 화살표를 이용
최신 RTL의 새 언어 기능을 이용하여, 오래된 코드를 현대화하기
아래 오래된 코드를 현대식으로 그리고 간결 명료하게 바꿔보자.
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 38 39 40 41 42 43 44 45 46 47 48 49 |
// 원래 코드 procedure TForm1.btnGetFileClick(Sender: Object); var F: TSearchRec; begin if FindFirst(‘c:\temp\*.*’, faAnyFile - faDirectory, F) = 0 then repeat Listbox1.Items.Add(F.Name); until FindNext(F) <> 0; end; 먼저, System.IOUtils 유닛을 사용해 보다 읽기 쉽게 바꿔보자. (TDirectory, TPath 등을 쓸 수 있다) // 변경 1단계: IOUtils 유닛을 사용해 이해하기는 더 쉬운 코드 (하지만, 더 간결하게 바뀌지는 않았다) uses System.IOUtils; procedure TForm1.btnGetFileClick(Sender: Object); var FilesNames: TArray; FilesName: string; begin FileNames: TArray := TDirectory.GetFiles(‘c:\temp’); for FileName in FilesNames do Listbox1.Items.Add(TPath.GetFileName(FileName)); end; |
이제, 인라인 변수를 사용해서 조금 더 현대화 해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// 변경 2단계: 인라인 변수를 사용해 더 간결해진 코드 // 더 좋은 점은 인라인 변수는 해당 영역에서만 유효하다. (변수의 범위는 작을수록 좋다) // 따라서 아래 코드에서 for 루프 바깥에서 FileName 변수를 사용하면 컴파일러가 오류를 표시한다. uses System.IOUtils; procedure TForm1.btnGetFileClick(Sender: Object); begin var FileNames: TArray<string> := TDirectory.GetFiles(‘c:\temp’); for var FileName: string in FilesNames do Listbox1.Items.Add(TPath.GetFileName(FileName)); end; |
이제 10.3버전에 추가된 타입 레퍼런스 기능을 사용해보자. (컴파일러가 이해할 수 있는 타입은 이제 굳이 적지 않아도 된다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//인라인 변수에서 타입을 생략해 더 간결해진 코드 uses System.IOUtils; procedure TForm1.btnGetFileClick(Sender: Object); begin var FileNames := TDirectory.GetFiles(‘c:\temp’); for var FileName in FilesNames do Listbox1.Items.Add(TPath.GetFileName(FileName)); end; |
정규식을 활용하여 웹페이지에 있는 모든 jpg이미지의 url을 가져오기
웹페이지에 jpg 이미지가 100개가 있다면 이것을 일일이 찾아서 메모장에 붙이는 것보다, 이렇게 코드 몇줄만 작성해서 TListBox에 표시하면, 훨씬 빠르고 정확히 가져올 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//NetHTTPRequest와 NetHTTPClient 컴포넌트를 폼 디자이너에 올리고 서로 연결한 후에 아래 사용 uses System.RegularExpressions; procedure TForm1.Button1Click(Sender: Object); begin var Response := NetHTTPClient1.Get(‘….’); // ...에는 웹페이지 주소 (예) https://www.trademe.co.nz/a/marketplace/gaming/nintendo-wii-u var WebText := Response.ContentAsString; var Matches := TRegEx.Matches(WebText, ‘https://[ˆ/\s]+/\S+?\.jpg'); for var Match in Matches do ListBox1.Items.Add(Match.Value); end; |
역자 주:
- RAD스튜디오 IDE 키보드 단축키 가이드: https://devgear.co.kr/archives/4464
- 아래 내용 등 더 많은 단축키가 설명된 도서 안내: https://learndelphi.tv/codefaster
- 원본 비디오 시청: https://delphicon.embarcadero.com/talks/code-faster-in-delphi/
- DelphiCon 전체 보기 (현재 무료, 향후 유료 전환 예상): https://delphicon.embarcadero.com/replays/
- 데브기어의 DelphiCon 소개 페이지로 가기: https://devgear.co.kr/archives/3692
12.0 12.1 AI AWS C++ c++빌더 chatgpt DelphiCon ios rad서버 RAD스튜디오 UI UIUX UX uxsummit vcl 개발 개발사례 고객사례 기술레터 기술백서 데브옵스 데이터 데이터베이스 델파이 리눅스 마이그레이션 맥 머신러닝 모바일 새버전 샘플 세미나 안드로이드 웹 윈도우 인공지능 인터베이스 출시 커뮤니티에디션 코드 클라우드 파이썬 파이어몽키 현대화