클래스의 필드란 클래스에 포함된 변수를 의미합니다.
자바에서 변수는 클래스 변수, 인스턴스 변수, 지역 변수 3가지가 있다. 이중 클래스 변수, 인스턴스 변수를 필드라고한다. 클래스 변수와 인스턴스 변수의 차이는 static
유무로 구분할 수 있다.
클래스 변수
클래스 영역에 위치한 변수 중 static
키워드를 가지는 변수
프로그램이 실행될 때 생성되고 프로그램이 종료될 때 삭제됩니다.
단 한 번만 생성되고 객체 생성 없이 클래스명.변수명으로 접근할 수 있습니다.
인스턴스 변수
클래스 영역에 위치한 변수 중 static
키워드를 사용하지 않는 변수
객체가 생성될 때생성되며 객체가 삭제될 때 같이 삭제됩니다.
heap 메모리에 저장되며 각 객체의 정보를 저장하는데 사용되어 멤버 변수라고도 합니다.
지역 변수
메소드나 안에 선언된 변수
메소드가 호출될 때 생성되고 메소드가 종료될 때 삭제됩니다.
변수가 존재하는 블록에서만 사용할 수 있기 때문에 블록변수라고도 합니다.
반드시 초기화하고 사용해야 합니다.
public class Student {
static int num = 10; // 클래스 변수
String name; // 인스턴스 변수
public void print() {
String str; // 지역 변수
str = num + name;
System.out.println(str);
}
public static void main(String[] args) {
Student std1 = new Student();
std1.name = "홍길동";
std1.print();
}
}
//출력결과 : 10홍길동
필드선언은 클래스 중괄호{}
블록 어디서든 할 수 있습니다. 하지만 생성자와 메소드 중괄호{}
블록 내부에는 선언이 될 수 없습니다. 생성자와 메소드 블록 내부에 선언된 것은 모두 로컬 변수가 됩니다. 필드의 선언은 변수의 선언 형태와 비슷하다 그래서 클래스 멤버 변수라고 부르기도 하는데 될 수 있으면 필드라는 용어를 그대로 사용하는게 좋다고 합니다.
타입 필드 [ = 초기값];
타입에는 기본타입과 참조타입 모두 올 수 있습니다 필드의 초기값은 선언시 넣을 수도 있고 생략될 수도 있습니다.
String company = "현대자동차";
String maxSpeed = "300";
int productionYear;
int currentSpeed;
1 . 클래스 내부의 생성자나 메소드에서 사용할 경우
단순히 필드 이름으로 읽고 변경하면된다.
//Car 클래스
//필드
int speed;
//생성자
Car(){
speed = 0;// 값변경
}
//메소드
void method(...){
speed = 10; //값변경
}
Car클래스의 speed필드는 생성자와 메소드에서 변경이 가능하다 사용방법은 변수와 동일하지만 변수는 자신이 선언된 생성자 또는 메소드 안에서만 사용할 수 있지만 필드는 모두 사용가능.
2 . 클래스 외부에서 사용할 경우
우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용해야한다.
필드가 객체에 소속된 데이터이므로 객체가 없으면 필드도 존재하지 않기 때문이다.
//Person 클래스
void method(){
//Car 객체 생성
Car myCar = new Car();
//필드사용
myCar.speed = 60; //값변경
}
외부 클래스인 Person에서는 Car클래스의 speed필드값을 사용하려면 다음과 같이 Car 객체를 우선 생성해줘야 Car클래스의 필드값을 사용할 수 있다.
필드랑 변수는 아직도 많이 헷갈립니다. 스터디를 진행하면서도 이부분은 다들 어려워 하셨던거 같습니다. 필드는 클래스에 포함된 변수. 클래스 변수, 인스턴스 변수, 지역 변수 이 세가지중에 클래스 변수, 인스턴스 변수가 필드에 해당하고, 지역 변수는 메소드 블록 내에서만 사용가능하므로 필드라고 하지는 않는거같습니다.
정확한건 아니지만 지금 당장은 이렇게 이해했습니다 앞으로 계속 공부해봐야할듯