변수의 초기화
변수의 초기화
- 멤버변수와 배열의 초기화는 선택적이지만 지역 변수의 초기화는 필수적이다
- 멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어진다
- 멤버변수의 초기화 방법
- 명시적 초기화
명시적 초기화
- 변수를 선언과 동시에 초기화하는 것을 명시적 초기화라고 한다
- 보다 복잡한 초기화 작업이 필요할 때는 초기화 블럭 또는 생성자를 사용해야 한다
초기화 블럭
- 초기화 작업이 복잡하여 명시적 초기화만으로는 부족한 경우 초기화 블럭을 사용한다
- 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되며, 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때마다 수행된다
- 생성자보다 인스턴스 초기화 블럭이 먼저 수행된다
- 인스턴스 변수의 초기화는 주로 생성자를 사용하고, 인스턴스 초기화 블럭은 모든 생성자에서 공통으로 수행돼야 하는 코드를 넣는데 사용한다
멤버변수의 초기화 시기와 순서
- 클래스 변수의 초기화 시점 : 클래스가 처음 로딩될 때 단 한번 초기화 된다
- 인스턴스 변수의 초기화 시점 : 인스턴스가 생성될 때마다 각 인스턴스 별로 초기화가 이루어진다
- 초기화 순서
- 스태틱 변수 : 기본가 -> 명시적 초기화 -> 클래스 초기화 블얻
- 인스턴스 변수 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자
상속
상속의 정의와 장점
- 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
- 코드의 추가 및 변경이 매우 용이
- 코드의 재사용성을 높이고 중복을 제거하여 생산성과 유지보수에 크게 기여
- extends(확장)
- 조상 클래스 : 부모 클래스, 상위 클래스, 기반 클래스
- 자손 클래스 : 자식 클래스, 하위 클래스, 파생된 클래스
- 자손 클래스 안에 조상 클래스가 포함되어 있다
- 자손 클래스는 조상 클래스의 모든 멤버를 상속받음
- 조상 클래스가 변경되는 것은 자손 클래스에 영향을 준다
- 자손 클래스가 변경되는 것은 조상 클래스에 아무런 영향을 주지 못한다
- 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다
- 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다
- 접근 제어자가 private 또는 default인 멤버는 상속되지 않는다기보다 상속은 받지만 자손 클래스로부터 접근이 제한된다
- 자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다
클래스 간의 관계 - 포함관계
- 상속 이외의 클래스 재사용 방법
- 클래스 간에 포함 관계를 맺어주는 것
- 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
클래스간의 관계 결정
- 상속일 경우 : ~은 ~이다
- 포함일 경우 : ~은 ~을 가지고 있다
단일 상속
- 자바는 단일 상속만을 허용한다
- 다중 상속의 경우 여러개의 조상 클래스에 동일한 메서드명이 존재할 경우 문제가 발생하게 된다
- 이러한 문제점을 해결하기 위해 단일 상속만을 허용한다
Object 클래스 - 모든 클래스의 조상
- 최상위 조상은 Object 클래스
- 이미 어떤 클래스로부터 상속받도록 작성된 클래스에 대해서는 컴파일러가 extends Object를 추가하지 않는다