728x90
클래스 필드
클래스의 필드란 클래스에 포함된 변수를 의미합니다.
필드의 구분
- 클래스 변수 (static variable)
- 인스턴스 변수 (instance variable)
- 지역 변수 (local variable)
클래스 변수
클래스 변수란 클래스 내에서 값이 공유되는 변수입니다. 공유자원처럼 값이 공유되어 같이 사용되며 멤버 변수와 다르게 대입할 수 있습니다. 클래스 영역에 위치한 변수 중에서 static 키워드를 가지고 있습니다.
인스턴스 변수
클래스 영역에 위치한 변수 중 static 키워드를 가지지 않는 변수입니다. 인스턴스마다 가져야 하는 고유한 값을 유지합니다.
※ static : 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 것을 의미
지역 변수
메서드나 생성자, 초기화 블록 내에 위치한 변수입니다.
실습
class A {
int a; // 멤버변수, 필드, 속성
// 인스턴스 변수
// : 각각의 객체들이 고유한 값을 저장, 객체들끼지 값을 공유하지 않음
static int b; // 객체와 무관하게
// 클래스 변수, 공유 자원
// : 주인이 클래스라서 객체들끼리 값을 공유 O
void printInfo() {
System.out.println("a = " + this.a);
System.out.println("b = " + b);
}
}
public class Test01 {
public static void main(String[] args) {
A a1 = new A();
a1.a = 10;
a1.b = 10; // A.b = 10;
A a2 = new A();
a2.a = 10;
a2.b = 10; // A.b = 10;
a2.a++;
a2.b++; // A.b++;
a1.printInfo();
a2.printInfo();
}
}
문제
프로그램 개요
- Home의 구성원 객체들은 3명 생성 할 예정
- 각 객체들은 고유한 이름(name)을 가짐
- Home의 구성원 객체들이 공유하는 계좌(money)가 있음
- money의 초기값은 10000원
- money를 5000원 사용
- 여러번 사용 할 예정
- money을 0원 이하로 만든 사람의 이름을 출력
- 인스턴스 변수 vs 클래스 변수
- 멤버변수, 메서드(+생성자)를 고려할 것
- 객체배열 사용
class Home {
String name;
static int money = 10000;
Home(String name) {
this.name = name;
System.out.println(this.name + " 구성원 생성!");
}
boolean use(int use) {
money -= use;
if (money <= 0) {
System.out.println(this.name + "님 " + use + "원 사용, 잔액 : " + money);
return true;
}
System.out.println(this.name + "님 " + use + "원 사용, 잔액 : " + money);
return false;
}
}
public class Test {
public static void main(String[] args) {
Home[] person = new Home[3];
person[0] = new Home("홍길동");
person[1] = new Home("김길동");
person[2] = new Home("박길동");
int i = 0;
while (true) {
if (person[i++].use(1500)) {
break;
}
if (i == person.length) {
i = 0;
}
}
}
}
GitHub
https://github.com/Qkrwnsgus0522/Java
728x90