VALUE문은 NEW SYNTAX의 핵심 중의 핵심이라고 할 수 있다.
누군가 나에게 실무에서 가장 많이 본 NEW SYNTAX가 뭐냐고 물어본다면,
나는 고민도 없이 VALUE 였다고 말할 것 같다. 기존에 APPEND와 INSERT의 기능과 여러 타입의 변수에 값을 할당 하는 기능을 한다.
긴 코드를 간략하게 바꿀 수 있다는 것이 개발자에게 정말 편한 구문이다. 그만큼 가독성이 좋아 유지보수가 더 쉬워진다.
얼마나 편하길래? 라는 궁금증이 들 수도 있으니, 아래 내가 경험한 코드를 봐보자.
가장 먼저 내가 SYNC 교육 과정을 하면서 했었던 방법이다. 물론 예시이기 때문에 4건의 데이터 밖에 없지만 실제로 6개 이상 노가다 하면서 썼었다. 이게 은근 정말 귀찮다.
기존의 ECC 버전에서 많이 볼 수 있는 방법이다. 물론 해당 코드가 문제가 있다는 것이 아니다.
어떤 사람은 이게 더 가독성이 좋다고 이야기할 수 도 있다.
이 코드에 VALUE 문법을 사용하면 어떻게 될까?
Old Syntax의 30줄 길이의 GT_FCAT이 단 4줄의 코드로 줄어든다.
무엇보다 한줄이 하나의 데이터처럼 보여, 4건의 스트럭쳐를 테이블에 넣었구나를 빠르게 확인할 수 있다.
테이블의 필드도 가로로 정렬되서 보기도 편하다.
이정도면은 충분히 가독성의 차이를 느꼈을테니, 자세히 이야기를 해보자 .
# VALUE
VALUE는 간단하게 ECC 버전의 ‘=’ 코드를 쉽게 만들어준다고 생각하면 된다. 그로인해 개발자는 불필요한 변수 선언과 가독성 있는 코드를 짤 수 있다.
내가 찾아보고 직접 해본 결과 VALUE는 아래 4가지로 설명할 수 있을 거 같다.
- VALUE 구문
- 스트럭쳐의 값 넣기
- 테이블의 값 넣기
- 변수의 값 넣기
그래서 해당 목차대로 하나씩 이야기해보려 한다.
1. VALUE 구문
VALUE는 아래와 같은 구문들을 쓸 수 있다.
- VALUE #
- VALUE TYPE
- VALUE ~ BASE
- VALUE ~ OPTIONAL
1-1. VALUE # 이란?
내가 VALUE를 처음 만난건 SYNC 교육 과정을 듣기도 전에 SAP JOY에서 NEW SYNTAX 세미나를 시청했을 때 였다.
‘#’ 표현이 들어가면서 VALUE 구문을 굉장히 어렵게 느껴졌고 더군다나 비전공자였던 나에게 괴리감이 있었다.
VALUE의 ‘#’은 쉽게 설명하기 위해서는 인라인 선언이라고 생각하면 쉽고 그냥 TYPE 의 또 다른 표현이라고 생각하자.
# 을 쓰면 TYPE을 써주지 않아도 알아서 앞의 변수를 참고해서 TYPE을 받는다.
정확하게는 VALUE [ Type ] 이 문법이다. 할당할 변수의 TYPE을 받겠다는 것을 #으로 표현한다. .
아래의 예시를 봐보자.
우리는 여기서 LS_SCARR을 인라인 선언하면서 GT_SCARR의 타입을 그대로 받아온다는 것을 알고 있다.
그거랑 똑같다. 할당 받을 데이터의 타입을 그대로 참조한다.
VALUE #도 똑같다.
자동적으로 SCARR 타입을 받는다. 사람들은 대부분 편하니 #을 많이 사용한다.
하지만! 중요한 점이 있다.
만약에 VALUE 뒤에 지정해줄 수 있는 TYPE이 존재한다면, #을 써주는 것보다 TYPE을 명시해주는 것이 퍼포먼스에 좋다. 그게 바로 2번 내용의 VALUE TYPE이다.
1-2. VALUE TYPE 이란?
말 그대로 TYPE을 지정해 주는 것이다. 퍼포먼스의 차이를 알아보자.
예를들어 1번과 2번의 구문이 존재한다.
데이터가 수십만 건이 존재한다면 2번 방법이 퍼포먼스 적으로 유리하다. ( 대부분의 회사는 수십만건의 데이터는 가볍게 가지고 있다...! )
왜냐하면, #을 써주는 순간 SAP 시스템 상에서 GS_SCARR의 타입을 확인하기 위한 과정이 생겨버린다.
해당 과정을 보면은
# 1번의 코드의 경우
엇? Type이 #이네? -> GS_SCARR이 뭐지?( Type 확인) →해당 타입에 알맞게 값넣기
# 2번의 코드의 경우
Type이 SCARR 이구나? -> 해당 타입에 알맞게 값넣기
잘 이해될 지 모르겠는데 1번의 빨간색 글씨처럼 할당할 변수의 TYPE을 확인하는 과정이 생기기 때문에,
만약 TYPE을 입력해줄 수 있다면 입력해주는 것이 좋다.
1-3. VALUE BASE
BASE 문은 기존 데이터를 유지하면서 데이터를 추가하는 방법이다. 한마디로 APPEND 다.
예를 들어, 우리가 많이 쓰는 INTO 이런식의 표현은 기존에 있는 데이터를 없애고 새로운 데이터를 집어 넣는 방식이다.
기존의 데이터를 유지하면서 데이터를 추가하는 방식이다. 해당 코드처럼 GT_DATA에 이미 데이터가 존재한다면
BASE를 써서 GT_DATA의 기존 데이터를 데이터를 유지하고~ 이 값을 넣어~~ 라는 식의 표현이 될 수 있다.
1-4. VALUE OPIONAL
이거는 이전의 READ TABLE 할 때, 했던 내용이랑 똑같다. 덤프 관련의 내용이다.
OPTIONAL은 특정 조건에 데이터가 없어도 덤프를 안나게 막아준다.
* 해당 게시글에 자세하게 나와있다.
2025.03.07 - [SAP/NEW SYNTAX] - [SAP ABAP] NEW SYNTAX #2 - 테이블 표현식(Table Expressions)
[SAP ABAP] NEW SYNTAX #2 - 테이블 표현식(Table Expressions)
오늘은 NEW SYNTAX의 2번째 Table Expressions, 테이블 표현식이다! READ TABLE을 대체할 수 있는 신 문법으로, 내부 테이블이나 표준 테이블의 특정 행에 직접 접근할 수 있다.기존에 없었던 새로운 접근
roblige.tistory.com
아래와 같은 상황이 존재한다.
만약 이 과정에서 GT_DATA의 1번 INDEX가 존재하지 않는다. 라고 가정해보자.
그러면 OLD 구문은 덤프가 나지 않고 SY-SUBRC 4로 떨어지면서 넘어간다.
하지만 VALUE 구문은 바로 ITAB_LINE_NOT_FOUND 이라는 Runtime Errors가 생긴다.
이런 경우에는 OPTIONAL을 사용해주거나 Try Catch을 사용해야 덤프가 안난다. 데이터가 존재할 수도 있고 안할 수도 있다면 OPTIONAL을 추가해서 덤프를 나지 않도록 방지해주자.
2. 변수에 값 할당
기존의 OLD 방식으로 하는 방법을 NEW 방법으로 사용이 가능하다.
3. Structure에 값 할당
스트럭쳐에 하나씩 값을 넣을 때는 아래와 같이 사용하면 된다.
조건에 맞는 테이블의 ROW를 INTO 하는 상황.
4. TABLE에 값 할당
코드길이를 줄이는 것은 물론 가독성까지 좋게 만들 수 있다.
해당 사진들은 모두 다 #으로 표기했지만,
실제 상황에서는 꼭 TYPE을 써주는 것 잊지 말자!!
오늘도 파이팅!
'SAP > NEW SYNTAX' 카테고리의 다른 글
[SAP ABAP] NEW SYNTAX #3 - CONV 연산자(데이터 변환) (0) | 2025.03.17 |
---|---|
[SAP ABAP] NEW SYNTAX #2 - 테이블 표현식(Table Expressions) (0) | 2025.03.07 |
[SAP ABAP] NEW SYNTAX #1 - 데이터 인라인 선언( Inline Declarations ) (1) | 2025.03.05 |