Kori 11월 16일, 2020에 포스트됨 공유하기 11월 16일, 2020에 포스트됨 << DelphiCon 2020 목록으로 이동 DelphiCon 의 2020 시리즈 중, Code Faster in Delphi - Alister Christie 의 한글 요약본입니다. 델파이 코딩 속도를 높여주는 신간 ‘Code Faster in Delphi’ 에 수록된 유용한 팁 중 몇가지를 데모와 함께 알려줍니다. 발표자 (Alister Christie)는 델파이를 배우려는 개발자에게 도움이 되는 LearnDelphi.tv를 운영하고 있습니다. 원본 비디오 시청을 권합니다. Alister의 비디오는 학습하기 좋게 편집되어서 제공됩니다. 이 글의 유용한 단축키가 손에 익고 나면, 더 많은 것도 활용해 보세요: 델파이와 RAD 스튜디오에서 활용할 수 있는 더 많은 단축키가 정리된 파일 다운로드 목차 코드 에디터 단축키 폼 디자이너에서 빠르게 작업하기 최신 RTL의 새 언어 기능을 이용하여, 오래된 코드를 현대화하기 정규식을 활용하여 웹페이지에 있는 모든 이미지의 url을 뽑아서 델파이로 가져오기 코드 에디터 단축키 (비디오 보기) 아래 단축키 중 혹시 사용하고 있지 않는 것이 있는 지 보고 이제부터라도 사용해보자. F12 (폼 디자이너와 코드 에디터 전환): 매주 자주하는 작업이다. 즉, 단축키를 쓰면 하루에도 엄청난 시간이 절약된다. Ctrl+Space와 방향키 (키워드를 빠르고 정확하게 입력하기): 키워드 앞글자 몇 자만 타이핑하고 Ctrl+Space를 사용하면 해당 키워드 목록이 표시된다. 이때, 방향키를 이용하여 원하는 키워드를 선택하면 자동 완성된다. Ctrl+왼쪽 방향키 (현재 줄에서 코드의 가장 앞쪽으로 커서를 이동) Ctrl+Shift+v (지역 변수 선언): 일단 변수명 부터 타이핑한다. 그리고 나서 Ctrl+Shift+v를 사용하면, 변수 선언을 바로 할 수 있다. Ctrl+y (현재 코드 줄을 한번에 삭제): 커서가 있는 곳의 코드 한 줄이 삭제된다. Ctrl+j (for 루프 코드를 빠르게 작성): 일단 for를 타이핑한다. 그리고 나서 Ctrl+j를 사용한다. Ctrl+Shift+c (구현부 코드 골격 자동 생성): 프로시저, 함수, 프로퍼티를 새로 만들 때는, 일단 선언부를 작성하고, Ctrl+Shift+c를 사용하면, 구현부 코드 골격이 자동 생성된다. 프로퍼티의 경우 선언된 Field와 Setter도 자동 생성된다. Ctrl+Shift+Alt+p (매개변수 동기화): 프로시저, 함수, 프로퍼티에서 매개 변수를 선언부( 또는 구현부에서) 변경하고, 그 자리에서 Ctrl+Shift+Alt+p를 사용하면 대응되는 구현부 (또는 선언부)의 매개 변수에도 똑 같이 반영되어 일치하게 된다. Ctrl+Shift+위/아래 방향키 (프로시저나 함수의 구현부와 선언부를 왔다갔다 하기) Ctrl+프로시저(또는 함수) 이름 클릭 (해당 프로시저나 함수의 내용으로 이동) Alt+좌/우 방향키 (뒤로 가기와 앞으로 가기: 이전 작업 위치로 가기 또는 다시 원래 위치로 되돌아 오기) Ctrl+Shif+1˜9 (코드에 북마크를 달기): 커서가 있는 줄에 해당 숫자가 지정된 북마크가 생긴다. 원하는 북마크로 이동하려면, Ctrl+1˜9를 사용한다. 참고: 겟잇 패키지 매니저에서 "bookmark"를 타이핑하고 검색하면, 보다 향상된 북마크를 설치할 수도 있다. 화면에서 코드를 한줄이라도 더 볼 수 있다: 단축키에 익숙해지면 툴바에서 해당 단축 아이콘 빼자. 툴바가 차지하는 영역을 줄일 수 있다. 예를 들어, 뒤로 가기와 앞으로 가기 아이콘을 드래그하여 툴바 바깥으로 꺼내면 툴바에서 없어진다 자주 쓰는 단축 아이콘으로 툴바를 구성하려면, 툴바에서 오른쪽 클릭 > Customize Ctrl+Shift+좌/우 방향키(코드 블록 지정) 후 시작하는 괄호 (선택된 곳의 앞뒤를 괄호로 감싸기): 대/중/소 괄호 모두 적용된다. 참고: 블록 선택 팁: And/Or 로 연결된 곳에서 Ctrl+w를 사용하면 선택되는 코드 블록이 한단위씩 늘어난다. Ctrl+/ (주석 처리): 해당 줄 앞에 //가 추가되어 주석으로 처리된다. (이미 //가 있는 주석에서 사용하면, //가 제거되어, 일반 코드가 된다) 여러 줄을 한번에 주석으로 바꾸려면, 해당 줄을 모두 선택한 상태에서 { 를 사용하여 감싸도 된다. 하지만, 각 줄 앞에 // 두는 주석 처리 방식이 더 일반적이다 Ctrl+q+b (선택 영역의 가장 앞으로 커서 이동) 후 Shift+위방향키 (앞에 있는 코드도 선택 영역에 넣기) Ctrl+q+k (선택 영역의 가장 뒤로 커서 이동) 후 Shift+아래 방향키 (뒤에 있는 코드도 선택 영역에 넣기) Shift+위/아래 방향키 (각 줄의 처음부터 끝까지를 모두 선택) Shift+Alt+위/아래 방향키 (각 줄에서 한칸만 선택): 예를 들어 모든 줄에서 한자씩 왼쪽으로 당기고 싶으며, 이 방법으로 선택하고 Delete키를 누른다 Ctrl+o+k (시작점에서 커서까지 사각형으로 코드 영역을 선택하기와 해당 줄 전체 선택하기를 선택하는 토글): 사각형으로 선택하기로 설정된 경에서는 Shift+위/아래/좌/우 방향키를 사용하여 코드의 일부 영역을 사각형으로 선택할 수 있다. 여러줄을 선택하고 Tab 또는 Shift+Tab (여러줄을 한번에 들여쓰기 또는 내어쓰기) Ctrl+Shift+I (또는 U)도 같은 기능 Ctrl+D (uses 절에 나열된 모든 유닛들을 한줄에 하나씩 배치) 주의! 이 단축키를 사용하려면, 먼저 Tools > Options > Language > Formatter > Delphi > Line Breaks 에서 Line Breaks in Uses clauses를 Yes로 설정해야 한다. 만약, Uses 절의 모든 유닛이 아니라, 일부 유닛 만 한 줄에 하나씩 배치하려면, 원하는 코드 영역을 선택한 후에 Ctrl+D를 사용한다. 폼 디자이너에서 빠르게 작업하기 (비디오 12분 15초부터 보기) TMemo를 폼에 추가할 때 바로 크기를 설정하기 툴 팔레트에서 TMemo를 클릭한다. 그리고 나서, 폼 위에서 TMemo가 위치할 왼쪽 위 지점에서 마우스 왼쪽 버튼을 누르고 그 상태에서 드래그하여 원하는 크기가 될 때까지 끌고 간 후에 마우스 버튼을 놓는다. TEdit 여러개를 폼에 한번에 추가하기 툴 팔레트에서 Shift+원하는 컴포넌트(TEdit)를 클릭하여 툴 팔레트에서 TEdit가 강조 표시되도록 한다. 그리고 나서, 폼 위에 원하는 갯수 만큼 마우스 왼쪽 버튼을 클릭한다. (툴 팔레트에 강조 표시된 컴포넌트를 풀려면, ESC를 클릭하거나 툴 팔레트에서 다른 컴포넌트를 선택한다.) 툴 팔레트 검색창에서 원하는 컨트롤을 타이핑하고 엔터키를 쳐서 바로 폼 위에 추가하기 툴 팔레트에서 Ctrl+Alt+p 설정을 한다 (툴 팔레트 > 오른쪽 클릭 > Properties > Persistent Search Filter 옵션을 활성화 하는 것과 같은 효과) TEdit를 폼 위에 추가하면, 해당 오브젝트 명이 Text 프로퍼티에 자동으로 들어간다. 이것을 지우기 해당 TEdit에서 오른쪽 클릭 > Clear Text (오브젝트 인스펙터에서 Text 프로퍼티를 찾아서 지우는 것과 같은 효과) 컨트롤의 Name, Text, Align 등을 변경하기 해당 컨트롤에서 오른쪽 클릭 > Quick Edit 뒤쪽에 가려져서 마우스로 선택하기 힘든 컨트롤의 위치/크기를 변경하기 스트럭처 창을 이용하여 해당 컨트롤을 선택 Ctrl+방향키 (위치 변경) 또는 Shift+방향키 (크기 변경) 팁! 덮고 있는 컨트롤에서 마우스 왼쪽 버튼을 누른 상태에서 ESC키를 사용한다 (그러면, 아래에 가려진 컨트롤이 선택된다). 그 상태에서 마우스를 드래그하여 뒤에 있는 컨트롤을 이동할 수 있다. 컨트롤 여러개의 위치를 한번에 정렬하기 스트럭처 창 또는 폼 에서 Shift+클릭으로 여러 컨트롤을 동시 선택하고 나서, 기준이 될 컨트롤을 마지막으로 한번 더 클릭한다 (기준 컨트롤만 모서리가 검게 표시되고, 나머지는 모소리가 회색이다). 그 상태에서, 오른쪽 클릭 > Position > Align에서 원하는 정렬을 선택한다. 컨트롤을 움직이지 않고 정렬션을 보기 컨트롤을 마우스 왼쪽 버튼으로 누른 채로 잠깐 기다린다. (또는 Shift키를 누른다) 참고로, VCL 폼 디자이너의 정렬선은,파랑색이 컨트롤 테두리 기준선이고, 핑크색은 컨트롤 안의 텍스트 기준선이다. 컨트롤을 다른 컨트롤 안에 넣기 스트럭처 창에서 컨트롤을 드래그하여 컨테이너가 될 컨트롤 안에 끌어 넣는다. 또는, 폼 위에서 컨트롤을 Ctrl+x하고 컨테이너가 될 컨트롤을 마우스로 선택한 후 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의 새 언어 기능을 이용하여, 오래된 코드를 현대화하기 (비디오 20분 27초부터 보기) 오래전 부터 사용하던 아래의 코드를 보다 간결 명확한 현대식 코드로 바꿔보자. // 기존에 있던 코드 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; 1단계: (TDirectory, TPath 등) System.IOUtils 유닛 을 사용하자. 보다 읽기 쉬운 코드가 된다 // [변경 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; 2단계: 인라인 변수를 사용하자. 현대식 문법이며, 읽기도 쉽고, 실행 효율성도 더 높다. // [변경 2단계] 인라인 변수를 사용 // 개선된 점1: 코드가 더 간결해졌다 // 개선된 점2: 인라인 변수는 해당 영역에서만 유효하다. // (코드에서 변수의 범위는 작을수록 더 좋다. 아래의 새 코드에서는 FileName 변수가 for 루프 안에서만 유효하므로, 바깥에서 사용하면 컴파일러 오류 발생) 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; 3단계: 타입 레퍼런스 기능(10.3버전에 추가됨)을 사용하자. 컴파일러가 이해할 수 있는 타입이라면, 이제 굳이 적지 않아도 된다. // [변경 3단계] 인라인 변수 선언 시 타입 지정 생략 // 개선된 점: 코드가 더 간결해졌다 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; 정규식을 활용하여 웹페이지에 있는 모든 이미지의 url을 뽑아서 델파이로 가져오기 (비디오 24분 30초부터 보기) 웹페이지에서 jpg 이미지 100개를 가져오는 작업을 해야하는 상황이라면? 각 이미지 경로를 웹브라우저에서 일일이 찾아서 메모장에 붙이는 수작업을 하지 말자. 아래와 같이 짧은 코드를 만들어서 TListBox에 표시하면, 훨씬 빠르고 정확히 가져올 수 있고, 다음에 또 쓸 수도 있다. // 아래의 버튼 클릭 이벤트 코드 // 단, 이 코드가 작동하려면, 먼저 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; << DelphiCon 2020 목록으로 이동 View full 엠바카데로 기술자료 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.