카테고리 없음

객체지향 프로그래밍 12. 상속, 다운캐스팅과 instanceof

코딩펭귄 2023. 12. 14. 18:47

코드의 재사용에 있어서 객체지향 프로그래밍에서는 IS-A관계, HAS-A관계 2가지 방법이 있음

1. IS-A 관계(is a relationship : inheritance)

 

  • 일반적인(general) 개념과 구체적인(specific) 개념과의 관계
  • 상위 클래스 : 하위 클래스보다 일반적인 개념 ( 예: Employee )
  • 하위 클래스 : 상위 클래스보다 구체적인 개념들이 더해짐 ( 예: Engineer, Manager...)
  • 상속은 클래스간의 결합도가 높은 설계
  • 상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있음
  • 계층구조가 복잡하거나 hierarchy가 높으면 좋지 않음

 

2. HAS-A 관계 (composition)

 

  • 클래스가 다른 클래스를 포함하는 관계 ( 변수로 선언 )
  • 코드 재사용의 가장 일반적인 방법(포함하는 관계)
  • Student가 Subject를 포함하는
  • Library를 구현할 때 ArrayList 생성하여 사용
  • 상속하지 않음

 

 

다운캐스팅

 

  • 업캐스팅된 클래스를 다시 원래의 타입으로 형 변환
  • 하위 클래스로의 형 변환은 명시적으로 해야 함
  • 오브젝트 클래스로 반환되어야 하는 경우 형변환이 이루어지는데, 이때 다운캐스팅을 쓸수있음
  • 할수있다면  다운캐스팅보다는 오버라이딩으로 하기(코드가 깔끔함)
Customer vc = new VIPCustomer();          //업캐스팅 : 묵시적(implicit)
VIPCustomer vCustomer = (VIPCustomer)vc;  //다운캐스팅 : 명시적

 

 

 

instanceof를 이용하여 인스턴스의 형 체크

  • 원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드 맞으면 true 아니면 false를 반환