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
반응형