Java 랩퍼 클래스

프로그램 파트가 Java™ 랩퍼로 생성되도록 요청하면 EGL은 다음 각각에 대해 랩퍼 클래스를 생성합니다.
  • 생성된 프로그램
  • 해당 프로그램에서 매개변수로 선언되는 각각의 레코드 또는 양식. 프로그램이 입력 레코드를 가지고 있는 기본 프로그램인 경우에는 입력 레코드에 전달된 컨텐츠를 나타내기 위해 랩퍼 클래스가 생성됩니다.
  • 유연한 레코드가 직접 포함하는 각각의 레코드 또는 동적 배열
  • 매개변수로 선언되는 각각의 동적 배열. 동적 배열이 구조화된 레코드의 배열인 경우 동적 배열 클래스에 대한 클래스가 구조화된 레코드 자체에 대한 클래스에 추가됩니다.
  • 다음과 같은 특성을 가진 각각의 구조 필드:
    • 랩퍼 클래스가 생성되는 구조화된 레코드 또는 양식 중 하나에 있음
    • 하나 이상의 하위 구조 필드를 가지고 있음(즉, 하위 구조화되어 있음)
    • 배열임(이 경우에는 하위 구조화된 배열)

    하위 구조화된 배열을 가진 구조화된 레코드 파트의 예제는 다음과 같습니다.

      Record myPart type basicRecord
        10 MyTopStructure CHAR(20)[5];
          20 MyStructureField01 CHAR(10);
          20 MyStructureField02 CHAR(10);
      end 		

이후의 설명에서는 지정된 프로그램에 대한 랩퍼 클래스를 프로그램 랩퍼 클래스, 매개변수 랩퍼 클래스, 동적 배열 랩퍼 클래스하위 구조화된 필드 배열 랩퍼 클래스라고 합니다.

EGL은 각각의 매개변수 랩퍼 클래스, 동적 배열 랩퍼 클래스 또는 하위 구조화된 필드 배열 랩퍼 클래스에 대해 BeanInfo 클래스를 생성합니다. BeanInfo 클래스를 사용하면 관련 랩퍼 클래스를 Java 준수 Java Bean으로 사용할 수 있습니다. BeanInfo 클래스와는 상호작용할 수 없습니다.

랩퍼를 생성할 때 호출된 프로그램의 매개변수 목록은 BLOB, CLOB, 사전, ArrayDictionary 또는 비구조화된 레코드 유형의 매개변수를 포함할 수 없습니다.

랩퍼 클래스 사용 방법 개요

