메모장

class 변수 , 공유자원 본문

JAVA/개념정리

class 변수 , 공유자원

Itchild 2024. 4. 6. 14:19
728x90
반응형

 

package class02;

class A {
	int a; // 멤버변수,필드,속성
	// 인스턴스 변수
	// : 각각의 객체들이 고유한 값을 저장, 객체들끼리 값을 공유 xxxxx
	// 멤버변수는 값을 공유하지 않는다
	// 클래스 변수는 static 값을 공유 해서 같이 올라간다.

	static int b;
	// 객체와 무관하게
	// 클래스 변수,공유 자원
	// : 주인이 클래스라서 객체들끼리 값을 공유 O

	void printInfo() {
		System.out.println("a= " + this.a);
		System.out.println("b= " + this.b);
	}
}

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

		A a1 = new A();
		a1.a = 10;
		a1.b = 10;
		A a2 = new A();
		a2.a = 10;
		a2.b = 10;
		a2.a++;
		a2.b++;

		a1.printInfo();
		a2.printInfo();

	}
}
a= 10
b= 11
a= 11
b= 11
 
 

static int b; // 공유자원

// 객체와 무관하게

// 클래스 변수,공유 자원

// : 주인이 클래스라서 객체들끼리 값을 공유 O

 

실습문제

 

★ 모래성 놀이 (하나의 큰 모래성을 만들고 순서대로 돌아가면서 모래를 가져가다가 깃발이 넘어지면 지는 게임)

package class02;

// 1. 객체끼리 값을 "공유"하는 경우
//    static 붙여서 클래스 변수로 선언
//    this xxx
// 2. 객체들로도 배열을 생성할수있음
class Game {
	String name; // 모래성게임을 하는 사람이름
	static int res=100; // 공유자원. 모래성
	Game(String name){
		this.name=name;
		System.out.println(this.name+"님 참가!");
	}
	boolean game(int cnt) { // this == 자기자신객체
		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("티모");

		int i=0;
		while(true) {
			
			if(!data[i++].game(5)) {
				break;
			}
			
			if(i==data.length) {
				i=0;
			
		}
		// 첫번째부터 마지막까지 돌아가면서
		// 순서대로 게임을 할건데,
		// 만약 패배했다면 게임종료
	}
}

//		 if(!data[i++].game(5)) {
				break;
			} // 아래 조건문들을 합쳐서 이렇게 간단하게 작성할 수 있다 !

//		 while(true) {
//		 g1.game(80);// 공유자원이었기 때문에 누가 이미 가져가서 그런것이다.
//		 if(!g.game(5)) { //졌어 ?
//			 break;
//		 }
//		 g2.game(15);
//		 if(!g2.game(5)) {
//			 break;
//		 }
//		 g3.game(7);
//		 if(!g3.game(5)) {
//			 break;
//		 }
		 //while 안에 다른 조건문 안에 break;는 while 의 종료 조건이 안된다.
 

 

 

728x90
반응형

'JAVA > 개념정리' 카테고리의 다른 글

[상속] Object  (0) 2024.04.06
상속  (0) 2024.04.06
객체 지향 언어 [JAVA]  (0) 2024.04.06
Flag 알고리즘  (0) 2024.04.06
Random  (0) 2024.04.06