08-04 다형성

 

묵시적 클래스 형 변환과 가상 메서드를 사용한 객체지향의 주요 특징

= 하나의 코드가 여러 자료형으로 구현되어 실행되는 것

 

class Animal{ public void move() { "동물" 출력 }  }

class Tiger extends Animal { public void move() { "호랑이" 출력 } }

public class Test { .. public void moveAnimal(Animal animal) { animal.move() } }

가상 메서드 원리에 따라 호출되는 메서드는 자료형의 클래스의 메서드가 아니라 실제 인스턴스의 메서드다.

-> 어떤 매개변수가 넘어오더라도 자료형은 모두 Animal형으로 변환하지만, animal.move()는 실제 인스턴스에 따라 출력이 달라진다.

 

다형성의 장점? 

1) 프로그램의 확장성

2) 유지보수성

: 각 자료형에 따라 다르게 구현한다면 코드는 복잡해짐, 상위에서 공통 메서드 구현하고 하위에서 추가요소를 덧붙여 구현하면 각 클래스의 여러가지 구현도 할 수 있고(=확장성) 유지보수도 하기 쉬워짐

 

만약 재정의한 메서드가 가상 메서드 방식에 의해 자동으로 호출되지 않는다면 if-else if 문을 사용해서 따로 구현해야 할 것이다. 게다가 새로운 조건이 필요한 경우에는 또 다른 조건으로 구현해야 하기 때문에 코드의 유지보수가 어려워질 수 있따.

 

상속은 언제 사용할까?

IS-A (is a relationship; inheritance) : 일반적인 개념과 구체적인 개념

즉 일반 클래스를 점차 구체화하는(=확장되는) 상황에서 상속을 사용하는 것이다.

이질적인 클래스 간에는 상속을 사용하지 않는 것이 좋다

 

어떤 경우에 상속을 사용하지 말아야 할까?

HAS-A (has a relationship; association) : 한 클래스가 다른 클래스를 소유한 관계

예) Subject는 Student에 포함되는 것이기 때문에 상속을 사용해선 안됨

class Student { Subject majorSubject; }

 

알고가자!)  상속을 재사용의 개념으로 이해해선 안된다!

재사용할 수 있는 코드가 있다고 해서 무조건 상속을 하면 클래스 간의 결합도가 높아져서 오히려 상위 클래스의 변화가 하위 클래스에 미치는 영향이 커지게 된다. 결합도는 낮추고 응집도는 높이는 방향으로 소프트웨어는 설계되어야 함!

 

알고가자!)  여러 클래스를 한번에 상속받을 수는 없다. extends 뒤에는 상위 클래스 '하나만' 가능하다.

 

 


"Do IT! 자바 프로그래밍 입문" 책을 읽고 요약하는 글입니다.

p.259~272

 

'CS 공부 > JAVA' 카테고리의 다른 글

[JAVA] 상속과 다형성 (3)  (0) 2023.07.16
[JAVA] 상속과 다형성 (1)  (0) 2023.06.26
이클립스 실행 오류...  (0) 2022.01.13
객체지향..ER다이어그램...  (0) 2021.02.21
5장 클래스 분리  (0) 2021.02.19

+ Recent posts