SAP/Complete ABAP

8.2 Principles of OOP

Radler 2023. 2. 5. 18:23

클래스는 객체들의 청사진 역할을 한다. 


Static 컴포넌트는 특정 객체없이 클래스명으로 바로 접근가능하다. 어떤 객체가 접근하든 똑같은 값에 접근하게 된다. 
Instace 컴포넌트는 각각의 객체에 의해 접근되어질 수 있으며, 각각의 메모리 공간에 컴포넌트가 저장되게 된다. 


컴포넌트들은 Public/Protected/Private 중 한 곳에 속하게된다. 
Public : 다른 클래스뿐만이 아니라 어떠한 프로그램/객체에서도 접근이 가능하다. 
Protected :  자기 클래스 또는 자기 클래스의 Subclass 에서만 접근이 가능하다 .
Private : 오직 자기 클래스 내부 또는 Friend 관계의 클래스에서만 접근할 수 있다. 

Public 섹션에서의 Data statement 와 함께 read-only 구문을 쓰면, 외부 환경(시스템, 프로그램, 클래스)에서 읽기만 가능하고, 변경은 불가능해진다. 

*권고사항
attribute는 사실 private section에서만 선언해주어, 외부에서의 직접적인 접근을 막는 대신, 
getter/setter 메서드를 public section에 선언해주어, 외부접근을 허용하는 게 정석이다. 

같은 클래스 내의 컴포넌트에 접근할 때, 자기 참조 변수인 'me'사용 권장.

Instance 컴포넌트는 각각의 객체마다 존재할 수 있으며, '->'라는 selector를 통해 호출한다.
여기서 '존재'한다라는 것은 개별 '메모리를 가지고 있다'는 것이며, instacne 컴포넌트는 개별 객체내에서 자기만의 메모리와 값을 부여받는다.


Static 컴포넌트는 하나의 클래스에만 존재할 수 있으며, 각각의 객체에서 visible하다. '=>'라는 selector를 통해 호출한다.
오직 클래스에서만 유일하게 '존재'할 수 있으므로, 클래스 내에서 단 '하나의 메모리 공간'을 가지며, 복수의 객체들은 단일한 메모리 주소와 값을 참조할 수 밖에 없다. 
 prefix 'class-'로 선언할 수 있다. (예, class-data, class-methods, class-event 등)

Functional Method
Returning 파라미터(Passed by valeu)가 있는 메서드를 의미하는데 이 때, Exporting 파라미터를 사용할 수 없다. 
하지만 Importing 파라미터는 복수 사용가능하다. 
Functional Method는 여러 expression에서 사용가능( IF, CHECK, LOOP, CASE 등 )

Static method는 static component들만 접근 가능
Instance method는 static과 instance component 둘 다 접근 가능

Garbage Collector
Object가 참조하고 있는 참조객체가 더 이상 pointing 되지 않을 경우, Garbage Colletor가 자동으로 해당 Object를 메모리에서 지워버린다. 
r_car1/r_car2가 객체로 각각 생성되었다고 하자.
r_car2가 r_car1에 assign되었다면, r_car1은 참조하고 있던 참조 객체는 사라진다. 

 

Constructor

Static으로 1개, Instance로 1개만 선언할 수 있으면, optional하다.
Public Section에만 선언할 수 있으며, cloass_constructor/constructor 라는 이름만으로 선언할 수 있으며, 프로그램에서 explicit하게 call할 수 없다. 
리포트 프로그램의 initialization 역할을 한다. 
Instance Constructor는 importing과 exceptions 만을 가질 수 있으며, object가 instanciated할 때, 한 번 실행된다.
Static Constructor는 어떠한 파라미터도 가질 수 없다. 프로그램 당, 한 번 실행된다.