랩퍼 클래스를 사용하여 VisualAge® Generator 또는 EGL로 생성된 프로그램과 통신하려면 네이티브 Java 프로그램에서 다음을 수행하십시오.
  • 선택적으로 PowerServer 또는 SharedResourcePowerServer 유형의 클래스를 인스턴스화하여 미들웨어 서비스(예: 네이티브 Java 코드와 생성된 프로그램 간 데이터 변환)를 제공하십시오.
    import com.ibm.javart.JavartException;
    import com.ibm.javart.calls.*;
    
    
      public class MyNativeClass 
      {
        /* declare a variable for middleware */
        PowerServer powerServer = null;
        powerServer = new PowerServerImpl();
      }

    SharedResourcePowerServer 오브젝트에 의해 제공된 기능은 PowerServer 오브젝트에 의해 제공된 기능보다 광범위합니다. 전자에 대한 세부사항은 "SharedResourcePowerServer"를 참조하십시오.

    PowerServer 오브젝트를 지정하지 않으면 EGL 런타임이 하나의 PowerServer 오브젝트를 제공합니다.

  • 프로그램 랩퍼 클래스를 인스턴스화하여 다음을 수행하십시오.
    • 데이터 구조 할당(동적 배열이 있을 경우 동적 배열 포함)
    • 생성된 프로그램에 액세스하는 메소드에 대한 액세스 제공
    생성자에 대한 호출은 미들웨어 오브젝트를 포함할 수 있습니다.
      // use of a PowerServer object is optional
      myProgram = new MyprogramWrapper(PowerServer); 

    랩퍼 오브젝트 메소드 setPowerServer를 호출하거나 랩퍼 오브젝트 호출 시 PowerServer 오브젝트를 제공할 수 있습니다.

  • 매개변수 랩퍼 클래스를 기반으로 하는 변수를 선언하십시오.
      Mypart  myParm = myProgram.getMyParm();
      Mypart2 myParm2 = myProgram.getMyParm2(); 
    프로그램에 동적 배열인 매개변수가 있는 경우 각각 동적 배열 랩퍼 클래스를 기반으로 하는 추가적인 변수를 선언하십시오.
      myRecArrayVar myParm3 = myProgram.getMyParm3();

    동적 배열과의 상호작용에 대한 세부사항은 동적 배열 랩퍼 클래스의 내용을 참조하십시오.

  • 이전의 단계와 같이 대부분의 경우에는 매개변수 변수를 사용하여 프로그램 랩퍼 오브젝트에서 할당된 메모리를 참조하고 변경하십시오. Java 레코드(이 경우에는 inputValue)를 사용하여 EGL 기본 프로그램의 입력 레코드(이 경우 MyRecord)를 채우는 또다른 예제는 다음과 같습니다.
      myProgram.setMyRecord(inputValue);
  • 다음과 같은 경우에만 사용자 ID 및 비밀번호를 설정하십시오.
    • Java 랩퍼가 Java용 iSeries Toolbox를 사용하여 iSeries 기반 프로그램에 액세스하거나
    • 생성된 프로그램이 원격 액세스를 인증하는 z/OS®용 CICS® 리젼에서 실행됩니다.

    사용자 ID 및 비밀번호는 데이터베이스 액세스에 사용되지 않습니다.

    다음 예제와 같이 프로그램 오브젝트의 callOptions 변수를 사용하여 사용자 ID 및 비밀번호를 설정하고 검토합니다.
      myProgram.callOptions.setUserID("myID");
      myProgram.callOptions.setPassword("myWord");
      myUserID = myProgram.callOptions.getUserID();
      myPassword = myProgram.callOptions.getPassword();
  • 호출된 프로그램이 EGL 기본 프로그램인 경우에만 사용할 수 있는 다음과 같은 기능을 사용해 보십시오.
    • 다음 예제와 같이 사용할 호출된 프로그램에 대한 데이터베이스 연결 지정:
      // Connect to the database
      Connection con = DriverManager.getConnection( "jdbc:db2://host:50000/db", "user", "pwd" );
      
      // Turn off auto-commit mode to enable transactions
      con.setAutoCommit( false );
      
      // Create the wrapper and give it the connection
      MWrapper mw = new MWrapper();
      mw.addConnection( con, "con1" );
      
      // Run the program
      mw.execute();
      
      // Commit the work and clean up
      mw.getPowerServer().commit();
      mw.getPowerServer().close();
      con.close();
    • 다음 예제와 같이 리턴값(sysVar.returnCode의 값)에 액세스:
        int returnValue = myProgram.returnCode();
  • 생성된 프로그램에 액세스하십시오(예를 들어, 프로그램 랩퍼 오브젝트의 execute 메소드를 호출하여).
      myProgram.execute();  
    또다른 대안은 call 메소드를 사용하는 것이며 이 경우 메소드 호출에서 인수를 제공합니다. execute의 두 번째 사용 예제는 다음과 같습니다.
    myProgram.setParm1( 2 );
    myProgram.setParm2( "sell" );
    myProgram.execute();
    call 메소드의 동등한 호출은 다음과 같습니다.
    myProgram.call( 2, "sell" );
  • 미들웨어 오브젝트를 사용하여 데이터베이스 트랜잭션 제어를 설정하십시오. 단, 다음과 같은 상황에만 해당합니다.
    • 프로그램 랩퍼 오브젝트가 z/OS용 CICS의 생성된 프로그램에 액세스하거나 Java용 IBM® Toolbox를 사용하여 iSeries 기반 COBOL 프로그램에 액세스하는 중입니다. 후자의 경우 호출에 대한 remoteComType의 값은 JAVA400 또는 JAVA400J2C입니다.
    • 랩퍼 클래스를 생성하는 데 사용되는 연계 옵션 파트에서 데이터베이스 작업 단위가 클라이언트(이 경우에는 랩퍼) 제어 하 있도록 지정했습니다. 세부사항은 callLink 요소에서 luwControl에 대한 참조를 참조하십시오.
    데이터베이스 작업 단위가 클라이언트 제어 하에 있는 경우 처리에서는 미들웨어 오브젝트의 commit 및 rollback 메소드를 사용합니다.
      powerServer.commit();
      powerServer.rollBack();

    단일 PowerServer 오브젝트를 사용하는 경우 EGL 런타임은 초기 연결에 대해 작성된 변경사항을 커미트할 수 있지만 두 번째 연결에 대해 작성된 변경사항을 커미트할 때 문제가 발생하고 실패할 수 있습니다. 커미트는 2단계(Phase) 커미트가 아니라 1단계(Phase) 커미트여서 모든 자원이 커미트되거나 아무 자원도 커미트되지 않으므로 실패 후 데이터는 불일치 상태로 남아 있습니다.

  • 미들웨어 오브젝트를 닫으십시오. 이를 명확하게 선언하지 않은 경우에는 이전에 표시된 대로 랩퍼 특정 메소드 getPowerServer().close()를 사용하십시오.

    미들웨어 오브젝트를 닫아 EGL 실행 단위를 종료하고 가비지 콜렉션을 감안합니다.

    if ( powerServer != null )
    {
      try
      {
        powerServer.close();
        powerServer = null;
      }
      catch ( JavartException error )
      {
        System.out.println( "Error closing middleware" 
          + error.getMessage() );
        System.exit( 8 );
      }
    }

