[SALV] 4탄: 레이아웃 및 디스플레이 설정 (Variant, Title, Stripe)

2026. 4. 6.
SAP ABAP SALV 시리즈 4탄. 사용자가 직접 컬럼 순서와 필터 조건을 저장할 수 있는 레이아웃(Variant) 기능의 핵심인 CL_SALV_LAYOUT 설정법을 상세히 알아봅니다. 또한 리스트의 시각적 가독성을 높여주는 줄무늬(Stripe) 패턴과 타이틀 설정 등 디스플레이 최적화 전략을 정리합니다.
 

CONTENTS: SALV 4탄 - 레이아웃 및 디스플레이 심화 가이드

 

    1. 실무 적용 코드 예시 (Layout & Display Settings)

    
    " 1. 데이터 조회 (Inline Declaration 활용)
    SELECT * FROM sflight INTO TABLE @DATA(lt_flight) UP TO 100 ROWS.
    
    TRY.
        " 2. SALV 인스턴스 생성
        cl_salv_table=>factory(
          IMPORTING r_salv_table = DATA(lo_alv)
          CHANGING  t_table      = lt_flight
        ).
    
        " --- [기능 1] 레이아웃(Variant) 관리 설정 ---
        DATA(lo_layout) = lo_alv->get_layout( ).
        
        " 레이아웃 저장을 위한 고유 키값 설정 (현재 프로그램명 기준)
        " VALUE # 구조체 생성을 통해 코드를 간결하게 유지합니다.
        lo_layout->set_key( VALUE #( report = sy-repid ) ).
        
        " 레이아웃 저장 제한 해제 (사용자별/공용 저장 모두 허용)
        lo_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
    
        " --- [기능 2] 디스플레이(Style) 설정 ---
        DATA(lo_display) = lo_alv->get_display_settings( ).
        
        " 가독성을 위한 줄무늬(Striped) 패턴 적용
        lo_display->set_striped_pattern( abap_true ).
        
        " ALV 상단 타이틀 텍스트 설정
        lo_display->set_list_header( '항공편 운항 현황 통합 리스트' ).
        
        " 수평/수직 구분선 표시 (선택 사항)
        lo_display->set_horizontal_lines( abap_true ).
        lo_display->set_vertical_lines( abap_true ).
    
        " 3. 화면 출력
        lo_alv->display( ).
    
      CATCH cx_salv_msg INTO DATA(lx_msg).
        MESSAGE lx_msg->get_text( ) TYPE 'E'.
    ENDTRY.
    

    2. 기술 상세 설명 및 실무 시나리오

    레이아웃(Variant)의 중요성 (Why Variant?)

    대규모 ERP 환경에서 하나의 리스트 화면은 수많은 사용자가 공유하게 됩니다. 영업팀 직원은 '날짜'를 앞에 두고 싶어 하고, 물류팀 직원은 '수량'을 먼저 보고 싶어 합니다. 매번 실행할 때마다 컬럼 순서를 바꾸는 것은 엄청난 업무 낭비입니다. 레이아웃(Variant) 기능은 사용자가 설정한 최적의 뷰를 서버에 저장하고 호출함으로써 개인화된 업무 환경을 제공합니다. 이는 사용자 만족도와 직결되는 매우 중요한 기능입니다.

    아키텍처: CL_SALV_LAYOUT 클래스

    SALV에서 레이아웃 관리는 전용 클래스인 CL_SALV_LAYOUT이 담당합니다. 기존 Function 기반 ALV에서는 IS_VARIANTI_SAVE 파라미터를 수동으로 세팅해야 했으나, SALV는 객체 지향 메서드 호출 방식을 통해 훨씬 직관적으로 제어할 수 있습니다.

    3. 주요 설정 포인트 딥다이브

    1) 레이아웃 키(Layout Key) 설정

    SALV에서 레이아웃 저장 버튼이 활성화되지 않는 가장 큰 이유는 set_key( )를 누락했기 때문입니다. 시스템은 이 키값을 통해 "이 레이아웃이 어떤 프로그램 소유인가"를 판단합니다. 보통 sy-repid를 할당하여 현재 실행 중인 프로그램과 매핑시킵니다.

    2) 저장 제한(Save Restriction) 옵션

    상황에 따라 레이아웃 저장 권한을 제어해야 할 때가 있습니다. if_salv_c_layout 인터페이스에서 제공하는 상수를 활용합니다.

    • RESTRICT_NONE: 사용자별 저장 및 공용 저장 모두 허용 (가장 일반적)
    • RESTRICT_USER_DEPENDANT: 현재 로그인한 사용자 본인만 사용 가능한 레이아웃만 저장 가능
    • RESTRICT_NONE_GLOBAL: 공용 레이아웃 저장만 허용

    3) 시각적 가독성 (Striped Pattern & Header)

    데이터 양이 많은 리스트에서는 행 간 구분이 어려워 오독이 발생할 수 있습니다. set_striped_pattern( abap_true )를 적용하면 홀수 행과 짝수 행에 미세한 색상 차이를 주어 눈의 피로도를 획기적으로 낮춥니다. 또한 set_list_header는 리스트의 정체성을 한눈에 보여주는 이정표 역할을 합니다.

    4. 주의사항 및 트러블슈팅 (Q&A)

    • 왜 저장 버튼이 회색으로 비활성화되어 있나요? lo_layout->set_key( )가 호출되었는지 다시 확인하세요. 키 설정 없이는 저장이 불가능합니다.
    • 기존 레이아웃이 자동으로 불러와지지 않습니다. 프로그램 시작 시 특정 레이아웃을 로드하려면 set_initial_layout 메서드를 활용하여 사용자나 관리자가 지정한 기본값을 불러오도록 로직을 추가해야 합니다.
    • HANA New Syntax 활용: VALUE #( ... ) 구문을 사용하여 구조체를 즉석에서 생성하면, 불필요한 보조 변수(Helper Variable) 선언을 줄여 메모리 효율과 코드 가독성을 동시에 잡을 수 있습니다.

    5. 마치며

    레이아웃과 디스플레이 설정은 프로그램의 '기능'을 넘어 '사용성'을 완성하는 단계입니다. 단순히 데이터를 보여주는 것을 넘어 사용자가 데이터를 편하게 다룰 수 있도록 배려하는 것이 전문 ABAP 개발자의 자질입니다. 다음 5탄에서는 이 화면에 생동감을 불어넣는 이벤트 핸들링(Event Handling)에 대해 다루어 보겠습니다.