1차원 배열 선언

정수형 : 0, 실수형 : 0.0, 객체형 : NULL 로 자동 초기화

  • 자료형[] 배열명 = new 자료형[개수]
  • 자료형 배열명[] = new 자료형[개수]

1차원 배열 초기화

  • 자료형[] 배열명 = new 자료형[] {~, ~, ~}
  • 자료형[] 배열명 = {~, ~, ~}

다차원 배열 선언

  • 자료형[][] 배열명 = new 자료형[개수][개수]

다차원 배열 초기화

  • 자료형[][] 배열명 = new 자료형[][] {~, ~, ~,{~, ~}}

배열 활용 향상된 for문

Book library[] = new Book[5];

library[0] = new Book("태백산맥1", "조정래");
library[1] = new Book("태백산맥2", "조정래");
library[2] = new Book("태백산맥3", "조정래");
library[3] = new Book("태백산맥4", "조정래");
library[4] = new Book("태백산맥5", "조정래");

//기본 for문
/*for(int i = 0; i < library.length; i++){
//            System.out.println(library[i]);
    library[i].showBookInfo();
}*/

//향상된 for문
for(Book book : library){
    book.showBookInfo();
}

ArrayList 클래스

자바에서 제공하는 객체 배열을 더 쉽게 사용하기 위한 클래스

  • 배열 길이 선언 후 요소를 더 추가하게 되면, 길이를 수정해줘야 하는 불편함 해소
  • 배열 중간에 추가 요소를 삽입 가능 기능 제공
  • 편리한 메소드 제공
public static void main(String[] args) {
  ArrayList<String> list = new ArrayList<String>();
  list.add("a");
  list.add("b");
  list.add("c");
  for(int i = 0; i < list.size(); i++){
      //ArrayList는 index 제공 X
      //.get() 사용
      System.out.println(list.get(i));
  }

  ArrayList<Book> library = new ArrayList<Book>();
  library.add(new Book("태백산맥1", "조정래"));
  library.add(new Book("태백산맥2", "조정래"));
  library.add(new Book("태백산맥3", "조정래"));
  for(Book book:library){
      book.showBookInfo();
  }
}

 

'JAVA' 카테고리의 다른 글

this, static  (0) 2022.11.26
객체지향-생성자, 접근제어자  (0) 2022.11.26
클래스, 인스턴스  (0) 2022.11.26
자바프로그래밍 시작하기  (0) 2022.11.26

this

  • 자기 자신의 메모리를 카리킴(this를 리턴하면 주소값 출력 = 인스턴스와 this 가 동일)
MyDate mydate = new MyDate();

public MyDate(int day){
	this.day = day;
}

>>> this.day = mydate.day 역할을 한다
  • 생성자 오버로딩 : 다른 생성자를 생성 이 전에 해당 생성자의 다른 메소드 호출, 변수 초기화 등은 불가능. this 로 생성자 오버로딩 이후에는 가능
public Person() {
  this("이름없음", "주소없음");
}
  • 자기 자신을 반환할 때
public Person showResult(){
    return this;
}
>>> 인스턴스와 동일한 역할로, 주소값 반환

static

다양한 인스턴스가 공유할 변수의 타입 (↔ 인스턴스 변수 : 인스턴스 별 가지고 있는 변수)

  • 객체 생성할 필요 없이 사용 가능
  • 인스턴스 생성과 상관 없이 클래스가 메모리에 로드될 때 생성
  • static 메소드에서는 인스턴스 변수를 사용할 수 없다(인스턴스 변수는 객체가 생성될 때 생성되기 때문)
package staticex;

public class Card {
    static int serialNum = 1000;
    int cardNumber;

    public Card() {
        serialNum++;
        cardNumber = serialNum;
    }
}
package staticex;

public class CardTest {
    public static void main(String[] args) {

        System.out.println(Card.serialNum);

        Card cardLee = new Card();
        System.out.println(cardLee.cardNumber);

        Card cardKim = new Card();
        System.out.println(cardKim .cardNumber);

        System.out.println(cardLee.serialNum);
        System.out.println(cardKim.serialNum);
    }
}

 

'JAVA' 카테고리의 다른 글

