자바 본 강의
클래스와 생성자, 인스턴스 필드와 블록
우주코딩
2021. 7. 27. 17:47
클래스 변수의 선언
클래스 변수는 클래스가 로딩될 때 초기값이 지정되기 때문에 초기값을 선언하지 않아도 된다.
단, 로컬변수는 기본값으로 초기화하지 않는다. 값을 줘야한다.
new 명령을 인해 만들어진 인스턴스에는 메서드가 포함되지 않는다.
오직 변수만 생성된다.
생성자
- 클래스 이름과 같은 이름으로 메서드를 만든다.
- 리턴 타입을 선언하지 않는다. 즉 값을 리턴하지 않는다.
- 인스턴스를 만들 때 자동 호출된다.일반 메서드처럼 나중에 따로 호출할 수 없다.
- 만약 개발자가 생성자를 만들지 않으면 컴파일러가 기본 생성자를 자동으로 생성해준다
- 모든 클래스는 반드시 한 개 이상의 생성자가 있다.
- 보통 인스턴스를 만든 후에 인스턴스 변수를 초기화시키는 용도로 정의한다.
- 생성된 인스턴스가 제대로 쓰일 수 있도록 유효한 값으로 초기화시키는 일을 한다.
생성자 this
생성자 안에서 다른 생성자를 호출할 때 this()를 사용한다.
일반 메서드에서 this를 생성자로서 호출할 수 없다.
클래스가 로딩 되는 경우
클래스 멤버(필드와 메서드)를 최초로 사용할 때
해당 클래스의 인스턴스를 최소로 생성할 때
- 인스턴스를 만들려면 설계도가 있어야 하고,
- 설계도는 메모리에 로딩되어 있어야 한다.
- 따라서 설계도가 없으면 즉시 설계도를 로딩할 것이다.
new 클래스명();
- 자바에서 제공하는 도구를 사용하여 클래스를 로딩할 때, 이미 클래스가 로딩되어 있다면 다시 로딩하지 않는다. 메모리 절약을 위해, 자바는 중복해서 클래스를 메모리에 로딩하지 않는다.
Class.forName("패키지 경로.파일명$클래스명");
인스턴스 블록 (initializer block)
인스턴스 초기화 블록 코드는 생성자 '앞부분에' 삽입된다.
생성자가 여러개 있으면 존재하는 모든 생성자에 삽입된다.
생성자가 없으면 기본 생성자가 생성되어 앞부분에 삽입된다.
따라서 생성자마다 '앞부분에' 반복해야하는 중복 코드가 있다면 인스턴스 초기화 블럭으로 빼놓아 중복 입력 하지 않을 수 있다.
인스턴스 초기화 블록의 용도
- 여러 생성자에 공통으로 들어가는 초기화 문장을 작성할 때
- 생성자를 만들지 못하는 상황에서 복잡한 로직에 따라 인스턴스 필드를 초기화시켜야 할 때
생성자를 만들지 못하는 상황?
- "익명 클래스"를 만들 때.
- 클래스 이름이 없기 때문에 생성자를 만들 수 없다.
인스턴스 필드와 인스턴스 블록은 선언된 순서대로
생성자의 앞부분에 삽입된다.