Java : 다형성 정리

CO빈·2024년 12월 13일
0

백엔드

목록 보기
7/8
post-thumbnail

김영한의 실전 자바 - 기본편

다형성이란?

: 한 객체가 여러 타입의 객체로 취급될 수 있는 능력
다형적 참조의 한계

  • 부모 타입의 변수가 자식 인스턴스 참조할 수 있다.
  • 상속관계에서 부모 방향으로 찾아 올라갈 수 있지만 자식 방향으로 내려갈 수 없다 => 컴파일 오류

다형적 참조의 핵심은 부모는 자식을 품을 수 있다는 것!

🤔
그러나 다형적 참조가 왜 필요할까?
poly의 타입을 자식으로 하여 바로 사용하면 안될까란 의문이 들 수 있다.

다운캐스팅이란?

(타입)처럼 괄호와 그 사이에 타입을 지정하면 참조 대상을 특정 타입으로 변경할 수 있다.

일시적 다운캐스팅한다면?

((child) poly).childMethod();

업캐스팅의 경우 객체 생성 시 해당 타입의 상위 부모 타입은 모두 생성되므로 메모리 상에 인스턴스가 모두 존재하기 때문에 항상 안전하다.
반면, 다운캐스팅의 경우 객체 생성 시 부모 타입은 모두 함께 생성되지만 자식 타입은 생성되지않아 하위 타입의 인스턴스가 존재하지 않는다.

Parent parent = new parent();
Child child = (Child) parent // 캐스팅오류

instanceof

어떤 인스턴스를 참조하는지 알고싶다면 사용

다형성과 메서드 오버라이딩

변수는 오버라이딩이 안되며, 메서드는 가능하다?
-> ⭐️ 오버라이딩된 메서드는 항상 우선권을 가진다.⭐️

추상클래스

: 추상적인 개념을 제공하는 클래스며, 인스턴스가 존재하지 않고 상속 목적으로 사용되고 부모 클래스 역할을한다.

  • 추상 메서드 선언시, 메서드 앞에 abstract 키워드를 붙인다.
  • 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언
  • 추상 메서드는 상속 받는 자식 클래스가 반드시 오버라이딩 해서 사용
  • 바디가 없다.=> 다형성을 위해 껍데기 역할만 제공

인터페이스

  • 인터페이스의 메서드는 모두 public , abstract 이다.
  • 메서드에 public abstract 를 생략할 수 있다. 참고로 생략이 권장된다.
  • 인터페이스는 다중 구현(다중 상속)을 지원한다.
  • 인터페이스를 상속 받을 때는 extends 대신에 implements라는 구현을 사용

인터페이스를 사용하는 이유(제약, 다중구현)
: 인터페이스 메서드를 반드시 구현해라는 제약을 주기 위해서이다. 또한 부모를 여러명 두는 다중 구현이 가능하다.

좋은 객체 지향 프로그래밍?

추상화 캡출화 상속 다형성

다형성의 본질

인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경.
클라이언트 코드를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.

역할과 구현을 분리하여 확장 가능한 설계와 클라이언트에 영향을 주지 않는 변경가능한 설계를 하는 것이 중요 ⭐️

OCP(open-closed-principle)원칙

: 확장에는 열려있고, 변경에는 닫혀있다는 뜻
-> 다형성을 사용했기에 가능

전략 패턴(stategy pattern)

디자인 패턴 중 하나. 전략패턴은 알고리즘을 클라이언트 코드의 변경 없이 쉽게 교체할 수 있다.

0개의 댓글

관련 채용 정보