자바에서 변수는 크게 클래스 변수, 인스턴스 변수, 그리고 지역 변수로 구분되는데,
필드는 클래스 변수와 인스턴스 변수이며, 이 둘은 static 키워드의 유무로 구분할 수 있다.
static 키워드가 함께 선언된 것은 클래스 변수
그렇지 않은 것은 인스턴스 변수이다.
그리고 이 두 가지 변수 유형에 포함되지 않고 메서드 내에 포함된 모든 변수를 지역변수라 부른다.
class Example { // => 클래스 영역
int instanceVar; // 인스턴스 변수
static int classVar; // 클래스 변수(static 변수, 공유변수)
void method() { // => 메서드 영역
int localVar = 0; // 지역 변수. {}블록 안에서만 유효
}
}
인스턴스 변수는 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수로 new 생성자() 를 통해 인스턴스가 생성될 때 만들어진다.
클래스 변수는 독립적인 저장 공간을 가지는 인스턴스 변수와 다르게 공통된 저장공간을 공유한다.
한 클래스로부터 생성되는 모든 인스턴스 들이 특정한 값을 공유해야하는 경우에 주로 static 키워드를 사용하여 클래스 변수를 선언한다.
클래스 변수는 인스턴스 변수와 달리 인스턴스를 따로 생성하지 않고도 언제라도 클래스명.클래스변수명 을 통해 사용이 가능
필드 변수와 지역 변수의 주요한 차이점 (초기값)
직접 초기화하지 않으면 값을 출력할 때에 오류가 발생하는 지역변수와는 다르게 필드 변수는 직접적으로 초기화를 실행하지 않더라도 강제로 초기화가 이루어진다.
클래스의 멤버(필드, 메서드, 이너 클래스)에 사용하는 키워드
static 키워드가 붙어있는 멤버를 ‘정적 멤버(static member)'라 한다.
static 키워드로 정의되어 있는 클래스 멤버들은 인스턴스의 생성 없이도 클래스명.멤버명 만으로도 사용이 가능하다.
정적 필드는 객체 간 공유 변수의 성질이 있다 (메서드도 동일)
정적 메서드의 경우 인스턴스 변수 또는 인스턴스 메서드를 사용할 수 없다
즉, static 키워드를 사용하면 모든 인스턴스에 공통적으로 적용되는 값을 공유하게 된다.
특정 작업을 수행하는 일련의 명령문들의 집합
클래스의 기능에 해당하는 내용들을 담당
자바제어자 반환타입 메서드명(매개 변수) { // 메서드 시그니처
메서드 내용 // 메서드 바디
}
메서드도 클래스의 멤버이므로 클래스 외부에서 메서드를 사용하기 위해서는 먼저 인스턴스를 생성해야한다.
인스턴스를 생성한 후, 포인트 연산자(.)를 통해 메서드를 호출
class Example {
public void area() {
System.out.println("넓이");
}
public void area(int r) {
System.out.println("원 넓이 = " + 3.14 * r * r);
}
public void area(int w, int l) {
System.out.println("직사각형 넓이 = " + w * l);
}
public void area(double b, double h) {
System.out.println("삼각형 넓이 = " + 0.5 * b * h);
}
}
오버로딩 성립 조건 2가지
같은 이름의 메서드명
매개변수의 개수나 타입이 다르게 정의
오버로딩의 장점
: 하나의 메서드로 여러 경우의 수를 해결할 수 있다