로컬 클래스 정의

Objective

After completing this lesson, you will be able to 전역 클래스 안에 로컬 클래스를 정의합니다.

로컬 클래스

로컬 클래스 및 전역 클래스

ABAP의 클래스는 로컬 클래스 또는 전역 클래스일 수 있습니다.

전역 클래스는 중앙에 저장되며 클래스 풀이라고 하는 자체 저장소 오브젝트에 포함됩니다. 전역 클래스는 주 프로그램 역할을 할 수 있습니다. 전역 클래스에는 다른 전역 클래스를 포함하여 다른 ABAP 프로그램에서 재사용되는 로직이 포함될 수도 있습니다.

로컬 클래스는 ABAP 프로그램의 일부로 정의됩니다(예: 전역 클래스). 정의된 프로그램 또는 클래스에서만 사용할 수 있습니다. 로컬 클래스는 단일 프로그램에만 필요한 엔티티 또는 기능에 유용합니다.

로컬 클래스와 전역 클래스의 ABAP 구문은 거의 동일합니다. 이 과정에서는 전역 클래스의 로컬 클래스로 작업합니다. if_oo_adt_classrun~main 메소드를 사용하는 전역 클래스는 일종의 주 프로그램으로만 사용됩니다.

전역 클래스의 로컬 클래스

아래 그림과 같이 ADT에서 전역 클래스를 열면 먼저 전역 클래스 탭에 포커스가 표시됩니다. 여기에서 전역 클래스 자체의 소스 코드를 찾을 수 있습니다. 로컬 클래스의 소스 코드를 보거나 입력하려면 로컬 유형 탭으로 이동해야 합니다.

ADT는 로컬 클래스의 소스 코드 템플릿을 제공합니다. 이 템플릿을 사용하려면 다음과 같이 하십시오.

  1. ABAP 편집기에서 lcl 을 입력하고 Ctrl + Space 를 누릅니다.
  2. 표시되는 리스트에서 lcl - Local class 를 선택하고 Enter를 누릅니다.
  3. 신규 로컬 클래스의 이름을 조정합니다.

이 과정의 클래스에서는 CLASS … DEFINITION 문에서 create private 추가 요소를 제거해야 합니다.

전역 클래스에서 로컬 클래스를 생성하는 방법

특성

ABAP의 클래스 소스 코드

ABAP에서 클래스의 소스 코드는 정의와 구현이라는 두 부분으로 구성됩니다. 클래스의 정의 부분은 클래스의 가시성 섹션이라고 하는 최대 세 개의 섹션으로 세분화됩니다.

정의
클래스의 정의 부분에는 클래스의 모든 요소, 즉 유형, 상수, 특성 및 메소드의 정의와 선언이 포함됩니다. CLASS <class_name> DEFINITION. 으로 시작하고 ENDCLASS 로 끝납니다.
구현
클래스의 구현 부분에는 클래스의 실행 가능 코드, 즉 클래스의 메소드 구현이 포함됩니다. CLASS <class_name> IMPLEMENTATION. 로 시작하고 ENDCLASS 로 끝납니다. 클래스의 구현 부분은 선택사항입니다. 클래스 정의에 실행 가능한 메소드가 포함되면 그 즉시 필수사항이 됩니다.
가시성 섹션

클래스의 각 가시성 섹션은 PUBLIC SECTION, PROTECTED SECTION, PRIVATE SECTION 문 중 하나로 시작되며 다음 섹션이 시작되면 암시적으로 종료됩니다. 마지막 섹션은 ENDCLASS 문으로 끝납니다. 클래스의 모든 선언은 섹션 중 하나에 속해야 합니다. 즉, 클래스 정의의 시작과 첫 번째 섹션의 시작 사이에는 선언이 허용되지 않습니다.

선언이 위치한 섹션은 클래스의 선언된 요소에 대한 가시성을 정의합니다.

클래스의 세 가지 가시성 섹션은 선택사항입니다. 특정 섹션이 필요하지 않으면 선언할 필요가 없습니다. 그러나 클래스 정의가 여러 섹션으로 구성된 경우 PUBLIC SECTION - PROTECTED SECTION - PRIVATE SECTION 순서를 따라야 합니다.

클래스의 정의 부분

