다형성

01_49g_63m·2024년 3월 28일
post-thumbnail

다형성

다운 캐스팅 - 부모가 자식을 가리킴

업 캐스팅 - 자식이 부모를 가리킴

자식 1, 자식 2 … 자식마다 (성격,성품,능력)이 다 다르기 때문에
부모가 자식의 타입에 맞춰줘야 함

= 강제 형 변환 → 다운 캐스팅 (상위 클래스의 타입을 하위 클래스의 타입으로 바꿈)

반대로, 자식이 부모를 가리킬 때는 타입 상관 없음 왜냐면 부모는 큰 개념 , 자식은 작은 개념이기 때문에 = 자동 형변환 → 업 캐스팅

  • 업 캐스팅이 선행 되어야 다운 캐스팅이 됨

  • 부모는 여러 명의 자식을 가리킬 수 있음

다운 캐스팅 시 유의할 점

Cat c = (Cat) x;
c.night();

여기서

(Cat) x.night(); 

위와 같은 형식의 다운 캐스팅은 불가하다.

why?

'.' 참조 연산자가 우선순위가 높기 때문에 (Cat) 캐스팅 보다 먼저 실행된다.

이럴 경우엔

((Cat) x).night();

이렇게 괄호( ) 하나를 더 생성해서 써야 한다.

다형성

: 상위 클래스가 동일한 메시지로 하위 클래스를 서로 다르게 동작 시키는 객체지향 이론

[다형성 전제 조건]

  1. 상속관계
  2. Override(재정의) (중요하다!)
  3. Upcasting (업캐스팅)
  4. 동적 바인딩

동적 바인딩 (오버라이딩)

: 실행 시점에서 사용될(호출될) 메서드가 결정되는 바인딩

-> 프로그램의 실행 속도와 관계 있음
실행 시점에서 사용될 메서드를 찾아가야 하기 때문에

정적 바인딩 (오버로딩)

: 컴파일 시점에서 사용될 메서드가 이미 결정되는 바인딩

-> 프로그램의 실행 속도와 관계 없다.

다형성을 보장한다는 말은...

부모가 자식에게 명령을 내리면 자식은 반드시 무조건 동작 해야 한다는 말과 같다.

문제를 풀어보자

1.  다음 중 다형성에 대한 설명으로 가장 옳은 것은?

a) 하나의 메서드/변수가 상황에 따라 다양한 의미를 지닐 수 있는 것

b) 상속관계를 통해 코드를 재사용하는 것

c) 인터페이스를 통해 객체 간의 상호작용을 정의하는 것

d) 여러 개의 객체에 대하여 동시 작업이 이루어지는 것

  1. 다형성의 전제조건으로 옳지 않은 것은?

a) Inheritance relationship (상속관계)

b) Overriding (메소드 재정의)

c) Upcasting (상향 형변환)

d) Static binding (정적 바인딩)

profile
CODING, AND MANY MORE

0개의 댓글