일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- html tag
- 캡슐화
- 기본생성자
- 에러
- @AllArgsConstructor
- entity
- 상속
- 부스트코스
- java
- 깃허브
- 부트캠프
- Codeup
- 자바
- 브랜치
- SQL
- lv1
- 알고리즘
- DTO
- Python
- @NoArgsConstructor
- 프로그래머스
- HTML
- HashSet
- git
- 코드업
- CRUD
- stringbuffer
- github
- 파이썬
- @builder
- Today
- Total
잉?
[Java] static이란? (클래스변수, 인스턴스변수) 본문
키오스크 프로그램의 마지막을 달리고 있는 중에 이 사건은 발생되었다..(두둥)
장바구니에 값이 들어가는 것을 확인하고 다음 메서드로 값을 넘겼는데 넘긴 메서드에서 값이 초기화가 됐다.
장바구니 객체가 선언될때마다 초기화가 되는 것 같아서 생성자 부분을 다시 들여다봤지만 절레절레..
근데 다시금 생각해보니 선언할 때마다 객체가 다시 생성되고 이로 인해 저장된 값들이 초기화된다면
애초에 딱 한 번만 생성해서 값을 유지하면 되는 것 아닌가 싶었다.
그래서 열심히 찾아본 결과 썩 좋은 방법은 아니지만 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)' 카테고리의 다른 글
[Java] Wrapper 클래스 박싱과 언박싱 + 문자와 문자열 알아보기 (0) | 2023.06.07 |
---|---|
[Java] 메모장 만들기 + 향상된 for문, Linkedlist<> 타입 (0) | 2023.06.05 |
[Java] Object클래스, equals() 알아보기 (0) | 2023.05.26 |
[Java] 추상클래스란? abstract? + extends와 오버라이딩 (0) | 2023.05.24 |
[Java] 컬렉션(Collection) 알아보기 + Objects.equals() (2) | 2023.05.23 |