필드: '클래스에 포함된 변수'를 의미하는 것으로 객체의 속성을 정의할 때 사용됨
클래스 변수(cv, class variable), 인스턴스 변수(iv, instance variable), 지역 변수(lv, local variable) 세가지로 구분됨
필드라고 부르는 것은 클래스 변수와 인스턴스 변수. 이 둘은 다시 static
키워드의 유무로 구분됨.
static
키워드가 함께 선언된 것은 클래스 변수, 그렇지 않은 것은 인스턴스 변수
지역 변수: 이 두가지 변수 유형에 포함되지 않고 메서드 내에 포함된 모든 변수
class Example { // => 클래스 영역
int instanceVariable; // 인스턴스 변수
static int classVariable; // 클래스 변수(static 변수, 공유변수)
void method() { // => 메서드 영역
int localVariable = 0; // 지역 변수, {}블록 안에서만 유효
}
}
인스턴스 변수(iv)
- 인스턴스가 가지는 가각의 고유한 속성을 저장하기 위한 변수로, new 생성자()
를 통해 인스턴스가 생성될 때 만들어짐
클래스 변수(cv)
- static
키워드를 통해 선언
- 공통된 저장 공간을 공유
- 한 클래스로부터 생성되는 모든 인스턴스들이 특정한 값을 공유해야하는 경우에 주로 static
키워드를 사용해서 클래스 변수를 선언
- 인스턴스 변수와 달리 인스턴스를 따로 생성하지 않고도 언제라도 클래스명.클래스변수명
을 통해 사용 가능 (클래스 영역에 저장되어 그 값을 공유하기 때문)
지역변수(lv)
- 메서드 내에 선언되며 메서드 내({} 블록
)에서만 사용가능한 변수
- 멤버 변수와는 다르게 스택 메모리에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸되어 더이상 사용할 수 없음
- 직접 초기화하지 않으면 값을 출력할 대 오류가 발생
필드변수(인스턴스 변수 & 클래스 변수)
- 직접적으로 초기화를 실행하지 않더라도 강제로 초기화가 이루어짐
static
: 클래스 멤버(필드, 메서드, 이너 클래스)에 사용하는 키워드
static
키워드가 붙어있는 멤버는 '정적 멤버(static member)'라고 부름
static
이 붙어있지 않은 인스턴스 변수와 구분
인스턴스 멤버는 반드시 객체를 생성한 이후에 변수와 메서드에 접근하여 해당 멤버를 사용가능한 반면, static
키워드로 정의되어 있는 클래스 멤버들은 인스턴스의 생성 없이도 클래스명.멤버명
만으로도 사용이 가능함. (클래스 내부에 저장 공간을 가지고 있기 때문에 객체 생성없이 곧바로 사용)
static
키워드를 사용하면 해당 메서드는 정적 메서드가 됨. 정적 메서드도 정적 필드와 마찬가지로 클래스명만으로 바로 접근이 가능함.메서드: 특정 작업을 수행하는 일련의 명령문들의 집합
머리에 해당하는 메서드 시그니처(method signature) 와 몸통에 해당하는 메서드 바디(method body로 구분됨
자바제어자 반환타입 메서드명(매개 변수) { //메서드 시그니처
메서드 내용 // 메서드 바디
}
{}
)안에 해당 메서드가 호출되었을 때 수행되어야하는 일련의 작업들을 표시함. 메서드명은 관례적으로 소문자로 표시.void
가 아닌 경우에는 메서드 바디({}
)안에 반드시 return
문이 존재해야 함 리턴문은 작업을 수행한 결과값을 호출한 메서드로 전달함. 결과값은 반드시 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 함..
)를 통해 메서드를 호출.