바로투입이력카드
SAP 게시판

정보·팁

생성자 표현식 ① VALUE, CORRESPONDING, CONV, NEW 한 번에 이해하기

에이든ABAP 개발자운영자모듈 MMSD기타조회 2

3줄 요약

  • 생성자 표현식은 연산자 타입( ... ) 형태이고, 타입을 문맥에서 알 수 있으면 # 으로 줄여 써요.

  • VALUE 는 구조체와 내부 테이블을 그 자리에서 만들고, CORRESPONDING 은 이름이 같은 필드끼리 옮기고, CONV 는 타입 변환 결과를 만들어요.

  • 인라인 선언 DATA(...) 와 같이 쓰면 보조 변수와 APPEND, CLEAR 문장이 크게 줄어요.

어떤 상황에서 쓰나요

코드에서 DATA ls_x TYPE ..., ls_x-a = 1., ls_x-b = 'aaa'., APPEND ls_x TO lt_x. 가 길게 이어진다면 같은 일을 몇 줄로 줄여 주는 문법이에요. 이 연재는 SAP 가 공개한 ABAP 치트시트를 주제별로 정리해요. 첫 회와 둘째 회는 *Constructor Expressions* 편을 반씩 나눠요.

핵심 내용

기본 형태. 생성자 표현식은 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

아직 댓글이 없어요.

정보·팁 목록전체 목록