٩(๑•̀o•́๑)و

20200305 본문

Java

20200305

11mia 2020. 3. 6. 01:13

다형성(polymorphism)

  • 하나의 코드가 여러 자료형으로 구현되어 다른 실행으로 이어지는것
  • 같은 코드에서 여러 실행결과가 나옴
  • 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
  • 객체지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징
  • 다양한 여러 클래스를 하나의 자료형(상위 클래스)으로 선언하거나 형변환 하여 각 클래스가 동일한 메서드를 오버라이딩 한 경우, 하나의 코드가 다양한 구현을 실행할 수 있음
  • 유사한 클래스가 추가되는 경우 유지보수에 용이하고 자료형마다 다른 메서드를 호출하지 않으므로 코드에서 많은 if 문이 사라짐

상속은 언제 사용?

  1. IS-A 관계일 경우(is a relation shop : inheritance)
  • 일반적인(general)한 개념과 구체적인(specific)개념과의 관계일 경우
  • 상위 클래스 : 일반적인 개념 클래스(ex. 동물)
  • 하위 클래스 : 구체적인 개념 클래스(ex. 고양이)
  • 단순히 코드를 재사용하는 목적으로 사용하지 않음. 클래스간의 상속관계가 만들어지만 클래스간의 관계가 굉장히 타이트해지면서 메서드의 추가로 인하여 서로간에 영향을 줄 수 있기때문에 단순히 코드를 재사용하려는 목적으로는 상속관계를 만들지 않음
  1. HAS-A관계(composition)
  • 한 클래스가 다른 클래스를 소유한 관계. 포함해서 사용
  • 코드 재사용의 한 방법. 많이 사용되는 방법
  • ex. Student 클래스가 Subject 클래스를 포함한 관계

==> 상속을 사용할 경우 클래스간의 관계가 굉장히 타이트해진다는 것에 유의. 

업캐스팅 : 하위 클래스에서 상위 클래스로 형변환. 묵시적으로 이루어짐. 이 경우에는 상위클래스에 정의된 변수, 메서드에만 접근이 가능. ex) 상위클래스변수 = new 하위클래스();

다운캐스팅 : 형변환이 된 상태에서(업캐스팅된 상태에서) 다시 원래의 데이터 타입으로 돌아가는것. 명시적

 

명시적 vs 묵시적

상위 클래스변수 = new 하위클래스(); // 묵시적

하위클래스변수 = (하위클래스)상위클래스변수; //명시적 

 

다운 캐스팅

  • 묵시적으로 상위 클래스로의 형변환된 인스턴스가 원래 자료형(하위 클래스)으로 변환되어야 할 때 다운캐스팅이라고함
  • 업캐스팅된 상태에서는 하위클래스에만 정의되어있는 매개변수, 메서드에 접근이 불가함. 이에 접근하려면 다시 원래의 하위클래스타입으로 형변환이 이루어져야함 = 다운캐스팅
  • 하위 클래스로의 형 변환은 명시적으로 되어야함.
  • ex. Employee emp = new PartTimer(); PartTimer partTimer = (PartTimer) emp;
  • 이 경우 캐스팅하려는 타입과 이를 받아주는 변수의 타입이 일치하는지만 확인.

 

instanceof 

  • true / false를 반환
  • 변수 instanceof 클래스
  • 변수가 클래스 타입의 인스턴스가 맞는지 확인
  • Object타입으로 변환받아 원래형으로 변환할때 instance of 를 한번씩 해보는게 안정적
  • 다운캐스팅 오류로 인해 프로그램이 죽는 것을 방지할 수 있음

타입캐스팅으로 처리할 수도 있지만 오버라이딩으로 하면 좀 더 flexible함.

오버라이딩으로 처리하기 어려울 경우 타입캐스팅으로 처리를 하되 안정성을 위하여 instanceof 한번 체크를 해주기

 

 

 

 

'Java' 카테고리의 다른 글

20200307 - 인터페이스  (0) 2020.03.07
20200306  (0) 2020.03.06
20200304  (0) 2020.03.05
20200303  (0) 2020.03.03
20200301  (0) 2020.03.01