Kori 9월 5일, 2022에 포스트됨 공유하기 9월 5일, 2022에 포스트됨 Darren Kosinski V1400의 "Code Navigation In The RAD Studio Code Editor" 를 번역했습니다. (원문 작성: 2009년 9월, 최종 번역: 2022년 9월) (역자 주: 이 글은 RAD 스튜디오의 일반적인 코드 이동 매커니즘을 잘 설명합니다. 이 글과 별개로 엠바카데로에서 제공하는 무료 플러그인인 "북마크스(Bookmarks)"와 "내비게이터(Navigator)"를 추가하면 코드 찾기와 이동이 더욱 좋아집니다. RAD 스튜디오 2010을 필드 테스트하던 중에, RAD 스튜디오 IDE가 소스 코드를 이동하는 기능에 대해 몇몇 필드 테스터들과 논의했다. 특히, 그들은 왜 코드 이동(code navigation)이 어떤 방식에서는 실패하고 다른 방식에서는 여전히 잘 작동하는 지를 궁금해했다. 이 주제는 다른 사람들도 관심이 있겠다 싶어, 이 글을 남긴다. RAD 스튜디오 IDE의 코드 에디터 안에서 코드를 이동하는 일반적인 방식 4가지는 아래와 같다. 코드 찾아가기 (Code Browsing): Ctrl+클릭 또는 "선언으로 가기(Go To Declaration)" 라고도 한다 interface 영역과 implementation 영역을 넘나들기 (Toggling) 커서가 있는 곳에서 파일 열기 (Open File At Cursor) 도움 인사이트의 이동 링크 (Help Insight navigation links) 사용하기 이 방법 각각은 뒤에서 완전히 다른 매커니즘이 작동한다. 그리고 어떤 방법들은 다른 방법들에 비해 불완전하거나 깨진 코드에서도 더 잘 작동한다. 목차 1 코드 찾아가기 (Code Browsing) / 선언으로 가기(Go To Declaration) : Ctrl+클릭 2 선언(Declaration)과 정의(Definition)를 넘나들기(Toggle) : Ctrl+Shift+위/아래 3 커서가 있는 곳에서 파일 열기 : Ctrl+엔터 4 도움 인사이트 링크 1 코드 찾아가기 (Code Browsing) / 선언으로 가기(Go To Declaration) : Ctrl+클릭 Ctrl+클릭을 사용하는 코드 찾아가기 (Code Browsing) 이동 방식은 델파이와 C++빌더 모두에서 사용할 수 있다. Ctrl 키를 누른 채 심볼(symbol) 위에 마우스를 올리면 작동한다. 이때 해당 심볼에는 밑줄이 생기고 마치 웹페이지의 링크처럼 클릭할 수 있게 된다. 또는 심볼에서 마우스 오른쪽을 클릭한 후 컨텍스트 메뉴 항목이 나타나면 그 중에서 “Go to declaration”를 선택해도 된다. 이 이동 방식은 컴파일러를 "kibitzing"이라는 특별한 모드인 찾아가기 모드 (browsing mode)에서 작동하시킨다. RAD 스튜디오 IDE는 작동한 컴파일러에게 해당 심볼(symbol)의 선언(declaration)을 찾으라고 요청을 하고, 컴파일러는 그 작업을 착수하는데, 먼저 소스 코드 전체가 아니라 해당 선언(declaration)을 찾기 위해 필요한 소스 코드들 만을 컴파일한다. 그리고 나서, 해당 선언이 들어 있는 파일의 이름과 해당 줄 번호를 찾아서 IDE에게 알려준다. 만약 컴파일러가 해당 선언을 찾지 못하면 찾지 못했다고 알려준다. 이 (특별한) 찾아가기(Browsing) 모드에서는, 컴파일러는 프로젝트를 실제로 빌드 할 때와는 조금 다르게 동작한다. 찾아가기 상태에서는, 컴파일러의 백엔드가 꺼지기 때문에 바이너리 코드가 생성되지 않는다. 또한 컴파일러가 구문 에러(syntax errors)에 대해 더 관대하다. 컴파일러에 있는 에러 복구 매커니즘 몇가지를 사용하여 코드가 불완전하거나 부정확하더라도 코드 분석(parsing)을 계속해 나갈 수 있다. 해당 코드가 "너무" 불완전하거나 부정확해서, 컴파일러가 복구할 수 있는 수준을 넘으면, 코드 찾아가기 (Code Browsing)에 실패할 수 있다. 델파이 프로젝트에서, 찾아가기 모드에서는 컴파일러의 동작이 일반 컴파일 동작과 다른 점은 다음과 같다. 일반 컴파일 시에는, uses 절에 나열된 유닛들을 반영할 때 찾아가기 모두와는 다른 경로를 사용한다. 찾아가기 모드에서는, 컴파일러가 프로그램(.dpr) 파일 또는 패키지(.dpk) 파일을 사용하지 않는다. 그 대신 자신이 컴파일 하려는 그 유닛을 그냥 컴파일하고 uses 절에 있는 유닛을 찾을 때는 그 프로젝트의 검색 경로(Search Path)와 IDE의 전역(global) 탐색 경로(Browsing Path)를 사용한다. 찾아가기 동작을 시작하기 전에, IDE는 프로젝트 매니저(project manager) 안에 들어 있는 모든 유닛의 경로를 탐색 경로(Browsing Path)에 더하여 확장된 탐색 경로를 만들어서 RAD 스튜디오 컴파일러에게 전달한다. 만약 당신이 프로그램 소스 또는 패키지 소스를 직접 손으로 편집하여 유닛을 추가했다면, 그 유닛들은 IDE의 프로젝트 매니저 안에 없기 때문에 컴파일러는 찾아가기(Browsing) 모드에서 그 유닛들을 찾지 못하고 실패한다. 만약 프로그램 또는 프로젝트 소스를 직접 손으로 편집한다면 빌드되는 코드를 담고 있는 모든 디렉토리를 IDE의 전역(global) 탐색 경로(Browsing Path)에 넣어야 그 안에 있는 소스가 빌드 된다는 점을 명심해야 한다. C++빌더인 경우, 델파이와 달리 사용하는 유닛들이 프로그램 또는 패키지 소스 안에는 나열되지 않는다. C++빌더 컴파일러는 찾아가기 모드에서, 소스를 찾을 때 항상 해당 프로젝트의 인클루드 경로 (Include Path) 또는 C++ IDE의 전역(global) 탐색 경로(Browsing Path)를 사용한다. 2 선언(Declaration)과 정의(Definition)를 넘나들기(Toggle) : Ctrl+Shift+위/아래 인터페이스(interface) 선언(declaration)과 구현(implementation) 정의(definition)를 왔다갔다(toggling) 하는 방법은 오직 델파이 프로젝트에서만 지원한다. Ctrl+Shift+위 화살표를 누르면 해당 메소드(mehtod)의 선언(declaration)이 나타나고, Ctrl+Shift+아래 화살표를 누르면, 해당 메소드의 구현(implementation)이 나타난다. 이 방식으로 코드 이동을 하면 컴파일러는 전혀 사용되지 않으며, 순전히 IDE-기반 매커니즘으로만 작동한다. IDE-기반 매커니즘은 코드 구역 접기(folding)와 구조 창(structure pane)에서 사용하는 것과 동일하게, 유닛(unit)별 파서(parser)를 사용한다. 이 파서(parser)는 코드 에러에 더욱 더 관대한데, 그 이유는 오직 구조(structure) 요소 만을 찾을 뿐, 프로시저(procedure)의 내용은 무조건 건너뛰기 때문이다. 파서가 해당 프로시저의 선언과 구현 양쪽의 머리 부분을 찾을 수만 있다면, 이 방식으로 코드 이동이 가능하다. 심지어 아직 컴파일을 하지 않은 코드에서도 작동한다. 3 커서가 있는 곳에서 파일 열기 : Ctrl+엔터 “커서가 있는 곳에서 파일 열기 (Open file at cursor)” 역시 코드 이동을 하는 또다른 매커니즘이며, 델파이와 C++빌더 모두에서 사용할 수 있다. 이 방식은 접근법이 매우 단순하다. IDE는 단순하게 코드 에디터에서 커서가 놓여진 토큰(token)을 본다. 델파이에서는 그 토큰에 확장자가 없으면 토큰 뒤에 ".pas를 붙인 후에, 그 프로젝트의 검색 경로(Search Path) 안에 해당 파일 이름과 일치하는 파일이 있는 지를 찾는다. C++빌더에서는, 코드 에디터에서 커서가 놓여진 토큰을 가지고 인클루드 경로 (Include Path)를 따라가며 그 파일 이름을 찾는다. 델파이와 C++빌더 모두, 일치하는 파일 이름을 IDE가 찾지 못하는 경우, 표준 파일 열기 대화창을 표시한다. 4 도움 인사이트 링크 도움 인사이트 (Help Insight)는 오직 델파이 프로젝트에서만 사용할 수 있다. 코드 에디터 안에서 어느 심볼(symbol)이든 마우스를 위에 올리면, 팝업 창이 나타나는 데, 여기에는 해당 심볼의 선언(declaration)으로 이동하는 바로가기(hotlink)를 포함하여 해당 심볼(symbol)에 대한 추가 정보가 표시된다. 도움 인사이트 (Help Insight)용 정보는 또 다른 IDE-기반 파서(parser)에 의해 생성된다. 에러 인사이트 (Error Insight), 리팩토링(refactoring), 모델링(modeling) 등을 위한 정보도 이 파서가 제공한다. 이 파서는 앞에서 살펴 본 구조(structure) 파서보다 더 완전한 파서이지만, 불완전하거나 부정확한 코드를 만나도 잘 회복할 수 있도록 설계되었다. 이 파서(parser)는 해당 프로젝트 안에 있는 유닛(unit)을 찾을 때에는 소스 코드 전체를 살핀다. 그리고, 프로젝트 매니저(project manager) 안에 들어있지 않지만 사용되고 있는 유닛을 찾을 때에는 컴파일러를 불러서 해당 심볼을 찾도록 요청한다. 이 글이 RAD 스튜디오 IDE 안에서 사용할 수 있는 여러가지 코드 이동이 사용하는 각 매커니즘을 설명하는데 도움이 되었기를 바라며,이를 통해서 어떻게 작동하는 지에 대한 통찰력을 제공했기를 바란다. (역자 주: "북마크스(Bookmarks)"와 "내비게이터(Navigator)"를 사용하면 코드 찾기와 코드 사이를 이동하기가 훨씬 좋아집니다.) 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.