Array, ArrayList  (0) 2022.11.26
객체지향-생성자, 접근제어자  (0) 2022.11.26
클래스, 인스턴스  (0) 2022.11.26
자바프로그래밍 시작하기  (0) 2022.11.26

생성자

클래스를 인스턴스로 만들 때 호출

Person person1 = new Person(); // Person() > 생성자
  • 클래스 내부에 생성자를 구현 안해도, 컴파일러가 자동으로 기본생성자를 구현(1개 클래스에 1개 이상 생성자)
  • public Person(){} //기본생성자
  • 생성자명 = 클래스명
  • 메서드가 아니고, 객체를 생성할 때만 호출
  • 상속 불가능, return 없음
  • 접근제어자 클래스명 ([[매개변수]) { 초기화 할 로직 }

생성자 example

package classexample;

public class Person {

    int height;
    int weight;
    String name;

    public Person() {}

    public Person(String pName) {
        name = pName;
    }

    public Person(int pHeight, int pWeight, String pName) {
        height = pHeight;
        weight = pWeight;
        name = pName;
    }

    public String showPersonInfo(){
         return name + "," + height + "," + weight;
    }
}
package classexample;

public class PersonTest {
    public static void main(String[] args) {
        Person personLee = new Person();
        personLee.height = 180;
        personLee.weight = 80;
        personLee.name = "이정하";
        System.out.println(personLee.showPersonInfo());

        Person personKim = new Person("김정은");
        personKim.height = 160;
        personKim.weight = 50;
        System.out.println(personKim.showPersonInfo());

        Person personPark = new Person(170, 90, "박은정");
        System.out.println(personPark.showPersonInfo());

        System.out.println(personLee);
        System.out.println(personKim);
        System.out.println(personPark);

    }
}

접근제어자

  • public : 외부 모든 클래스에서 접근 가능
  • default(default 값) : 동일 패키지 내 접근 가능
  • private : 현재 클래스 내에서만 사용 가능(이외 어떤 외부 클래스 접근 불가능) = 정보은닉 구현
  • protected : 다른 패키지의 하위 클래스까지 가능

정보은닉

private 접근제어자로 객체 생성 시 정보를 감추는 것

  • 정보은닉 구현된 변수에 값을 넣는 방법 생성자에서 매개변수 넘겨서 매개변수를 통해 초기화
  • 외부에서 변경 및 조회는 별도 메서드 구현으로 가능(getter, setter)→ 중요 변수들을 외부에서 조작할 수 없도록 한다
  • → 세부 내용/로직을 내부적으로 조작할 수 있다

'JAVA' 카테고리의 다른 글

Array, ArrayList  (0) 2022.11.26
this, static  (0) 2022.11.26
클래스, 인스턴스  (0) 2022.11.26
자바프로그래밍 시작하기  (0) 2022.11.26

변수

  • 기본 자료형 : boolean, int, byte, float …
  • 참조 자료형 :
    • JDK 제공 클래스 : String …
    • 직접 구현 클래스로 선언된 변수

클래스

객체지향프로그래밍의 가장 기본 단위, 하나의 객체를 표현하는 단위

  • 멤버변수(속성, property), 메서드로 구성
    • 멤버변수 : 클래스로 선언한 변수 > [접근제어자] 자료형 변수명;
    • 메서드 : 접근제어자 리턴타입 메서드명(){}
  • 이름은 대문자로 시작(패키지명은 소문자)
  • 1개 java 파일에 1개 클래스가 원칙 예외) 여러개 클래스 필요 시, public 클래스는 단 한 개만 존재(클래스명은 파일명과 일치)
  • java 모든 코드는 클래스 내부에 존재
  • 클래스를 사용하기 위해서는 생성자 활용

public void vs public static void

  • static : 특정 인스턴스 (객체)가 아니라 클래스와 연결되어 있음을 의미, 클래스의 객체를 만들지 않고 정적 메서드 자체로 호출

클래스가 지원하는 OOP(객체지향 프로그래밍) 특성

  • 캡슐화
  • 상속
  • 다형성

인스턴스

클래스를 new 로 생성해서 만든 것 (static → dynamic)