프로그램 랩퍼 클래스

프로그램 랩퍼 클래스에는 생성된 프로그램의 각 매개변수에 대한 개인용 인스턴스 변수가 포함됩니다. 매개변수가 레코드 또는 양식인 경우 변수는 관련 매개변수 랩퍼 클래스의 인스턴스를 참조합니다. 매개변수가 DataItem 파트를 기반으로 하는 경우 변수는 기본 Java 유형을 가집니다.

이 도움말 페이지의 끝에 있는 표에서 EGL과 Java 유형 간 변환에 대해 설명합니다.

프로그램 랩퍼 오브젝트에는 다음과 같은 공용 메소드가 포함됩니다.
  • 각 매개변수에 대한 getset 메소드(여기서 이름의 형식은 다음과 같음).
      purposeParmname()
    purpose
    get 또는 set라는 단어
    Parmname
    데이터 항목, 레코드 또는 양식의 이름입니다. 첫 번째 문자는 대문자이고 기타 문자의 측면은 Java 랩퍼 클래스의 이름 지정 규칙에 설명된 이름 지정 규칙에 의해 판별됩니다.
  • 프로그램을 호출하기 위한 execute 메소드. 호출 시 인수로 전달될 데이터가 프로그램 랩퍼 오브젝트에 대해 할당된 메모리에 있는 경우 이 메소드를 사용합니다.
인스턴스 변수에 값을 지정하는 대신 다음을 수행할 수 있습니다.
  • 매개변수 랩퍼 오브젝트, 동적 배열 랩퍼 오브젝트 및 기본 유형에 대한 메모리 할당
  • 할당한 메모리에 값 지정
  • execute 메소드 대신 프로그램 랩퍼 오브젝트의 call 메소드를 호출하여 프로그램에 해당 값 전달
