본문 바로가기

ABAP 프로그래밍 개념/Object-Oriented ABAP

OBJECT(객체)란?

Object(객체)란? 앞선 글에서 말했듯이 "객체는 클래스의 인스턴스를 의미"한다.

 

객체는 자신의 고유한 이름과 속성을 가지며 클래스가 생성할 수 있는 객체의 수는 무한하다(정해져있지 않다).

 

클래스 [CLASS 1]
▪속성
▪메소드 구현
왼쪽의 [CLASS 1]을 통해 우측처럼 Class Instance를 여러개 만들 수 있다. ABAP 프로그램의 내부 선언
Class Instance 1 -> 속성 / 메소드
Class Instance 2 -> 속성 / 메소드
Class Instance 3 -> 속성 / 메소드

Object Reference(객체참조)


ABAP 프로그램에서 객체에 접근하려면 “객체 참조”를 사용해야 한다.

객체 참조는 객체에 대한 포인터로 정의되며 ABAP에서 객체 참조는 항상 객체 참조 변수 내에 존재하게 된다.

 

 

Object Reference Variable(객체 참조 변수)

ABAP에는 Reference를 포함할 수 있는 두 가지 타입의 변수가 존재

1.객체 참조 변수
2.
데이터 참조 변수(Data Reference Variable)

데이터 참조 변수는 객체 참조 변수와 기본 개념은 같다.(Easy ABAP을 본다면 10장 참고 - 추후 정리해서 올릴 예정)

 

객체 참조 변수는 객체를 참고하는 Reference(참조) 포함하며 다음 구문을 이용하여 생성한다.

 

DATA cref TYPE REF TO class

 

 

▪"객체 참조 변수이미 존재하는 객체를 참고하거나 초기화 할 수 있다.

객체를 가리키는 참조 변수가 객체의 실체를 알고 있으며, 클래스의 인스턴스는 객체를 가리키는 참조 변수를 사용하여 주소를 지정 가능

 

객체 참조 변수를 이용하는 객체들은 객체에 직접 접근할 수 없으며, Reference(객체의 주소)를 이용해야 함.

ABAPStructure인터널 테이블에 사용되는 데이터 타입과 유사하게, 참조 변수를 위해 이미 정의된 데이터 타입이 존재. -> 여기에는 class referenceInterface Reference 두 가지 객체 참조 타입이 존재.

 

모든 변수와 마찬가지로 객체 참조 변수를 CLEAR 구문으로 초기화할 수 있다.

객체 참조 변수의 초기값은 객체가 참고하는 데이터 타입과 연결되지는 않는다.


Object 생성


클래스를 참조하는 cref라는 객체 참조 변수를 생성하였다면, 이 참조 변수를 이용하여 클래스의 인스턴스인 객체를 생성”

 

예외적으로,

DATA : l_ref TYPE REF TO OBJECT. 구문과 같이 최상위 클래스 OBJECT를 참조하는 변수 l_ref를 생성하였다면,

인스턴스 생성시 CREATE OBJECT l_ref TYPE class.와 같이 선언하여야한다.

 

CREATE OBJECT cref [TYPE class].


Object Component 접근


객체의 속성(Attribute)과 메서드(Method)에 접근하기 위해

1.ref->attribute 구문

또는

2.CALL METHOD ref->method 구문을 사용한다.

ref->method 구문은 CALL METHOD ref->method 구문의 축약형이다. (4.6버전 이후 메서드의 축약형을 사용가능)

 

또한, 객체가 생성되기 이전에 클래스의 Static 컴포넌트(속성과 메서드)에 접근할 수도 있다.

Static 속성(attribute)에 접근하려면 class=>attribute 구문을 사용하고,

Static 메서드는 CALL METHOD Class=>method 구문을 이용한다.

(Static에 접근할때는 =>을 사용)

 

<General Object> <Static Object>
cref -> attribute class=>attribute
CALL METHOD cref- > method CALL METHOD class=>method

 


클래스에서 하나 이상의 인스턴스 생성


 

▪위에서 봤듯이 CREATE OBJECT 구문을 이용하여 새로운 객체를 생성할 수 있다.

프로그램 내에서 같은 클래스로부터 무한한 객체를 생성할 수 있으며, 객체들은 서로 완전히 독립적으로 행동하며 프로그램 내에서 각자의 이름과 속성을 가진다.

 

<객체 참조 할당>

▪MOVE 구문을 이용하여 다른 참조 변수에 Reference를 할당할 수 있다. 같은 객체에 연결된 객체 참조 변수 내에 Reference를 생성할 수 있으며 MOVE 구문을 사용하거나 할당기호(=)를 사용할 때 시스템은 할당할 수 있는 타입인지 자동으로 체크한다.

 

1.cref1 = cref2 MOVE

2.cref2 TO cref2

 

위 두가지 예시를 사용하려면 두 개의 클래스는 같은 타입이어야 한다. , 같은 클래스를 참고해야 한다는 의미이다.

 

예시.

*Class Declarations
CLASS cls DEFINITION INHERITING FROM object.
	PUBLIC SECTION.
    	METHODS: create.
ENDCLASS.

*Class IMPLEMENTATIONs
CLASS cls IMPLEMENTATION.
	METHOD create.
    	WRITE: / 'Object is Created'.
    ENDMETHOD.
    
*GLOBAL DATA
DATA : go_obj1 TYPE REF TO cls,
	   go_obj2 TYPE REF TO cls.
       
*Classical Processing Blocks
START-OF-SELECTION.
	CREATE OBJECT : go_obj1.
    go_obj2 = go_obj1.
    
 CALL METHOD : go_obj2->create.

위 예시는 cls라는 클래스로 go_obj1이라는 객체를 생성하였다. CREATE OBJECT 구문으로 go_obj2 객체는 생성하지 않았지만, go_obj2 = go_obj1 구문을 통해 객체가 생성되었다.

(go_obj1는 cls라는 클래스의 인스턴스이며, 참고하는 클래스 타입이 같기 때문에 go_obj2 = go_obj1 구문을 통해 객체를 생성할 수 있다.

 

 

<CASTING>

casting 기호(?)를 이용해 서로 다른 클래스에서 파생된 객체를 참고하여 또 다른 객체를 생성할 수 있다.

->이때 다른 클래스는 부모 클래스와 부모 클래스를 상속받은 자식 클래스등과 같이 다른 타입을 의미.

-> 자식 클래스는 부모가 가진 속성과 메서드를 재정의하거나 추가 가능

->부모에서 파생된 객체와 자식에서 파생된 객체 타입은 같이 않더라도, 이때는 casting 기호(?)를 이용해 프로그램을 에러없이 실행 가능

 

 

 

반응형

'ABAP 프로그래밍 개념 > Object-Oriented ABAP' 카테고리의 다른 글

Object Oriented 언어로서의 ABAP  (0) 2023.01.01
METHOD  (0) 2020.08.15
CLASS [2] 구성요소  (0) 2020.08.05
CLASS [1]  (0) 2020.08.04
클래스와 객체의 관계 & 클래스와 인스턴스  (1) 2020.08.04