잉?

[Java] static이란? (클래스변수, 인스턴스변수) 본문

자바(Java)

[Java] static이란? (클래스변수, 인스턴스변수)

Jye_647 2023. 6. 2. 21:02

키오스크 프로그램의 마지막을 달리고 있는 중에 이 사건은 발생되었다..(두둥)

장바구니에 값이 들어가는 것을 확인하고 다음 메서드로 값을 넘겼는데 넘긴 메서드에서 값이 초기화가 됐다.

 

장바구니 객체가 선언될때마다 초기화가 되는 것 같아서 생성자 부분을 다시 들여다봤지만 절레절레..

근데 다시금 생각해보니 선언할 때마다 객체가 다시 생성되고 이로 인해 저장된 값들이 초기화된다면

애초에 딱 한 번만 생성해서 값을 유지하면 되는 것 아닌가 싶었다.

 

그래서 열심히 찾아본 결과 썩 좋은 방법은 아니지만 static을 이용한 해결법이 있었다.

 

Static의 뜻을 찾아보면 정적인, 고정된이라는 뜻을 가진다.

뜻과 같게 static변수 즉, 클래스 변수는 클래스가 실행될 때 딱 한번 메모리상에 변수의 값이 올라간다. 

종료될 때까지 유지가 되는데 이 특징을 이용해 장바구니 객체를 static으로 만들어 값이 유지되게 만든 것이다.

static List<ProductMenu> basket; // static

// basket안에 값이 유지가 되어서 size가 0이 아니게 된다. 그래서 if문 실행.
if(basket.size() != 0){
            sb.append("-------------------------------------------------------------------------\n");
            sb.append("아래와 같이 주문 하시겠습니까? \n");
            sb.append("\n[ Orders ]\n");
            for (int i=0; i<basket.size(); i++){
                ProductMenu product = basket.get(i);
                sb.append(String.format("%d. %-17s | W %.1f | %s\n", (i+1), product.getName(), product.getPrice(), product.getExplanation()));
            }
            System.out.println(sb);
            System.out.println("[ Total ]");
            for (int i=0; i<basket.size(); i++){
                ProductMenu product = basket.get(i);
                total = total + product.getPrice();
            }
            System.out.printf("W %.1f \n",  total);
            System.out.println("\n1. 주문 \t\t 2. 메뉴판" );
            choice = sc.nextInt();
            orderComplete(choice);
            System.out.println("-------------------------------------------------------------------------");
        }else{
            System.out.println("장바구니가 비었습니다. \n");
        }

여기서 좀더 명확하게 알고 넘어가자.

클래스 변수 [static 멤버(=변수, 메서드)]

- 클래스 내에 static 키워드로 선언된 변수(인스턴스 변수 앞에 static 붙이면 된다.)

- 클래스가 실행될 때 메모리에 변수가 올라가고 프로그램 종료될 때까지 유지.

- 클래스가 생성될 때마다 인스턴스 변수와는 다르게 재생성 X. 즉, 값이 유지된다.

static int value;

 

인스턴스 변수(non-static 멤버)

- 클래스 내에 선언된 변수

- 객체 생성 시마다 매번 새로운 변수가 생성된다.(매번 새롭게 생기니깐 그전 값이 초기화된다.)

- 값이 공유되지 않는다. (객체 생성 시마다 새롭게 재생성되기에)

int value;

 


 

[java] 클래스변수, 인스턴스 변수 차이(static변수와 non Static변수) - Break Out of Your Comfort Zone

목차 클래스 변수, 인스턴스 변수 클래스 변수, 인스턴스 변수, 지역 변수가 메모리에 적재되는 위치 클래스 변수(Static)의 주의점, 클래스 변수가 필요한 이유 클래스 변수, 인스턴스 변수

sujinhope.github.io

 

[JAVA] 자바의 변수 (클래스 변수, 인스턴스 변수, 지역 변수)

이 글은 PC 버전 TISTORY에 최적화 되어있습니다. 선언 위치에 따른 변수의 종류자바에서의 변수는 클래스 변수, 인스턴스 변수, 지역 변수가 있습니다. 변수의 종류를 결정짓는 것은 '변수가 선언

itmining.tistory.com

 

07-03 스태틱(static)

이번에는 스태틱(static)에 대해서 알아보자. [TOC] ## static 변수 예를 들어 다음과 같은 HouseLee 클래스가 있다고 하자. *Sample.jav…

wikidocs.net

 

Comments