구조체, 내부테이블 선언이 너무 헷갈린다.

정리해보자.

ABAP에서의 구조체_Structure 

 

1. TYPE vs LIKE 차이

구분 type like
기능 데이터 타입 참조 기존 필드(변수 or 테이블 필드)의 속성 참조
사용 대상 도메인 / 데이터 요소 / 구조 / 테이블 구체적인 변수 또는 테이블의 실제 필드
독립성 독립적인 선언 종속적 (참조하는 대상이 바뀌면 영향 받음)
추천 용도 표준화된 구조나 도메인 기반 기존 필드를 그대로 따라야 할 때

 

예시 1 : TYPE 사용 (데이터 요소 기반)

TYPES: BEGIN OF ty_emp,
         name  TYPE zemployees-surname,
         birth TYPE zemployees-dob,
       END OF ty_emp.

- 데이터 요소를 직접 참조함

예시 2 : LIKE 사용 (테이블 필드 참조)

TYPES: BEGIN OF ty_emp,
         name  LIKE zemployees-surname,
         birth LIKE zemployees-dob,
       END OF ty_emp.

- zemployees 테이블 안의 필드속성(길이, 타입)을 그대로 따라감

 

이렇게 해도 조금 덜 이해가 가는 거 같다.

그래서 타입은  뭐고, like는 뭐란 말인가..🥲

Field Name
Type
Length
emp_id CHAR 6
name CHAR 20
age INT 3

 

예를 들어 zemployee라는 테이블이 위와 같이 있다고 쳐보자.

 

예제 1: TYPE 을 사용하는 경우

TYPES: BEGIN OF ty_emp_type,
         emp_id TYPE char6,
         name   TYPE char20,
         age    TYPE i,
       END OF ty_emp_type.

DATA: wa_emp TYPE ty_emp_type.

-TYPE으로 하면 직접 형식 명시가 가능하다.

-테이블이 없어도 구조는 동작한다. 

- 독립적

예제 2:  LIKE를 사용하는 경우

TABLES: zemployee.

TYPES: BEGIN OF ty_emp_like,
         emp_id LIKE zemployee-emp_id,
         name   LIKE zemployee-name,
         age    LIKE zemployee-age,
       END OF ty_emp_like.

DATA: wa_emp TYPE ty_emp_like.

- LIKE를 사용하면 테이블 필드를 그대로 참조한다.

- zemployee 테이블이 변경되면 구조도 자동 반영된다.

- 의존적

비교 type like
참조 대상 형식(Type) 실제 변수나 테이블 필드
독립성 독립적 의존적
유지보수 명시적, 명확 편하지만 위험 (의존성 큼)
주의할 점 테이블 필드 변경 시 반영 안 됨 테이블 없으면 오류남

 

그니까 결론적으로 

surname이 char10이라고 할 때,

TYPE zemployees-surname이라고 쓰는건 자동으로 길이와 타입을 가져오겠다는 의미다.

TYPE char10.  " <- 이걸 몰라도 자동으로 따라오게 해주는 것

이거랑 그냥 똑같다고 보면됨

DATA: name1 TYPE char10.                     " 수동 지정
DATA: name2 TYPE zemployees-surname.         " 참조 (추천)

WRITE: name1, name2.

 

즉, type으로하면 zemployees-surname을 참조하는 것이고, 

zemployees-surname의 타입이 바뀌면 그대로 쓸 수 있으므로 편하기 때문에 쓰는 것 

 

근데 여기서 또 궁금한 점이 생겼다.

zemployees타입이 변경되면 name1도 자동변경이 되는 것이라면, like처럼 똑같이 테이블 의존적인 것 아닌가?

 

항목 TYPE LIKE
구조 참조 기준 데이터 타입 (Domain/Element 기준) 필드 전체 (기술 속성까지)
쓰임 보통 TYPES에서 많이 사용 보통 DATA 선언 시 많이 사용
유연성 더 유연함 (필드 속성 말고 타입 중심) 더 엄격함 (정확히 같은 속성 사용)

 

정답은 그렇다! 다.

그대신 TYPE은 데이터타입만 참조해오고, LIKE는 기술 속성까지 참조해온다.

 

 

 

 

 

 

 

 

 

+ Recent posts