또한 프로그램 랩퍼 오브젝트에는 다음과 같은 용도를 가진 callOptions 변수가 포함됩니다.
  • 호출에 대한 연계 옵션이 생성 시 설정되도록 Java 랩퍼를 생성한 경우 callOptions 변수에는 연계 정보가 포함되어 있습니다. 연계 옵션이 설정되는 시기에 대한 세부사항은 callLink 요소에서 remoteBind를 참조하십시오.
  • 호출에 대한 연계 옵션이 런타임 시 설정되도록 Java 랩퍼를 생성한 경우 callOptions 변수에는 연계 특성 파일의 이름이 포함되어 있습니다. 파일 이름은 LO.properties입니다. 여기서 LO는 생성에 사용되는 연계 옵션 파트의 이름입니다.
  • 어느 경우든 callOptions 변수는 사용자 ID 및 비밀번호를 설정하거나 가져오기 위해 다음과 같은 메소드를 제공합니다.
      setPassword(passWord)
      setUserid(userid) 
      getPassword()
      getUserid()
    사용자 ID 및 비밀번호는 callLink 요소의 remoteComType 특성을 다음 값 중 하나로 설정할 때 사용됩니다.
    • CICSECI
    • CICSJ2C
    • JAVA400
    • JAVA400J2C
    비밀번호 정보는 csouidpwd.properties 파일에도 저장될 수 있습니다. 원격 호출을 위한 사용자 ID 및 비밀번호 제공을 참조하십시오.
EGL 기본 프로그램을 호출 중인 경우 다음과 같은 메소드를 사용할 수 있습니다.
  • returnCode()sysVar.returnCode의 int 값을 리턴합니다.
  • addConnection()은 EGL 기본 프로그램이 사용할 JDBC 연결 오브젝트를 지정합니다. 각각의 addConnection() 호출은 연결을 실행 단위에 대한 현재 연결로 지정합니다.

    실행 단위는 이전에 지정된 연결을 사용할 수 있습니다(있는 경우). 하지만 실행 단위가 지정된 연결을 닫으면 연결이 해제되어 다시 열 수 없습니다. 이 마지막 제한사항은 닫기가 EGL 프로그램에서 발생하는지 아니면 이전의 절에 표시된 대로 powerServer.close()의 호출에 의해 발생하는지에 관계없이 적용됩니다.

    최대 3개의 인수(마지막 인수는 선택사항임)가 포함된 addConnection()을 호출합니다. 메소드 서명은 다음과 같습니다.
    public void addConnection
       (java.sql.Connection con, java.lang.String name, int disconnectOption)
       throws java.lang.NullPointerException, java.lang.IllegalArgumentException, com.ibm.javart.JavartException
    매개변수는 다음과 같습니다.
    • con(java.sql.Connection 유형)은 빌드 디스크립터 옵션 DBMS에서 지정된 데이터베이스의 유형에 대한 연결입니다.
    • name(java.lang.String 유형)은 연결 이름입니다. 기본 프로그램은 시스템 함수 sqlLib.beginDatabaseTransaction(), sqlLib.defineDatabaseAlias(), sqlLib.disconnect()sqlLib.setCurrentDatabase()에 대한 호출에서 해당 이름을 사용합니다.
    • disconnectOption(int 유형)은 다음과 같은 상수에 의해 지정된 대로 연결 끊기 옵션입니다.
      • DISCONNECT_NEVER는 기본값이며 Java 코드가 powerServer.close()를 호출하는 경우에도 연결 닫기 시도가 효과가 없을 것임을 나타냅니다.

        powerServer.close()는 작업을 커미트하고 EGL 실행 단위를 종료합니다. 기타 모든 연결 끊기 옵션의 경우 실행 단위가 종료되면 열린 연결이 모두 닫힙니다.

      • DISCONNECT_AUTOMATIC은 롤백 후, 커미트 후 또는 기본 프로그램이 sqlLib.disconnect() 또는 sqlLib.disconnectAll()을 호출한 후 연결이 닫힘을 나타냅니다.
      • DISCONNECT_CONDITIONAL은 롤백 후, 연결에 의해 작성된 열린 결과 세트에 대해 HOLD 옵션이 적용되지 않는 경우 커미트 후 또는 기본 프로그램이 sqlLib.disconnect() 또는 sqlLib.disconnectAll()을 호출한 후 연결이 닫힘을 나타냅니다.
      • DISCONNECT_EXPLICIT는 롤백 또는 커미트 후에는 연결이 닫히지 않지만 기본 프로그램이 sqlLib.disconnect() 또는 sqlLib.disconnectAll()을 호출한 후에는 연결이 닫힘을 나타냅니다.

      이전 값 중 첫 번째를 제외한 모든 값은 시스템 함수 sqlLib.connect() 호출 시 사용자가 지정할 수 있는 값과 동일한 의미를 가집니다. EGL 열거 egl.io.sql.DisconnectKind에서 동등한 값은 DisconnectKind.automatic, DisconnectKind.conditional, DisconnectKind.explicit입니다. sqlLib.connect()를 호출하는 경우 DISCONNECT_NEVER와 동등한 값은 유효하지 않습니다.

