생성자 표현식 ① VALUE, CORRESPONDING, CONV, NEW 한 번에 이해하기
3줄 요약
생성자 표현식은
연산자 타입( ... )형태이고, 타입을 문맥에서 알 수 있으면#으로 줄여 써요.VALUE는 구조체와 내부 테이블을 그 자리에서 만들고,CORRESPONDING은 이름이 같은 필드끼리 옮기고,CONV는 타입 변환 결과를 만들어요.인라인 선언
DATA(...)와 같이 쓰면 보조 변수와APPEND,CLEAR문장이 크게 줄어요.
어떤 상황에서 쓰나요
구조체의 필드를 하나씩 채우고 APPEND하는 코드가 길게 이어지나요? 생성자 표현식을 쓰면 값을 만드는 과정을 한 문장으로 표현할 수 있어요. 이번 글에서는 VALUE·CORRESPONDING·CONV·NEW가 각각 어떤 값을 만드는지 알아봐요.
네 표현식은 모두 짧은 코드로 값을 다루지만 목적은 다릅니다. 아래 그림에서 VALUE는 값 구성, CORRESPONDING은 필드 연결, CONV는 타입 변환, NEW는 객체 생성으로 구분해 보세요.
핵심 내용
기본 형태. 생성자 표현식은 VALUE some_type( ... )처럼 연산자와 타입, 괄호 안의 인수로 이뤄져요. 타입이 문맥에서 정해지면 VALUE #( ... )로 써요. 타입을 알 수 없는 자리(예: 인라인 선언)에서는 DATA(struc2) = VALUE struc_type( a = 4 b = 'ddd' ).처럼 타입을 써야 해요. 치트시트는 이 문법이 같은 일을 하는 구문보다 줄 수를 줄이지만, 가독성과 유지보수, 디버깅 용이성을 같이 따져 보라고 당부해요.
VALUE
구조체:
struc = VALUE #( a = 1 b = 'aaa' ).개별 컴포넌트에 대입하던 여러 줄이 한 문장이 돼요.내부 테이블: 줄마다 안쪽 괄호 한 쌍을 써요.
itab = VALUE #( ( a = 5 b = 'eee' ) ( a = 6 b = 'fff' ) ).기본으로 대상은 초기화되고, 기존 줄을 남기려면BASE를 써요(VALUE #( BASE itab ( ... ) )).요소 하나짜리 타입은 컴포넌트 이름 없이
VALUE string_table( (Hello) (world) ).인수를 비워
VALUE #( )로 쓰면 타입의 초기값이에요.FOR로 다른 테이블을 반복하며 줄을 만들 수 있어요(다음 회).중첩 구조체나 깊은 테이블도 그 자리에서 만들 수 있어요.
CORRESPONDING — 이름이 같은 컴포넌트를 옮겨요. 이름이 같지만 타입이 다르면(예: c와 string) 변환 규칙의 영향을 받으니 주의하라고 해요.
BASE: 기존 값을 유지해요(괄호가 필요해요:CORRESPONDING #( BASE ( x ) z )).MAPPING a = b: 이름이 다른 컴포넌트를 연결해요.EXCEPT b: 옮기지 않을 컴포넌트를 지정해요. 이름이 같아도 변환이 불가능한 컴포넌트를 빼서 오류를 피할 때 써요.DISCARDING DUPLICATES: 유일 키가 있는 테이블에서 중복 줄이 있어도 예외가 나지 않게 해요.DEEP,APPENDING,FROM tab USING: 깊은 구조의 중첩 테이블을 줄 단위로 옮기거나, 조회 테이블과 합쳐서 새 테이블을 만들 때 써요.
CONV — 타입을 바꾼 결과를 만들어요. 보조 변수 선언을 피할 수 있어요.
DATA(conv_res) = CONV decfloat34( 1 / 5 ). " 0.2
DATA(res) = 1 / 5. " 0, 타입은 i내부 테이블끼리 타입(테이블 종류나 키)이 달라 대입이 안 될 때도 CONV 대상_테이블_타입( itab )으로 바꿔 쓸 수 있어요.
NEW — 객체나 익명 데이터 객체를 만들어요(NEW #( ... )). Clean ABAP 연재 5회에서 CREATE OBJECT 대신 NEW를 쓰라고 한 이유와 이어져요.
주의할 점
치트시트는
FINAL(var)이라는 불변 인라인 선언도 소개하지만, 이 문법이 모든 릴리스에서 되는 것은 아니에요. 릴리스 의존적인 구문은 내 시스템에서 문법 검사를 해 보세요.CORRESPONDING은 이름만 보고 옮겨요. 의미가 다른 같은 이름의 필드가 있으면 조용히 잘못 옮길 수 있어서, 필요하면EXCEPT로 막아요. 이 문장은 원문에 있는 경고를 바탕으로 한 제 정리예요.치트시트는 계속 갱신되는 문서예요. 첫 공개는 2022년이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/05_Constructor_Expressions.md
출처와 이용 안내
원문: ABAP Cheat Sheets - Constructor Expressions VALUE, CORRESPONDING, CONV · 작성자 SAP SE and contributors SAP-samples · 작성일 2022-12-05 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기