Back-End/Java

[Java] static 변수 - 주문번호 순서표 만들어보기

nanee_ 2021. 9. 6. 23:23
728x90
반응형
SMALL

정적 변수 (static 변수)

: 인스턴스가 생성될 때 만들어지는 변수가 아닌, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당한다.

정적 변수는 여러 인스턴스가 공유하는 기준 값이 필요한 경우에 쓰여진다.

 

- 학생마다 새로운 학번이 생성되는 경우

- 회사에 사원이 입사할 때 마다 새로운 사번이 필요한 경우, 

- 은행에서 2대 이상의 번호표에서 대기표를 뽑을 경우 등

위와 같은 상황에서 잘 쓰인다

 

선언 방법

static 데이터형 변수명;

 

사용 방법

인스턴스 생성과 상관없이 사용 가능하기 때문에 클래스 이름으로 직접 참조한다.

클래스명.변수명 = 값; // 초기화

 

 

주문 순서표 예시 코드

public class NumberPrinter {
  // 멤버변수
  private String method; // 주문방법
  public static int orderNum; // 대기번호

  // 생성자
  public NumberPrinter(String method) {
  this.method = method;
  orderNum = 1;
  }

  // 주문표 메서드
  public void printOrderNum(String name) {
  System.out.println("("+ method + ") " + name + " 고객님 주문번호는 " + orderNum + " 번 입니다.");
  orderNum++;
  }
}

 

주문방식이 달라도 주문번호는 공유되며 순서대로 증가하도록 하기 위해서

waitNumber 변수에 static 키워드를 붙여 주었다.

 

생성자에 주문방법을 매개변수로 받고, orderNum 을 초기화 해주었다.

 

printOrderNum 메소드에는 고객이름(name)을 매개변수로 받아서 출력해주고,

orderNum을 1씩 증가시킨다.

 

public class Starbucks {
  public static void main(String[] args) {
    NumberPrinter dT = new NumberPrinter("Drive Thru"); 
    NumberPrinter app = new NumberPrinter("Siren Order"); 

    dT.printOrderNum("쟈니");
    app.printOrderNum("태일");
    app.printOrderNum("재현");
    dT.printOrderNum("유타");
    dT.printOrderNum("도영");
    dT.printOrderNum("마크");
    app.printOrderNum("동혁");
    app.printOrderNum("정우");
    dT.printOrderNum("태용");
  }
}

 

main 함수가 있는 클래스에서

Drive ThruSiren Order로 주문방식을 달리해 객체화시킨다.

 

방식을 번갈아가며 주문을 받아보고, 실행을 시켜보면

아래와 같이 번호가 순차적으로 증가되어서 잘 출력되었다.

 

 

 

 

 

static 변수는 인스턴스들이 공유하는 영역이다.

 

프로그램을 실행하면

1. static data 영역이 먼저 실행이 되고,

2. stack 영역의 인스턴스 변수들에 저장되어 있는 참조값으로

3. heap 메모리영역에서 참조가 되어지게 되는 순서로 이뤄진다.

 

 

 

 

 

 

728x90
반응형
LIST