TIL-20-04-29
Updated:
다형성
- object casting : 형변환
- virtual method invocation
- polymorphic argument (슈퍼클래스를 입력값으로 이용하면 슈퍼클래스, 상속클래스 객체 모두 사용 가능하다.)
- instanceof
- heterogeneous collection
클래스의 인스턴스 : object(객체)
instanceof
- 상속 관계에 의한 객체가 입력값으로 들어왔을 때 구분을 지어야 한다면 instanceof를 사용해서 어떤 클래스에서 온 건지 구분.
- 상속 관계를 고려해서 써야 함. 무조건 슈퍼클래스가 나오면 처음부터 필터링된다.
heterogeneous collection ==> 배열
- 여러 다양한 타입으로 집합이 만들어진다.
(반대 개념) homogeneous colletion
- 같은 타입으로 집합이 만들어진다.
용어 정리 :
- 변수, variable –> 데이터(싱글)
- collection –> 데이터 집합 ex) array(배열)
- 데이터 구조(data structure)
final
- 원래 기능을 못하고 만들어진 형태가 마지막인 클래스. 상속 불가.
- final class : 상속 x
- final method : override x
- final variable : 상수
변수 : 데이터가 변할 수 있다.
int a = 10;
a = 20;
상수 : 데이터가 변할 수 없다. 고정값.
final int a = 10; a = 20; //error
- 반드시 초기화를 해줘야 함. 클래스에서 setter 지원하지 않는다.
- 변수 선언 시 명시적 초기화. 이미 초기화 됐으므로 생성자에서는 명시할 필요 없음.
- 명시적 초기화 하지 않았다면, 생성자 초기화해야 함.
접근제한자 access modifier
- 클래스, 클래스 내 변수, 메소드들에 대한 접근을 제한
종류
- public : 모든 클래스에서 접근 가능
- protected : 상속받은 객체 어디에서나 접근 가능. 상속관계가 없어도 같은 패키지면 접근 가능. (defalut + 상속)
- default : 같은 패키지 내에서만 접근 가능. 접근 제한자 지정하지 않을 때 default
- private : 같은 클래스 내에서만 접근 가능
abstract class 추상클래스
- 객체가 가지는 특성을 추상화, 하위 클래스에서 구현을 목적으로 정의함.
- 표준화 역할. 상속을 목적으로 동일한 기능 및 속성을 가진다.
- 객체 만들 수 없고 상속을 통해서만 구현 가능.
abstract method 추상메소드
- 추상메소드가 하나라도 있으면 일반클래스는 추상클래스가 된다.
- 추상 메소드는 구현부{ }가 없고 이름만 호출하고 끝난다.
inferface
- 인터페이스는 추상클래스의 일종
- 인터페이스는 순수한 설계만을 표현하기 위해 동작에 대한 명세(가이드/표준화)만 기술.
- 인터페이스 내 메소드는 추상 메소드 (코딩하지 않아도 자동으로 추상클래스로 처리)
- 추상 메소드를 포함하므로 객체 생성 불가
- 인터페이스 내 멤버(변수)는 public static final(어디서든 클래스 이름으로 호출 가능한 상수)
- implements를 이용해 모든 추상메소드 구현
의문) 기능은 똑같은데 왜 두 가지로 나눴을까? 언제 쓸까?
다중 상속
- 단일 상속, 다중 구현의 형태
- 메인 클래스를 하나 상속받고, 필요한 기능은 인터페이스 여러 개로 정리한다.
public PassengerAndTruck extends Car
implements PassangerModel, TruckModel
추상클래스 vs 인터페이스
- 추상클래스는 일반 메소드, 일반 변수 선언이 가능하므로 구현부가 넓다.
- 인터페이스 모든 메소드는 추상메소드이고, 변수도 무조건 상수. 구현 메소드 없다.