용어 정리

  • 클래스 : 객체를 프로그래밍 하기 위해 코드로 만든 상태
  • 인스턴스 : 클래스가 메모링 생성된 상태
  • 객체 : 생성된 인스턴스, 객체지향 프로그램의 대상
  • 멤버변수 : 클래스의 속성, 특성
  • 메서드 : 멤버변수로 클래스 기능을 구현
  • 참조변수 : 메모리에 생성된 인스턴스를 가리키는 변수
  • 참조값 : 생성된 인스턴스의 메모리 주소값

'JAVA' 카테고리의 다른 글

Array, ArrayList  (0) 2022.11.26
this, static  (0) 2022.11.26
객체지향-생성자, 접근제어자  (0) 2022.11.26
자바프로그래밍 시작하기  (0) 2022.11.26
  • Java Code(.java) > javac 컴파일러 (=JDK) > Java Code(.class)
  • .java 저장 시 자동으로 컴파일 수행(.class 가 .java 와 동일한 경로로 생성)
  • Java Code(.class) 만으로는 바로 실행 불가 JVM 위에서 실행 가능(자바 작동 위한 필수 환경)

  • C언어는 os마다 컴파일러, 실행파일이 다른데 java는 동일하다는 특징 → java : 디바이스에 독립적이라는 장점

java 기본 세팅

  • JDK : 기본 클래스 포함된 java 라이브러리 (컴파일러 포함)
  • JRE : java 가상 머신 (실행 시키기 위해 필요, JVM 포함)

'JAVA' 카테고리의 다른 글

Array, ArrayList  (0) 2022.11.26
this, static  (0) 2022.11.26
객체지향-생성자, 접근제어자  (0) 2022.11.26
클래스, 인스턴스  (0) 2022.11.26

SAP 프로그램 실행 시 기본 프로세스를 정리해보았다.

 

EVENT 흐름

AT SELECTION-SCREEN -> INITIALIZATION -> AT SELECTION-SCREEN OUTPUT -> AT SELECTION-SCREEN [ON] [VALUE-REQUEST FOR] -> START-OF-SELECTION -> END-OF-SELECTION

 

1. AT SELECTION-SCREEN
실행조건 입력받는 화면으로, PARAMETER/SELECT-OPTION으로 값 입력

 

2. INITIALIZATION
PARAMETER/SELECT-OPTION 초기값 세팅으로, 프로그램 실행되는 순간 AT SELECTION-SCREEN 직전에 실행

 

3. AT SELECTION-SCREEN OUTPUT
선택한 화면 수정

 

4. AT SELECTION-SCREEN [ON] [VALUE-REQUEST FOR]
변수 및 레이아웃 등의 값을 미리 입력할 수 있는 구문으로, 원하는 필드에 Search Help 설치

 

5. START-OF-SELECTION
실행(F8) 시 SELECTION-SCREEN 구동하기 위한 구문으로, 명시하지 않으면 모든 코드가 속하게 되는 이벤트 블록
프로그램의 메인으로, 로직 구현부 시작 명시

 

6. END-OF-SELECTION
화면 종료 구문

 

구현 예시

'SAP > ABAP' 카테고리의 다른 글

[ABAP] Internal Table 선언  (0) 2021.12.02

SD(Sales and Distribution, 영업) 프로세스에서 발생되는 문서에 대해 정리해보았다.

 

SD 문서 생성 프로세스

S/O -> D/O -> G/I -> [Billing Due] -> Billing

 

S/O(Sales Order, 주문)

주문유형, 고객, 자재, 수량 필수

- T-code

VA01~VA03

- Table

Header : 고객정보, 계좌정보 등 주문 관련 정보 - VBAK
Item : 해당 주문 별 제품 정보 - VBAP
Schedule Line : 배송 정보 - VBEP

- 용어

Sold-to party : 구매처
Ship-to party : 배송받을 곳(인도처)
Bill-to party : 청구처(세금계산서 발행 대상)
Payer : 지급처(실제 돈 지불 대상)

 

D/O(Outbound Delivery, 출고지시)

S/O의 Shipping point, Delivery date, Ship-to party에 따라 N:N 관계
1개의 주문에도 제품 별 위의 값이 상이하면 여러 D/O 생성
D/O가 생성되면 Delivery note(거래명세서 등)이 생성되어 물류센터 직원이 확인 후 물건 이동

