객체를 정의해 놓은 것
객체를 생성하는데에 사용됨
실제로 존재하는 것, 사물 또는 개념
인스턴스화 : 클래스로부터 객체를 만드는 과정
인스턴스 : 클래스로부터 만들어진 객체
속성(property) : 멤버변수, 특성, 필드, 상태
기능(function) : 메서드, 함수, 행위
static을 붙여 사용
인스턴스를 생성하지 않고도 '클래스이름.클래스변수' 로 사용가능
같은 클래스 내의 메서드 끼리는 참조변수를 사용하지 않고도 서로 호출이 가능하지만 static 메서드는 같은 클래스 내의 인스턴스 메서드를 호출할 수 없다.
static은 인스턴스를 생성하지 않아도 사용가능하지만 클래스 내의 일반 메서드는 인스턴스를 생성해야 사용 가능하기 때문이다.
메서드 구현부{}를 작성할 때, 제일 먼저 매개변수의 값이 적절한 것인지 확인하는 것이 중요하다.
인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드는 클래스 메서드로 정의한다.
인스턴스 메서드는 실행시 메서드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 더 걸린다.
한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것
매개변수의 개수 또는 타입이 달라야한다.
이를 각기 구현하려면 각 메서드들의 이름이 달라야하는데 이 경우 사용하기도 어렵고 이름 짓기도 어렵다.
오버로딩을 이용하면 이를 해결할 수 있다.
JDK 1.5부터 메서드의 매개변수 개수를 동적으로 지정해 줄 수 있다.
"타입... 변수명" 과 같은 형식으로 선언
가변인자를 매개변수중 가장 마지막에 선언해야한다.
기본 생성자 : 컴파일 할 때 소스파일의 클래스에 생성자가 하나도 정의되지 않은 경우 컴파일러는 자동적으로 기본 생성자를 추가하여 컴파일한다.
특별히 인스턴스 초기화 작업이 요구되지 않는다면 기본 생성자를 사용하는 것도 좋다.
생성자 이름 대신 this 를 사용해야한다.
첫줄에서 호출 가능하다.
멤버 변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어진다.
지역변수는 그렇지 않기 때문에 사용전에 반드시 초기화해야 한다.
class Car {
// 클래스 초기화 블럭
// 클래스가 메모리에 처음 로딩된 떄 한번만 수행됨
// 클래스 변수 초기화시 사용
static { }
// 인스턴스 초기화 블럭
// 모든 생성자에서 공통적으로 수행되어야 하는 문장들이 있을때 사용하면 간결해짐
{ }
}
인스턴스 초기화 블럭이 수행된 뒤 생성자가 수행된다.