BC401-1 (오전)

Beemajor·2024년 8월 12일
REPORT zr5a12201.

CLASS lcl_std DEFINITION.
  PUBLIC SECTION.
    DATA stdno TYPE char10.
ENDCLASS.

DATA go_std TYPE REF TO lcl_std.

START-OF-SELECTION.

  CREATE OBJECT go_std.
  go_std->stdno = '2024010001'.
  
  " 아래랑 위랑 다른놈임.
  CREATE OBJECT go_std.
  go_std->stdno = '2024010001'.

class 정의하고 객체변수 만들고 객체를 지정해주면 사용가능
value 자체를 class에 넣어줄 수 없음.
객체변수는 하나의 객체만 연결될 수 있고 다시 선언하면 새로운 놈을 선언하는거임.


Data go_std type ref to lcl_std. 를 쓴 뒤
DATA go_std2 LIKE go_std. 를 통해 객체변수를 배낄 수 있다.
new 문법을 사용하면 객체 변수와 객체를 한 줄에서 동시에 정의할 수 있습니다.
CREATE OBJECT 문법을 사용하면 객체 변수를 먼저 선언하고,
나중에 객체를 생성해야 하지만, new를 사용하면
객체 변수 선언과 객체 생성을 동시에 할 수 있습니다.

go_std2 = go_std. "Casting
CLEAR go_std->stdno.
WRITE go_std2->stdno.

위의 코드를 실행하는 경우
go_std2의 stdno가 출력되지 않는다. (아무것도 실행이 안된다.)
go_std2 = go_std. 의 뜻이
go_std가 가르키고 있는 걸 go_std2도 가르킨다는 뜻이기 때문이다.
즉, go_std가 참조하고 있는 객체를 go_std2도 같이 참조한다는 뜻이다.

go_std2 = go_std. "Casting
CLEAR go_std.
WRITE go_std2->stdno.

위의 코드를 실행하는 경우
go_std2의 stdno가 go_std의 stdno로 출력된다.
clear go_std의 뜻이 go_std가 참조하는 객체의 경로를 지우는 것이다.
go_std2의 참조 경로는 살아 있기 때문에 지워지지 않는다.

Casting한다 = 한 객체를 여러개의 참조하는 것.

DATA go_std TYPE REF TO lcl_std.
DATA go_std2 LIKE go_std.

START-OF-SELECTION.
  CREATE OBJECT go_std.
  go_std->stdno = '2024010001'.
  go_std2 = go_std.
  CREATE OBJECT go_std.
  go_std->stdno = '2024019999'.

  go_std = go_std2.
  WRITE: go_std->stdno.
  WRITE: go_std2->stdno.

심화문제를 풀어보세용.

자! 정리해보자면
.
DATA go_std TYPE REF TO lcl_std.는 객체변수를 만드는 것이고,
CREATE OBJECT go_std. 는 객체를 참조할 수 있도록 경로를 설정하는 것이다.
CREATE OBJECT go_std. 를 다시 선언하면 기존의 경로를 버리고 새로운 경로를 만든다.
이때 객체를 아무도 참조하지 않는 경우 사라진다.
go_std->stdno = '2024010001'. 이런식으로 속성의 value를 설정해준다.
.
clear go_std->stdno. 는 go_std의 stdno value를 지운다는 뜻이다.
clear go_std. 는 go_std의 참조 경로를 지운다는 뜻이다.


CLASS lcl_std DEFINITION.

  PUBLIC SECTION.
    DATA: stdno TYPE char10.
    CLASS-DATA: std_cnt TYPE i.
ENDCLASS.
DATA: go_std1 TYPE REF TO lcl_std,
      go_std2 TYPE REF TO lcl_std.

START-OF-SELECTION.
  CREATE OBJECT go_std1.
  CREATE OBJECT go_std2.
*  go_std2->std_cnt = 2.
  lcl_std=>std_cnt = 2.
  WRITE go_std1->std_cnt.

CLASS-DATA: std_cnt TYPE i.는 class 영역에 들어가는 class의 특성을 넣어준다는 뜻임.
go_std2->std_cnt = 2. 와 lcl_std=>std_cnt = 2. 는 같은 뜻임.
하지만 lcl_std=>std_cnt = 2. 이게 더 좋은 표현임.

static attribute = class 영역에 있는 class의 특성이라는 뜻
intance attribute = class 영역에 있는 object의 특성이라는 뜻
class 영역은 class를 정의하자마자 생기는 것이 아니다.
프로그램을 실행하여야 생긴다.
즉 class정의와 class영역은 같은 놈으로 보면 안된다.

profile
i'm Graphic Designer

0개의 댓글