다형성(polymorphism) - 0817

안씅👩🏻‍💻·2022년 8월 17일
0
post-thumbnail

casting(강제형변환)의 정의

  • 부모 자식 클래스 간에 사용 가능
  • 자식 클래스타입 변수이름(인스턴스명) = (자식클래스타입) 부모 인스턴스; 형식
    • ex) Student s = (Student) p;
  • 힙메모리 관점에서 보면,
    • p는 힙 메모리에 원래 자식 인스턴스와 부모인스턴스가 존재, 형변환에 의해서 부모 인스턴스만 사용하는 경우
    • s로 강제형변환(casting)하면, 부모인스턴스 뿐만 아니라, 힙메모리에 있는 자식 인스턴스도 사용

다형성(polymorphism)

  • 다형성(polymorphism)은 class promotion과 method override의 결합

다향성(Polymorphism)의 조건

  • promotion 발생하면
    • 부모인스턴스 = 자식인스턴스
      ex) Parent parent = child;
  • 부모 메소드를 자식 메소드에서 override한 경우만 해당함.
  • 자동형변환과 overrid 모두 충족 될 때, 부모 메소드를 실행하는 것이 아니라, override된 자식 메소드를 실행함.

polymorphism 사용 방법

  1. 부모 자식 클래스 만들고 method override 시킴.
  2. 부모로 promotion시켜서 override된 method위주로 코딩함.

polymorphism 사용 목적

  • 소스코드를 재사용하기 위해서 사용함.
  • 소스코드를 수정할 경우에 수정 최소화 할 수 있음.

instanceof 사용 문법

  • if (A instanceof B )
    - A는 참조변수명(인스턴스) B는 검사할 클래스명
    A변수의 힙메모리에 B클래스의 인스턴스가 있으면 true return, 없으면 false return
    -true 이면, 검사한 타입으로 형변환이 가능하다는 의미.

!!! : casting(강제형변환) 할 때, 반스시 instanceof를 사용하여 강제형변환 가능한지 확인하세요.

추상클래스(abstract)

추상클래스(abstract)란?

  • 실체 클래스들의 공통되는 필드와 메소드를 정의한 클래스
  • 추상 클래스는 실제 클래스의 부모 클래스 역할을 함.
    • 단독 객체로는 쓰이지 않음
  1. class가 추상클래스로 선언되면 추상클래스를 직접 new를 사용하여 인스턴스 생성 불가
  2. 추상 클래스를 선언하려면,
    • 추상클래스를 부모로 한 자식 클래스를 new를 사용하여 인스턴스 만드는 것만 허용
  3. 추상 클래스 내부에 생서자는 있어야만 함
    • 자식클래스를 통해 부모인 추상클래스를 힙메모리에 인스턴스로 생성 후,
    • 부모 추상클래스의 생성자를 호출함.

추상클래스와 추상메소드를 사용하는 목적

  • 실체 클래스의 공통된 필드와 메소드의 이름을 통일할 목적을 갖음.
    • 실체 클래스의 설계자가 여러 사람일 경우에 필드와 메소드가 각기 다른 이름을 갖을 수 있기 때문에 사용함.
  • 실체 클래스를 작성할 때 시간을 절약할 수 있음.
    • 실체 클래스는 추가적인 필드와 메소드만 선언함.
  • 실체 클래스 설계 규격을 만들고자 할 때
    • 실체 클래스가 가져야 할 필드와 메소드를 추상 클래스에 미리 정의
    • 실체 클래스는 추상 클래스를 무조건 상속 받아 작성

추상 클래스(Abstract Class) 선언

  • New 연산자로 객체 생성하지 못하고 상속 통해 자식 클래스만 생성 가능함.

  • public abstract class 클래스명{ 필드, 생성자, 메소드} 형식

추상 메소드 오버라이딩

  • 추상 메소드는 메소드 이름은 동일하지만, 실행 내용이 실체 클래스마다 다른 메소드를 말함.
    ex) 추상메소드 : 동물 , 실행 내용 : 울음소리, 종...

추상 메소드 오버라이딩 구현

  1. 부모 클래스를 추상 클래스로 선언하고 추상메소드를 정의함.
  • 부모 추상 클래스가 마치 설계도만 주는 효과가 생김
  1. 자식 클래스에서 메소드의 실행 내용 오버라이딩(overriding) 작성함.
  • 실제 구현 책임은 자식 클래스에게 존재함
  • 실제 사용할 때, 자식 클래스를 인스턴스로 만들어 polymophism 개념으로 사용함.
profile
그냥 은근슬쩍 살다 가긴 싫어

0개의 댓글