생성자 : 인스턴스 변수들을 초기화하는데 사용되는 특수한 메서드
생성자의 가장 큰 특징으로는,
생성자 이름은 클래스 이름과 같아야한다.
-> 클래스 이름과 생성자 이름이 다르면 그 메서드는 생성자로서 기능을 수행할 수 없다.
리턴 타입이 없다.
-> void 키워드를 사용하는게 아니라 리턴 타입 자체가 아예 존재하지 않는거다.
오버 로딩이 가능하다.
-> 한 클래스 내에 여러 개의 생성자가 있을 수 있다.
클래스명(){} //기본 생성자
DefaultConst(){} // 예시) DefaultConst 클래스의 기본 생성자
매개변수가 있을 경우에는?
메서드처럼 매개변수를 통해 호출 시에 해당 값을 받아서 인스턴스를 초기화하는데 사용한다.
각각 특성이 있는 인스턴스를 여러개 만들어야할 때 매개변수가 있는 생성자를 이용하면
인스턴스마다 다른 값을 가지고 초기화할 수 있어서 유용하다.
정리하면,
생성자를 상호 호출하는 방법
자신이 속한 클래스에서 다른 생성자를 호출할때 this() 메서드를 사용한다.
얘를 사용하려면
이 두가지 문법요소를 충족시켜야한다.
헷갈릴 수 있는 것은 this 키워드와 this() 는 다르다는 것.
this는 인스턴스 변수와 매개변수를 이름만으로 구분하기 어려워지는 문제가 생기는데, 이때 이를 구분해주기 위해서 주로 사용한다.
this 는 인스턴스 자신을 가르키며, 참조변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼 this 를 통해서 인스턴스 자기 자신의 변수에 접근할 수 있는 것이다.
내부 클래스는 말 그래도 클래스 내에 선언된 클래스를 말한다.
외부 클래스와 내부 클래스가 서로 연관되어있을 때 사용하며, 코드의 복잡성을 줄일 수 있다.
외부적으로 불필요한 데이터를 감출 수 있어 캡슐화를 달성하는데 유용하다고 한다.
내부 클래스의 종류로는 1)인스턴스 내부 클래스, 2)정적 내부 클래스, 3) 지역 내부 클래스 가 있다.
class Outer { // 외부 클래스
class Inner {
// 인스턴스 내부 클래스
}
static class StaticInner {
// 정적 내부 클래스
}
void run() {
class LocalInner {
// 지역 내부 클래스
}
}
}