마지막으로 기본 유형의 매개변수에 대해 변경사항이 작성될 때 네이티브 Java 코드에 알림이 필요한 상황을 생각해 보십시오. 이러한 알림을 사용하기 위해 네이티브 코드는 프로그램 랩퍼 오브젝트의 addPropertyChangeListener 메소드를 호출하여 리스너로 등록됩니다. 이 경우 다음 상황 중 하나가 네이티브 코드가 런타임 시 알림을 수신하게 하는 PropertyChange 이벤트를 트리거합니다.
  • 네이티브 코드가 기본 유형의 매개변수에 대해 set 메소드를 호출함
  • 생성된 프로그램이 기본 유형의 매개변수에 변경된 데이터를 리턴함

PropertyChange 이벤트는 Oracle의 JavaBean 스펙에 설명되어 있습니다.

매개변수 랩퍼 클래스 세트

매개변수 랩퍼 클래스는 생성된 프로그램에서 매개변수(또는 입력 레코드)로 선언되는 각각의 레코드에 대해 생성됩니다. 일반적으로 다음 예제와 같이 매개변수를 참조하는 변수를 선언하기 위한 용도로만 매개변수 랩퍼 클래스를 사용합니다.
  Mypart myRecWrapperObject = myProgram.getMyrecord();

이 경우 프로그램 랩퍼 오브젝트에 의해 할당된 메모리를 사용합니다.

프로그램 오브젝트의 call 메소드(execute 메소드가 아님)를 호출하는 경우 필요에 따라 매개변수 랩퍼 클래스를 사용하여 메모리를 선언할 수도 있습니다.

매개변수 랩퍼 클래스에는 다음과 같은 개인용 인스턴스 변수 세트가 포함됩니다.
  • 각 매개변수의 하위 레벨 구조 필드(배열이 아니고 하위 구조화된 배열 내에 있지도 않은 구조 필드만 해당)에 대한 Java 기본 유형의 한 변수
  • 배열이지만 하위 구조화되지 않은 각각의 EGL 구조 필드에 대한 Java 기본 유형의 한 배열
  • 하위 구조화된 배열 내에 있지 않은 각각의 하위 구조화된 배열에 대한 내부 배열 클래스의 오브젝트(내부 클래스는 하위의 하위 구조화된 배열을 나타내는 중첩 내부 클래스를 가질 수 있음)
