Skip to content

{ Tag Archives } ABAP

assert

종종 assert를 쓸까 말까 고민할 때가 있다. 아래 내용을 늘 기억하도록. if 문을 써서 프로그램을 exit 해도 되지만 왜 그렇게 되었는지는 assert를 쓰는 것이 더 명확하다. (NetWeaver에서는 Dump 화면과 똑같이 보이기 때문에 좀 시껍하긴 하다) debugger를 통해서도 오류를 알 수 있지만 assert를 쓰면 문제가 발생한 시점과 원인을 명확히 드러낼 수 있다. 많이 써도 성능에는 상관없다. [...]

Also tagged , ,

Event handing in ABAP Object

아래는 SAP Help에서 가져온 예제이다. *&———————————————————————* *& Report ZP_DEMO_CLASS_CNT_EVENT *&———————————————————————* REPORT zp_demo_class_cnt_event. *———————————————————————-* * CLASS counter DEFINITION *———————————————————————-* CLASS counter DEFINITION. PUBLIC SECTION. METHODS increment_counter. EVENTS critical_value EXPORTING value(excess) TYPE i. PRIVATE SECTION. DATA: count TYPE i, threshold TYPE i VALUE 10. ENDCLASS. “counter DEFINITION *———————————————————————-* * CLASS counter IMPLEMENTATION *———————————————————————-* CLASS counter IMPLEMENTATION. METHOD [...]

Also tagged

Package example in ABAP, 두번째

지난 번과는 반대로, subpackage가 superpackage의 object를 억세스하려 할 경우를 생각해보자. SE80 open. 먼저 subpackage와 superpackage 양쪽에 Package Interface가 있나 확인해보자. 없으면 만들자. superpackage의 Package Interface를 더블 클릭. 두 개의 탭이 나오는데 ‘Exposed Objects’를 클릭, 노출할 object를 추가한다. (드래그 앤 드롭으로 쉽게 된다) 다음에 바로 옆의 탭인 ‘Attributes’ 클릭. 하단에 ‘Visible for subpackages’에 체크한다. subpackage 이름을 [...]

Also tagged ,

The Iterator Pattern (in ABAP)

Iterator를 사용해서 구현과는 분리하여 하나 하나 요소들을 셀 수 있다. 아래 소스를 보면 loop를 돌 때 Iterator의 메소드만 이용하고 있으며 Aggregate 클래스가 어떤 식으로 구현되어 있는가 – 배열이든, 벡터든, Internal Table이든 – 는 상관없다. 즉 나중에 Aggregate의 요소 관리 방식을 얼마든지 바꿀 수 있다는 이야기. 이를 위해 아래와 같은 것들이 필요하다. Iterator 인터페이스. Aggregate 인터페이스. [...]

Also tagged , ,

Defining Exception Classes

모든 exception class는 아래 3가지 class들 중 하나의 subclass가 되어야 한다. 이 3개의 class들은 CX_ROOT로부터 파생된 것이지만, 내가 직접 CX_ROOT로부터 파생된 class를 만들어 사용할 수는 없다. CX_STATIC_CHECK CX_DYNAMIC_CHECK CX_NO_CHECK 언제 어떤 것을 사용하느냐 – 를 생각해보자. 약간씩 틀리긴 하다. Subclasses of CX_STATIC_CHECK The relevant exception must either be handled, or propagated explicitly using the RAISING [...]

Also tagged

The Factory Method Pattern (in ABAP)

Factory의 요점은 다음과 같다. ‘Product를 만드는 것’과 ‘등록’의 구현은 하위 클래스에서 수행한다. (new를 사용해서) 실제의 인스턴스를 생성하는 대신에 인스턴스 생성을 위한 메소드를 호출함으로서(create_product) 구체적인 클래스명에 의한 속박에서 벗어나고 있다. Framework 쪽: ZCL_FACTORY class ZCL_FACTORY definition public abstract create public . public section. *”* public components of class ZCL_FACTORY *”* do not include other source files [...]

Also tagged , ,

Package example in ABAP

먼저 TEST_FRAMEWORK.ZCL_PRODUCT를 상속받는 TEST_IDCARD.ZCL_IDCARD를 컴파일하면 서로 다른 Package로 인한 경고를 받게 된다. 일단 TEST_IDCARD의 억세스를 가능하게 하기 위해 TEST_FRAMEWORK 쪽에서 인터페이스를 만들어주어야 한다. ZPIF_TEST_FRAMEWORK란 Package Interface를 만들어주고 대외적으로 오픈할 object – 여기서는 ZCL_PRODUCT와 ZCL_FACTORY – 를 추가해준다. 이때 Derive subclasses 부분도 ‘Allow Usage’ 체크를 해주어야 한다. TEST_IDCARD의 DCL(Dependency Control List)를 연다. (SE80로 가서 해당 class를 [...]

Also tagged ,

The Adapter Pattern (in ABAP)

(HFDP에서) Duck의 object가 부족해서 Turkey의 object를 이용하려고 한다… 라는 이상한 상황을 가정하고 있다. 보통 기존 모듈이 새로운 모듈을 이용하려고 하나 서로 interface가 맞지 않을때 – 구체적으로, 한 클라이언트가 다른 object의 method를 이용하고 싶지만 기존 보유한 method를 바꾸고 싶진 않다(또는 바꿀 수 없다) 할 때… 같은 있음직한 상황을 예로 든다만. 어쨌건 이 경우 Duck은 client, Turkey는 [...]

Also tagged , , ,

Inner Join, Outer Join, FOR ALL ENTRIES IN

Inner Join, Outer Join, 그리고 독특한 Open SQL 문법인 FOR ALL ENTRIES IN 까지. 정리가 잘 안 되어서(특히 performance 입장에서) 여러 문서를 찾아다녀 보았다. 아래는 그에 대한 간단한 정리. database view는 inner join을 이용한다. 즉 database view는 모든 table에 공통적으로 있는 records만 제공한다. help views와 maintenance views는 outer join을 이용한다. INNER JOIN 과 FOR ALL [...]

Also tagged , ,

TIOBE Programming Community Index

TIOBE Programming Community Index 가기 어떤 Programming Language가 가장 인기있는가를 보여주는 index 입니다. 제가 매일 사용하는 ABAP의 경우 순위가 가장 많이 떨어졌네요. 20위. 얼마전 시작한 Haskell의 순위는 36위. 헐… 하지만 저에겐 언제나 흥미로운 언어인 C++와 Python은 각각 3위와 6위를 차지하고 있네요. all-time-favorite인 C는 부동의 2위를 차지하고 있고.

Also tagged , , ,