추상 클래스
온전하게 구현되어 있지 않은 메소드를 가지고 있는 클래스
메소드가 미완성돼있고 추상 클래스로는 객체를 생성할 수 없습니다.
주로 상속 계층에서 추상적인 개념을 나타내기 위한 용도로 사용됩니다.
하나 이상의 추상 메소드를 가지고 있습니다.
추상 클래스를 상속받는 서비 클래스에서 반드시 추상 메소드를 재정의해야 합니다.
재정의 하지 않고 사용하는 경우 오류가 발생됩니다.
용도
1. 공통된 필드, 메소드를 통일하여 유지보수성을 높이고 통일성이 유지 가능합니다.
2. 강제로 주어지는 필드, 메소드를 가지고 개발자 스타일대로 구현하여 설계 시간이 절약됩니다.
3. 개발자 스타일대로 클래스를 구현하는 경우에도 규격안에 구현합니다.
선언
클래스 선언 시 abtract를 사용합니다.
상속, 다형성
다형성
하나의 식별자로 다양한 타입(클래스)을 처리하는 것을 의미합니다.
메소드 중복 정의(메소드 오버 로딩)나 제네릭 프로그래밍도 포함됩니다.
객체들의 타입(클래스)이 다르면 동일한 메시지가 전달되어도 서로 다른 동작을 하는 것입니다.
바인딩
메소드 호출을 실제 메소드의 몸체와 연결하는 것입니다.
프로그램에 사용된 구성 요소의 실제 값, 프로퍼티를 결정짓는 행위를 의미합니다.
정적 바인딩 : 실행 시간 전에 일어나고 실행 시간에 변하지 않은 상태로 유지되는 바인딩
1. 컴파일 시간에 결정
2. 프로그램이 실행되대 변치 않음
3. 오버 로딩
4. private, final, static을 사용하는 메소드
동적 바인딩 : 실행 시간에 이루어지거나 실행 시간에 변경되는 바인딩
1. 실행 시간에 결정
2. 늦은 바인딩으로 불림
3. 오버라아딩
4. java에서의 다형성, 상속이 가능
Object 클래스
Object클래스를 제외하고는 모든 클래스는 부모 클래스를 가지고 있습니다.
클래스를 선언하는 경우 extends 사용하지 않은 경우 암시적으로 Object클래스 상속받습니다.
상속 is-a 관계
상속에서 자식. 부모 클래스는 '~은 ~이다'와 동일한 is-a 관계가 있습니다.
따라서 상속의 계층 구조를 올바르게 설계 여부는 is-a 관계 성립을 생각하면 됩니다.
만약 '~은 ~을 가지고 있다'와 같은 has-a 관계가 성립된 경우 이 관계로 모델링을 하면 안 됩니다.
has-a 관계
객체 지향 프로그래밍에서 has-a 관계는 구성 관계, 집합 관계를 의미합니다.
구성 관계에서는 하나의 객체가 다른 객체의 부품이 됩니다.