매개변수 랩퍼 클래스에는 몇몇 공용 메소드가 포함됩니다.
  • getset 메소드 세트를 사용하면 각각의 인스턴스 변수를 가져오고 설정할 수 있습니다. 각 메소드 이름의 형식은 다음과 같습니다.
      purposesiName()
    purpose
    get 또는 set라는 단어입니다.
    siName
    구조 필드의 이름입니다. 첫 번째 문자는 대문자이며 기타 문자의 측면은 Java 랩퍼 클래스의 이름 지정 규칙에 설명된 이름 지정 규칙에 의해 판별됩니다.
    참고: 채움 문자로 선언한 구조 필드는 프로그램 호출에 포함되어 있습니다. 하지만 배열 랩퍼 클래스에는 해당 구조 필드에 대한 공용 get 또는 set 메소드가 포함되어 있지 않습니다.
  • equals 메소드를 사용하면 동일한 클래스의 다른 오브젝트에 저장된 값이 매개변수 랩퍼 오브젝트에 저장된 값과 동일한지 판별할 수 있습니다. 이 메소드는 해당 클래스와 값이 동일한 경우에만 true를 리턴합니다.
  • addPropertyChangeListener 메소드는 프로그램이 Java 기본 유형의 변수에서 변경에 대한 알림을 요구하는 경우에 호출됩니다.
  • 두 번째 getset 메소드 세트를 사용하면 SQL 레코드 매개변수에서 각 구조 필드에 대한 널 표시기를 가져오고 설정할 수 있습니다. 이 메소드 이름 각각의 형식은 다음과 같습니다.
      purposesiNameNullIndicator()
    purpose
    get 또는 set라는 단어입니다.
    siName
    구조 필드의 이름입니다. 첫 번째 문자는 대문자이며 기타 문자의 측면은 Java 랩퍼 클래스의 이름 지정 규칙에 설명된 이름 지정 규칙에 의해 판별됩니다.

하위 구조화된 필드 배열 랩퍼 클래스 세트

하위 구조화된 필드 배열 랩퍼 클래스는 매개변수 클래스의 내부 클래스이며 관련 매개변수에서 하위 구조화된 배열을 나타냅니다. 하위 구조화된 필드 배열 랩퍼 클래스에는 배열 자체 또는 그 아래에 있는 구조 필드를 참조하는 개인용 인스턴스 변수 세트가 포함됩니다.
  • 각 배열의 하위 레벨 구조 필드(배열이 아니고 하위 구조화된 배열 내에 있지도 않은 구조 필드만 해당)에 대한 Java 기본 유형의 한 변수
  • 배열이지만 하위 구조화되지 않은 각각의 EGL 구조 필드에 대한 Java 기본 유형의 한 배열
  • 하위 구조화된 배열 내에 있지 않은 각각의 하위 구조화된 배열에 대한 내부 하위 구조화된 필드 배열 랩퍼 클래스의 오브젝트(내부 클래스는 하위의 하위 구조화된 배열을 나타내는 중첩 내부 클래스를 가질 수 있음)
하위 구조화된 필드 배열 랩퍼 클래스에는 다음과 같은 메소드가 포함됩니다.
  • 각 인스턴스 변수에 대한 getset 메소드 세트
    참고: 이름이 없는 채움 문자로 선언된 구조 필드는 프로그램 호출에서 사용되지만 하위 구조화된 필드 배열 랩퍼 클래스는 해당 구조 필드에 대한 공용 get 또는 set 메소드를 포함하지 않습니다.
  • equals 메소드를 사용하면 동일한 클래스의 다른 오브젝트에 저장된 값이 하위 구조화된 필드 배열 랩퍼 오브젝트에 저장된 값과 동일한지 판별할 수 있습니다. 이 메소드는 해당 클래스와 값이 동일한 경우에만 true를 리턴합니다.
  • addPropertyChangeListener(프로그램이 Java 기본 유형의 변수에서 변경에 대한 알림을 요구하는 경우 사용)
대부분의 경우 매개변수 랩퍼 클래스에서 맨 위에 있는 하위 구조화된 필드 배열 랩퍼 클래스 이름의 양식은 다음과 같습니다.
  ParameterClassname.ArrayClassName
예를 들어, 다음 레코드를 생각해 보십시오.
  Record CompanyPart type basicRecord
  10 Departments CHAR(20)[5];
     20 CountryCode CHAR(10);
     20 FunctionCode CHAR(10)[3];
        30 FunctionCategory CHAR(4);
        30 FunctionDetail CHAR(6);
  end 		

Company 매개변수가 CompanyPart를 기반으로 하는 경우 문자열 CompanyPart.Departments를 내부 클래스의 이름으로 사용합니다.

