본문 바로가기
카테고리 없음

ABAP New Syntax #10 - CONV Operator

by SAPortal 2024. 3. 6.

목차

    1. CONV Operator 란?

    CONV 연산자는 데이터 타입을 변환하는 데 사용됩니다.

    이 연산자를 사용하여 한 타입의 변수를 다른 타입으로 변환할 수 있습니다.

    CONV는 특히 인라인 선언과 함께 사용될 때 유용하며, 데이터 타입 변환을 간결하고 명시적으로 수행할 수 있게 합니다.

     

    2. CONV Operator 예제

    예제1) 문자열을 정수로 변환

      DATA(LV_NUMBER_STRING) = '123'.
      DATA(LV_NUMBER) = CONV I( LV_NUMBER_STRING ).

    이 예제에서 문자열 '123'이 정수형으로 변환되어 LV_NUMBER에 저장됩니다.

    정수형으로 변환하기 위하여 CONV 연산자 다음에 'I' 를 사용하였습니다.

     

     

    예제2) 숫자를 문자열로 변환

      DATA(LV_NUMBER) = 123.
      DATA(LV_NUMBER_STRING) = CONV STRING( LV_NUMBER ).

    이 예제에서는 정수형 변수 LV_NUMBER의 값을 문자열로 변환하여 LV_NUMBER_STRING에 저장합니다.

    문자열로 변환하기 위하여 CONV 연산자 다음에 ' STRING' 을 사용하였습니다.

     

     

    예제3) 날짜 타입 변환

      DATA : LV_DATE TYPE D VALUE '20230101'.
      DATA(LV_DATE_STRING) = CONV STRING( LV_DATE ).

    이 예제에서는 ABAP 날짜 타입 D의 값을 문자열로 변환하여 LV_DATA_STRING에 저장합니다.

    변환된 문자열은 YYYYMMDD 형식을 유지합니다.

     

     

    예제4) FUNCTION에서의 변환

      DATA: LV_STRING TYPE STRING VALUE '20200101'.
      DATA: LV_OUTPUT TYPE DATUM.
    
      CALL FUNCTION 'SN_LAST_DAY_OF_MONTH'
        EXPORTING
          DAY_IN       = CONV D( LV_STRING )
        IMPORTING
          END_OF_MONTH = LV_OUTPUT.

    위 FUNCTION의 Input Parameter인 DAY_IN은 날짜타입 입니다.

    그렇기 때문에 값을 대입하는 변수도 날짜타입이어야 합니다.

    하지만 STRING타입인 LV_STRING 변수를 CONV 연산자와 함께 사용하면 날짜타입으로 변환된 값이 함수에 반영되기 때문에 에러가 발생하지 않습니다.

     

     

    예제5) CLASS에서의 변환

    CLASS ZCL_ADD DEFINITION.
      PUBLIC SECTION.
        METHODS: ADD IMPORTING I_NUM1   TYPE I
                               I_NUM2   TYPE I
                     EXPORTING O_OUTPUT TYPE I.
    ENDCLASS.
    CLASS ZCL_ADD IMPLEMENTATION.
      METHOD ADD.
        O_OUTPUT = I_NUM1 + I_NUM2.
      ENDMETHOD.
    ENDCLASS.
          
          
      DATA: LV_FLOAT  TYPE F VALUE '10.0',
            LV_RESULT TYPE I.
      DATA(LO_ADD) = NEW ZCL_ADD( ).
    
      LO_ADD->ADD(
        EXPORTING
          I_NUM1   = CONV #( LV_FLOAT )
          I_NUM2   = 2
        IMPORTING
          O_OUTPUT = LV_RESULT
      ).

    CLASS에서도 마찬가지로 대입하는 변수의 타입이 틀리면 에러가 발생합니다.

    하지만 FLOAT타입인 LV_FLOAT 변수를 CONV 연산자와 함께 사용하면 CLASS의 PARAMETER 타입으로 변환되어 CLASS에 반영되기 때문에 에러가 발생하지 않습니다.

    CLASS와 FUNCTION에서의 CONV 연산자 사용은 거의 비슷하지만 틀린점이 한가지 있습니다.

    CLASS에서는 CONV #으로 지정하면 PARAMETER의 타입으로 자동 변환되지만 FUNCTION은 CONV 연산자 다음에 타입을 지정해 줘야 합니다.

     

    3. CONV Operator 장점

    코드 간결성: CONV 연산자를 사용하면 데이터 타입 변환을 한 줄의 코드로 간결하게 수행할 수 있습니다.

    타입 안전성: 변환하려는 타입을 명시적으로 지정함으로써 타입 안전성을 보장할 수 있습니다.

    가독성 향상: 코드의 의도가 명확해지므로 다른 개발자가 이해하기 쉬워집니다.