☕ Java

[Java] Day07 - 클래스 필드

harveydent 2023. 5. 11. 12:49
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();
	}

}

문제

프로그램 개요

  1. Home의 구성원 객체들은 3명 생성 할 예정
  2. 각 객체들은 고유한 이름(name)을 가짐
  3. Home의 구성원 객체들이 공유하는 계좌(money)가 있음
  4. money의 초기값은 10000원
  5. money를 5000원 사용
  6. 여러번 사용 할 예정
  7. 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

 

GitHub - Qkrwnsgus0522/Java

Contribute to Qkrwnsgus0522/Java development by creating an account on GitHub.

github.com

 

728x90