내부 클래스의 내부 클래스는 점이 있는 구문의 사용을 확장합니다. 이 예제에서는 CompanyPart.Departments.Functioncode 기호를 Departments의 내부 클래스의 이름으로 사용합니다.

하위 구조화된 필드 배열 랩퍼 클래스의 이름을 지정하는 방법에 대한 추가적인 세부사항은 Java 랩퍼 생성의 출력을 참조하십시오.

동적 배열 랩퍼 클래스

동적 배열 랩퍼 클래스는 생성된 프로그램에서 매개변수로 선언되는 각각의 동적 배열에 대해 생성됩니다. 다음 EGL 프로그램 서명을 생각해 보십시오.
  Program myProgram(intParms int[], recParms MyRec[])

동적 배열 랩퍼 클래스의 이름은 IntParmsArrayMyRecArray입니다.

다음 예제와 같이 동적 배열 랩퍼 클래스를 사용하여 동적 배열을 참조하는 변수를 선언합니다.
  IntParmsArray myIntArrayVar = myProgram.getIntParms();
  MyRecArray    myRecArrayVar = myProgram.getRecParms();

각 동적 배열에 대한 변수를 선언한 후 요소를 추가할 수 있습니다.

  // adding to an array of Java primitives 
  // is a one-step process
  myIntArrayVar.add(new Integer(5));

  // adding to an array of records or forms 
  // requires multiple steps; in this case, 
  // begin by allocating a new record object
  MyRec myLocalRec = (MyRec)myRecArrayVar.makeNewElement();
  
  // the steps to assign values are not shown 
  // in this example; but after you assign values, 
  // add the record to the array
  myRecArrayVar.add(myLocalRec);

  // next, run the program
  myProgram.execute();

  // when the program returns, you can determine 
  // the number of elements in the array
  int myIntArrayVarSize = myIntArrayVar.size();

  // get the first element of the integer array 
  // and cast it to an Integer object
  Integer firstIntElement = (Integer)myIntArrayVar.get(0);

  // get the second element of the record array
  // and cast it to a MyRec object
  MyRec secondRecElement = (MyRec)myRecArrayVar.get(1);

해당 예제에서 제안한 대로 EGL은 사용자가 선언한 변수를 조작하는 데 필요한 몇몇 메소드를 제공합니다.

동적 배열 클래스의 메소드 용도
add(int, Object) int에 의해 지정된 위치에서 오브젝트 삽입 및 현재 및 후속 요소를 오른쪽으로 이동
add(Object) 동적 배열의 끝에 오브젝트 추가
addAll(ArrayList) 동적 배열의 끝에 ArrayList 추가
get() 배열의 모든 요소가 포함된 ArrayList 오브젝트 검색
get(int) int에 의해 지정된 위치에 있는 요소 검색
makeNewElement() 배열 특정 유형의 새 요소를 동적 배열에 추가하지 않고 해당 요소 할당 및 검색
maxSize() 동적 배열의 최대(실제가 아님) 요소 수를 표시하는 정수 검색
remove(int) int에 의해 지정된 위치에 있는 요소 제거
set(ArrayList) 지정된 ArrayList를 동적 배열의 대체로 사용
set(int, Object) 지정된 오브젝트를 int에 의해 지정된 위치에 있는 요소의 대체로 사용
size() 동적 배열에 있는 요소의 수 검색
다음과 같은 경우에 예외가 발생합니다.
  • get 또는 set 메소드에서 올바르지 않은 색인을 지정하는 경우
  • 배열에 있는 각 요소의 클래스와 호환되지 않는 클래스의 요소를 추가(또는 설정)하는 경우
  • 배열의 최대 크기가 증가를 지원하지 않을 때 동적 배열에 요소를 추가하는 경우(이로 인해 addAll 메소드가 실패하면 이 메소드는 요소를 추가하지 않음)

Java 랩퍼 클래스의 이름 지정 규칙

