java

15. 필드(Filed)-1. 필드와 변수

dalc3154 2025. 2. 21. 15:51

객체 지향 프로그램의 '변수'

필드(속성)란?

객체의 지속적인 상태를 저장하는 '클래스 내부'의 변수

메소드의 외부에 위치한다(분리)

명시적으로 초기화하지 않으면 기본값으로 초기화됨

 

인스턴스(instance)변수

클래스의 각 객체가 인스턴스에 속한 변수

클래스 내부에서 선언되고 '객체가 생성될 때' 메모리에 할당됨

각 인스턴스 마다 다른 값을 가질 수 있음

 

클래스(static, 정적) 변수

클래스의 '모든 인스턴스에서 공유되는' 데이터 변수

'static' 키워드를 사용하여 선언되는 변수

해당 클래스로 생성되는 인스턴스가 '모두 동일한 값'을 가짐

프로그램이 시작될 때 생성됨

프로그램이 종료될 때 소멸함

JVM의 'Method Area'라고 불리는 영역에 저장됨

 

지역 변수

메소드가 실행되는 동안에만 존재하는 '일시적인' 변수

메소드(생성자 포함)또는 코드블록{} 내부에서 선언

해당 영역 밖에는 어떠한 영향도 끼치지 못함

자동으로 초기화되지 않으며 반드시 초기화 하고 사용해야 함

초기화하지 않으면 에러 발생

 

예시

class CarClass {
	// 필드 (속성)
	// 인스턴스 필드: 각 객체마다 다른 값을 가짐
	String brand;
	String color;
	int speed;// 일반 변수의 형태와 동일
	
	// 클래스(정적, static) 필드: 클래스의 모든 객체가 동일한 값을 가짐
	static int tireNumber = 4;
	static int doorNumber;
	
	// 지역 변수
	void accelerate(int increment) {
		// speed : 필드
		// 지역변수 내에서도 접근 가능
		// increment: 지역 변수
		// 메소드 내부에서만 유효
		speed += increment;// speed = speed + increment
	}
}

public class E_Filed {
	public static void main(String[] args) {
		// 클래스(정적, static)변수 사용법
		// 클래스명.필드명; || 객체명.필드명;
		System.out.println(CarClass.doorNumber);// 0
		System.out.println(CarClass.tireNumber);// 4
		CarClass.doorNumber = 4;
		System.out.println(CarClass.doorNumber);// 4
		
		// 각 객체명으로 호출 가능하지만 클래스명 호출 방법을 권장
		CarClass car1 = new CarClass();
		CarClass car2 = new CarClass();
		
		// 인스턴스(instance) 변수 사용방법
		//객체명.필드명;
		car1.brand = "kia";
		car1.color = "black";
		
		//오류나지 않지만 사용하지 않음
		//car1.doorNumber = 10;// 객체명으로도 클래스 변수 접근 가능
		//System.out.println(car2.doorNumber);//10
		
		car1.accelerate(100);
		System.out.println(car1.speed);// 100
	}
}