프로그래밍

[자바 기초] day07 : 클래스 변수(static) 본문

자바/자바 기초

[자바 기초] day07 : 클래스 변수(static)

시케 2023. 5. 15. 13:13
728x90
반응형

2023.05.11.목

클래스 변수

클래스 변수란 클래스 내에서 값이 공유되는 변수이다

공유자원처럼 값이 공유되어 같이 사용된다

멤버 변수와 다르게 대입이 허용된다

 

선언

static을 붙여 선언한다

"객체와 무관하게" 값을 공유하기 때문이다

package class02;

class A{
	int a;		//멤버변수 필드 속성
	//int b;	// 인스턴스 변수, 프로퍼티 등...
	// : 각각의 객체들이 고유한 값을 저장 객체들끼리 값 공유하지 않음
	
	static int b;
	//객체와 무관, 클래스랑만 상관
	// 클래스 변수, 공유자원(애들이 다 쓰니까)
	// 객체끼리 값 공유
	
	void printInfo() {
		System.out.println("a= "+this.a);
		System.out.println("b= "+this.b);
	}
}

 

예제1)

package class02;

class Game {
	String name; // 모래성 게임 하는 사람 이름
	static int res = 100; // 공유 자원 , 모래성 ---> 공유자원은 대입 허용

	Game(String name) {
		this.name = name;
		System.out.println(this.name + "님 참가!");
	}

	boolean game(int cnt) { // this==자기 자신 객체 static 없음
		res -= cnt;
		if (res <= 0) {
			System.out.println(this.name + "님 패배...");
			return false;
		}
		System.out.println(this.name + "님 성공! 남은 모래: " + res);
		return true;
	}

}

public class Test02 {

	public static void main(String[] args) {
		Game g1 = new Game("아리");
		Game g2 = new Game("아무무");
		Game g3 = new Game("티모");
		Game g4 = new Game("소나");
		// 객체로 만드는 배열 : 객체 배열

		Game[] data = new Game[3];
		data[0] = new Game("아리");
		data[1] = new Game("아무무");
		data[2] = new Game("티모");
		data[3] = new Game("소나");

		// 1번 ~마지막번까지 돌아가면서
		// 순서대로 게임
		// 만약 패배시 종료

		int i = 0;
		while (true) {

			if (!data[i].game(5)) {
				break;
			}

			i++;

			if (i == data.length) {
				i = 0;
			}

		}

	}

}

예제2)

[연습문제]
1. Home의 구성원 객체들을 3명 생성
2. 각 객체들은 고유한 이름(name)을 가진다
3. Home의 구성원 객체들이 공유하는 계좌가 있다
         == money
4. money에 10000원있음
5. person.use(5000);
  money를 100~5000원만큼 사용
6. 여러번 사용할 예정
7. money을 0원이하로 만든사람의 이름을 출력한다
※ 인스턴스 변수 vs 클래스 변수
※ 멤버변수,메서드(+생성자) 고려할것
※ 객체배열

package class02;

import java.util.Random;

class Home{
	String name;
	static int money = 10000;
	
	Home(String name){
		this.name = name;
		System.out.println("집에 "+this.name+"님이 왔습니다");
	}
	
	boolean use(int money) {
		if(Home.money<=money) {
			System.out.println(this.name+"님이 과소비중입니다.");
			return false;
		}
		Home.money-=money;	// 클래스 변수는 클래스명.변수;
		System.out.println(this.name+"님이 돈을 "+money+"원 사용했습니다. 잔액: "+Home.money);
		return true;
	}
}

public class Test03 {

	public static void main(String[] args) {
		Home[] person = new Home[3];
		person[0] = new Home("철수");
		person[1] = new Home("영희");
		person[2] = new Home("민재");
		
		Random rand = new Random();
		
		int i =0;
		while(true) {
			int randMoney = (rand.nextInt(50)+1)*100;
			
			if(!person[i++].use(randMoney)) { // 종료조건
				break;
			}
			if(i==person.length) {
				i=0;
			}
		}

	}

}

 

728x90
반응형
Comments