다음 동영상에서는 클래스에서 정의할 수 있는 다양한 종류의 컴포넌트를 보여줍니다. 이러한 컴포넌트는 클래스의 가시성 섹션에서 정의할 수 있습니다.

예제: 항공편 연결 클래스 속성

ABAP에서 UML 모델 구현을 시작하고 연결 클래스의 특성을 먼저 살펴보겠습니다. 특성을 선언하려면 적합한 가시성 섹션 안에서 DATA 문을 사용합니다.

특성 conn_counter는 정적 특성을 나타내는 밑줄로 표시됩니다. 정적 특성은 CLASS-DATA 문을 사용하여 선언됩니다. CLASS-DATA 구문은 DATA 구문과 동일합니다.

노트

이 시점에서 공개 특성으로 시작합니다. 본 과정의 후반부에서 캡슐화에 대해 논의해 볼 때, 캡슐화를 비공개 속성으로 전환해 보겠습니다.

로컬 클래스 정의

이번 연습문제에서는 전역 클래스 안에 로컬 클래스를 정의합니다.

템플릿:

  • 없음

솔루션:

  • /LRN/CL_S4D400_CLS_LOCAL_CLASS(전역 클래스)

태스크 1: 전역 클래스 생성

패키지에 신규 ABAP 클래스를 생성합니다.

단계

  1. IF_OO_ADT_CLASSRUN 인터페이스를 구현하는 신규 전역 클래스를 생성합니다(제안 이름: ZCL_##_LOCAL_CLASS, ##은 그룹 번호).

    1. 파일신규ABAP 클래스 를 선택합니다.

    2. 패키지 필드에 패키지 이름을 입력합니다. 이름 필드에 이름 ZCL_##_LOCAL_CLASS 를 입력합니다(## = 그룹 번호). 내역을 입력하십시오.

    3. 인터페이스 그룹 상자에서 추가 를 선택합니다.

    4. IF_OO_ADT_CLASSRUN 을 입력합니다. 인터페이스가 적중 리스트에 표시되면 더블 클릭하여 클래스 정의에 추가합니다.

    5. 다음을 선택합니다.

    6. 전송 요청을 선택하고 Finish 를 선택합니다.

태스크 2: 로컬 클래스 정의

로컬 클래스 lcl_connection 을 정의하고 일부 공용 특성을 선언합니다.

단계

  1. 전역 클래스 안에 lcl_connection 로컬 클래스를 새로 생성합니다. 코드 자동 완성을 사용하여 코드를 생성하되, 생성된 코드에서 create private 추가 요소를 제거해야 합니다.

    1. 로컬 유형 탭으로 전환합니다.

    2. 편집기에 lcl 을 입력하고 Ctrl + Space 를 누릅니다.

    3. 팝업에서 lcl - 클래스 를 더블 클릭합니다.

    4. class lcl definition create private. 라인에는 여전히 lcl 주위에 프레임이 있지만 lcl_connection에 클래스 이름을 입력하십시오.

    5. 코드 행 class lcl_connection definition. 끝에 있는 create private 단어를 삭제합니다.

  2. 로컬 클래스 lcl_connection 에서 다음 공용 특성을 선언합니다.

    특성

    특성 이름범위데이터 유형
    carrier_id인스턴스/DMO/CARRIER_ID
    connection_id인스턴스/DMO/CONNECTION_ID
    conn_counter정적I
    1. PUBLIC SECTION. 라인 뒤와 PROTECTED SECTION. 라인 앞에 다음 코드를 추가합니다.

      Code Snippet
      123456
      DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. CLASS-DATA conn_counter TYPE i.
  3. 클래스를 활성화합니다.

    노트

    if_oo_adt_classrun~main 메소드는 실행 가능 코드를 포함하지 않기 때문에 현재 테스트하거나 디버그할 내용이 없습니다.
    1. Ctrl + F3 을 눌러 클래스를 활성화합니다.

    2. 로컬 유형 탭의 코드를 모델 솔루션에서 추출한 다음 코드와 비교합니다.

      Code Snippet
      1234567891011121314151617181920212223
      *"* use this source file for the definition and implementation of *"* local helper classes, interface definitions and type *"* declarations CLASS lcl_connection DEFINITION. PUBLIC SECTION. DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. CLASS-DATA conn_counter TYPE i. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS lcl_connection IMPLEMENTATION. ENDCLASS.