- T-code

VI01~03

- Table

Header : 인도처 고객정보, 출하일정정보 등 - LIKP
Item : 제품 정보 - LIPS

 

G/I(Posting Goods Issue, 납품/출고)

실제 공장에서의 재고 데이터가 변하는 시점
G/I 이후의 문서는 단순 변경/삭제 등 불가능

- T-code

VI01~03

- Table

Billing Header에 G/I 문서 번호 포함 - VBRP

 

Billing

- T-code

VF01~VF03

- Table

Header - VBRK
Item - VBRP

 

ABAP 개발을 하다보니, Internal Table을 선언하는 문법(구문, 방식)을 다양하게 접하며 헷갈리기 시작했다.
그래서 크게 2가지의 경우로 정리해보았다.

  1. 실제 DB 기반 Internal Table 선언
  2. 개발자가 필요한 컬럼들로 구성한 Internal Table 선언

먼저 Internal Table의 기본 정의와 종류에 대해서 설명한 후 선언 방식을 정리하였다.

- Internal Table 이란?

DB의 데이터에 접근 및 조작할 때, Local 메모리 영역에 담아두어 사용하는 것
매번 DB에 직접적으로 접근하지 않아도 되어 부하를 줄일 수 있다.

- Internal Table 종류

  • Standard Table 
    : 순차적으로 Index를 가지는 테이블로 Index로 조작할 수 있다.
      Key는 항상 non-unique
  • Sorted Table
    : Key로 자동 정렬되며 Index와 Key로 조작할 수 있다. 
      Key에 WITH UNIQUE 사용 가능
      SORT 명령어 사용 불가능
      INSERT는 사용 가능하나 APPEND는 불가능
  • Hashed Table
    : Index가 없어서 READ TABLE ~ INDEX 구문 사용 불가능
      Hash로 계산된 Key값으로 조회할 수 있어, READ TABLE ~ WITH [TABLE] KEY 구문 사용 가능
      반드시 Unique하게 선언되어야 한다.

- 실제 DB 기반 Internal Table 선언

#1
(internal) LIKE TABLE OF (DB) WITH HEADER LINE.
#2
(internal) LIKE (DB) OCCURS 0 WITH HEADER LINE.
  • LIKE TABLE OF 과 OCCURS 0 동시 사용 불가능
    : OCCURS 0 -> 메모리 제한을 두지 않겠다는 것(무한대)
  • WITH HEADER LINE 
    : Header(Work Area)를 생성할 때 사용하며, 대부분 사용하는 것이 더 편하다.

    # WITH HEADER LINE 사용하는 경우(가공 필요X)
    LOOP AT (internal) ~ ENDLOOP.
    # LOOP를 돌면서 Header가 자동으로 올라와서 반복문 바로 수행

    # WITH HEADER LINE 사용하지 않는 경우(가공 필요O)
    LOOP AT (internal) INTO (struct) ~ ENDLOOP.
    # LOOP를 돌면서 한 line씩 structure에 넣어서 반복문 수행

 

- 개발자가 필요한 컬럼들로 구성한 Internal Table 선언

#1
DATA : BEGIN OF (struct),
              (val1) LIKE (table1-val1),
              (val2) LIKE (table2-val2),
          ENDOF (struct),
      
(internal) LIKE TABLE OF (struct) [WITH HEADER LINE].
#2
DATA : BEGIN OF (struct),
              (val1) LIKE (table1-val1),
              (val2) LIKE (table2-val2),
         ENDOF (struct),
       
 (internal) LIKE (struct) OCCURS 0 [WITH HEADER LINE].
  • #1, #2 : structure를 생성 후 위의 <실제 DB 기반 Internal Table 선언>과 같이 internal table 선언
#3
DATA : BEGIN OF (internal) OCCURS 0,
              (val1) LIKE (table1-val1),
              (val2) LIKE (table2-val2),
         ENDOF (internal),
  • structure와 internal table 구분하지 않고 선언하는 방식으로, 테이블 구조 선언 부에 OCCURS 0 을 사용한다.

'SAP > ABAP' 카테고리의 다른 글

[ABAP] EVENT 구문  (0) 2021.12.27

+ Recent posts