EGL은 다음 규칙에 따라 이름을 작성합니다.
  • 이름이 모두 대문자인 경우 모든 문자를 소문자로 변환하십시오.
  • 이름이 키워드인 경우 이름 앞에 밑줄을 추가하십시오.
  • 이름에 하이픈 또는 밑줄이 있는 경우 해당 문자를 제거하고 다음 문자를 대문자로 변환하십시오.
  • 이름에 달러 표시($), at 기호(@) 또는 파운드 기호(#)가 있는 경우 각각의 해당 문자를 이중 밑줄(__)로 바꾸고 이름 앞에 밑줄(_)을 추가하십시오.
  • 이름이 클래스 이름으로 사용되는 경우 첫 번째 문자를 대문자로 변환하십시오.
다음과 같은 규칙이 동적 배열 랩퍼 클래스에 적용됩니다.
  • 대부분의 경우 클래스의 이름은 배열에 있는 각 요소의 기초인 파트 선언(데이터 항목, 양식 또는 레코드)의 이름을 기반으로 합니다. 예를 들어, 레코드 파트를 MyRec라고 하고 배열 선언을 recParms myRec[]라고 하는 경우 관련 동적 배열 랩퍼를 MyRecArray라고 합니다.
  • 배열이 관련 파트 선언이 없는 선언을 기반으로 하는 경우 동적 배열 클래스의 이름은 배열 이름을 기반으로 합니다. 예를 들어, 배열 선언이 intParms int[]인 경우 관련 동적 배열 랩퍼 클래스는 IntParmsArray라고 합니다.

데이터 유형 상호 참조

다음 표에는 생성된 프로그램의 EGL 기본 유형과 생성된 랩퍼의 Java 데이터 유형 간 관계가 표시됩니다.

EGL 기본 유형 문자 또는 숫자의 길이 바이트 길이 10진수 Java 데이터 유형 Java의 최대 정밀도
BIN, SMALLINT 4 2 0 short 4
BIN, INT 9 4 0 int 9
BIN, BIGINT 18 8 0 long 18
BIN 4 2 >0 float 4
BIN 9 4 >0 double 15
BIN 18 8 >0 double 15
BOOLEAN 1 1 NA Boolean NA
CHAR 1 - 32767 2 - 32766 NA String NA
DBCHAR 1 - 16383 1 - 32767 NA String NA
DATE 8 8 0 java.sql.Date NA
DECIMAL, MONEY, PACF 1 - 3 1 - 2 0 short 4
DECIMAL, MONEY, PACF 4 - 9 3 - 5 0 int 9
DECIMAL, MONEY, PACF 10 - 18 6 - 10 0 long 18
DECIMAL, MONEY, PACF 19 - 32 10 - 17 0 java.math.BigInteger 32
DECIMAL, MONEY, PACF 1 - 5 1 - 3 >0 float 6
DECIMAL, MONEY, PACF 7 - 18 4 - 10 >0 double 15
DECIMAL, MONEY, PACF 19 - 32 10 - 17 >0 java.math.BigDecimal 32
FLOAT 18 8 >0 double 15
HEX 2 - 75534 1 - 32767 NA byte[] NA
INTERVAL(월 또는 초 범위) 1 - 21 2 - 22 0 String NA
MBCHAR 1 - 32767 1 - 32767 NA String NA
NUM, NUMC 1 - 4 1 - 4 0 short 4
NUM, NUMC 5 - 9 5 - 9 0 int 9
NUM, NUMC 10 - 18 10 - 18 0 long 18
NUM, NUMC 19 - 32 19 - 32 0 java.math.BigInteger 32
NUM, NUMC 1 - 6 1 - 6 >0 float 6
NUM, NUMC 7 - 18 7 - 18 >0 double 15
NUM, NUMC 19 - 32 19 - 32 >0 java.math.BigDecimal 32
SMALLFLOAT 9 4 >0 float 6
STRING 1 - 16383 2 - 32766 NA String NA
TIME 6 6 0 java.sql.Time NA
TIMESTAMP 1 - 20 1 - 20 0 java.sql. Timestamp NA
UNICODE 1 - 16383 2 - 32766 NA String NA