배열 파라미터

배열 파라미터를 가진 루틴을 선언할 때는 파라미터 선언에 인덱스 타입 지정자 를 포함할
수 없습니다. 즉, 다음 선언은,

1.png

컴파일 에러를 일으킵니다. 그러나,

2.png

이 선언은 유효합니다. 또다른 방법은 개방형 배열 파라미터(open array parameter)를 사
용하는 것입니다.
델파이 언어는 동적 배열에 대해 값 의미 구조를 구현하지 않으므로, 동적 배열의 경우 값
파라미터라고 해도 동적 배열의 내용을 완전하게 복사하지 않습니다. 다음의 예제에서,

3.png

Value가 값 파라미터임에도 불구하고, 루틴 P의 Value[0]에 대한 대입은 루틴을 호출한 측
의 동적 배열의 내용을 수정한다는 것을 주목하십시오. 동적 배열을 완전히 복사할 필요가
있다면, 동적 배열의 값을 복사하기 위해 Copy 표준 프로시저를 사용하면 됩니다.


■ 개방형 배열 파라미터

개방형 배열 파라미터(open array parameter)를 사용하면 크기가 다른 배열들을 프로시
저나 함수로 전달할 수 있습니다. 개방형 배열 파라미터를 가진 루틴을 정의하려면, 파라미
터 선언에서 array[X..Y] of type이 대신 array of type을 사용하십시오. 예를 들면,

4.png

위 코드는 크기에 상관없는 문자 배열을 전달받아 정수를 리턴하는 Find라는 함수를 선언
합니다.
개방형 배열 파라미터의 문법은 동적 배열 타입의 문법과 유사하지만 동일한 의미를 가지는 것
은 아닙니다. 위의 예제에서는 동적 배열을 포함하여 모든 문자 배열을 전달받을 수 있는 함수
를 만듭니다. 동적 배열만을 지정하는 파라미터를 선언하려면 타입 식별자를 지정해야 합니다.

5.png

동적 배열에 대한 자세한 내용은 4장의“동적 배열”을 참조하십시오.
루틴의 바디 안에서 개방형 배열 파라미터에는 다음 규칙이 적용됩니다.

 - 개방형 배열 파라미터의 인덱스는 항상 0에서 시작합니다. 첫 번째 요소는 0이고 두 번째 요소
는 1, 이런 식입니다. 표준 Low 및 High 함수는 각각 0과 길이-1을 리턴합니다. SizeOf 함수
는 루틴으로 전달한 실제 배열 크기를 리턴합니다.

 - 개방형 배열 파라미터는 요소에 대해서만 액세스할 수 있습니다. 전체 개방형 배열 파라미터에
대한 대입은 허용되지 않습니다.

 - 다른 프로시저나 함수로 전달할 때는 개방형 배열 파라미터 혹은 타입을 지정하지 않은 var 파
라미터로만 전달할 수 있습니다. SetLength의 파라미터로는 전달할 수 없습니다.

 - 배열 대신에 개방형 배열 파라미터의 기반(base) 타입 변수를 전달할 수 있습니다. 이런 경우
길이 1의 배열로 간주되게 됩니다.


배열을 개방형 배열 값 파라미터로 전달하면 컴파일러는 루틴의 스택 프레임에 배열의 로컬
복사본을 만듭니다. 아주 큰 배열을 전달할 경우 스택이 오버플로우(overflow)될 수도 있으
므로 주의하십시오.
다음 예에서는 실수 배열에 있는 각 요소에 0을 대입하는 Clear 프로시저와 실수 배열에 있
는 요소의 합을 계산하는 Sum 함수를 정의하기 위해 개방형 배열 파라미터를 사용합니다.

6.png

7.png

개방형 배열 파라미터를 사용하는 루틴을 호출할 때 개방형 배열 생성자를 전달할 수 있습
니다.“ 개방형배열생성자”를참조하십시오.


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15469
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13974
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16505
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22062
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23275
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39266
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174729
1263 이 달의 기술자료 - 2020년 09월 file 험프리 2020.08.27 260
1262 델파이/C++빌더에 TTcpClient, TTcpServer, TUdpSocket 등록하기 [1] file 험프리 2020.08.26 629
1261 [고객 사례- 델파이, 예술, 창작] 아트젠, 컴퓨터로 완성하는 미술 작품 관리자 2020.08.25 395
1260 2020 년 8 월 GM 업데이트 관리자 2020.08.24 485
1259 C++17 알고리즘 라이브러리 병렬 정렬 사용하기 관리자 2020.08.13 405
1258 [고객 사례- 의료, C++빌더, 모바일, IoT] 브루너 컨설팅, 손목 웨어러블 헬스케어 기기 관리자 2020.08.11 401
1257 [고객 사례- POS, 주문, C++빌더, 멀티플랫폼] BCPOS - 클라우드를 연동한 다양한 간편 결제 지원 POS 관리자 2020.08.04 756
1256 이 달의 기술자료 - 2020년 08월 험프리 2020.07.30 363
1255 [10.4 시드니][패치] RAD스튜디오 10.4 '세 번째 패치(Patch 3)': VCL그리드, C++Win64 디버깅, C++ 안드로이드 예외처리 핸들링 및 리소스 등 관리자 2020.07.29 686
1254 [생산성] RAD 스튜디오, 델파이, C++빌더 단축키 표 관리자 2020.07.28 414
1253 [발표자료] VCL 애플리케이션 확장하기 with RAD 서버 관리자 2020.07.22 389
1252 [발표자료] 20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio 관리자 2020.07.22 263
1251 [무료 툴] 델파이 JSON 데이터 자동 연동 프로그램 file 관리자 2020.07.20 807
1250 델파이 개발자 관점에서 본 C++ 빌더 file 김원경 2020.07.20 1193
1249 [10.4 시드니][패치] RAD스튜디오 10.4 '두 번째 패치(Patch 2)'를 다운로드 받으세요! 관리자 2020.07.20 917
1248 안드로이드 SDK 수동 설치 방법 file 김원경 2020.07.15 4140
1247 OAuth 2.0 연동 - 네이버 API 연동(네이버 아이디로 로그인) 험프리 2020.07.15 1196
1246 RAD Studio의 생산성 툴링 : 탐색기 김원경 2020.07.09 355
1245 RAD Studio의 생산성 툴링 : 북마크 김원경 2020.07.09 358
1244 iOS 앱스토어 1024x1024 아이콘 문제에 대한 해결 방법 김원경 2020.07.08 478