자바 이론# 다형성2

codePark·2020년 5월 19일
0

Java-이론편

목록 보기
3/6
  1. 서론:
    오버라이드 된 메소드가 있을 경우에는 부모타입으로 제어할 때라도 자식 타입의 오버라이드 된 메소드가 호출되며, 이 것이 실행 시간에 동적으로 바뀌기 때문에 동적 바인딩이라고 한다. 이 때, must implement(must Override)의 메소드가 있다면 부모 타입에서 이 메소드 구현을 강제할 수 있다. 부모 클래스/메소드에서 abstract를 통해 메소드 구현을 강제하였을 때 자식 클래스가 이를 구현하지 않는다면 compile 에러가 발생한다.

  2. 구현의 강제화:
    public method를 추상 메소드로 만들 수 있다. -> public abstract void say(파라미터 선언 가능); body 부분이 없는 것이 특징이며, 클래스 역시 같은 abstract로 생성해야 한다.
    ex.
    public abstract class test{
    public anstract void say();
    }

  3. 추상 클래스 & 인터페이스:
    공통점: 추상 메소드를 통해 구현을 강제할 수 있으며 객체화 할 수 없다.
    3-1. 추상 클래스:
    추상 메소드를 가지고 있는 일반 클래스이다. 따라서 일반적인 메소드의 구성요소인 필드, 메소드 등을 가질 수 있으며 이를 상속을 통해 자식 클래스에 물려줄 수 있다. 또한 추상 메소드는 0개 이상 가질 수 있다. 이 말은 곧, abstract 클래스로 선언하면서 동시에 abstract 메소드를 가지지 않을 수 있으며, 이러한 경우는 새로운 메소드 생성을 막기 위해 쓰인다. 반면에 abstract 메소드를 가지고 있다면 해당 메소드의 클래스는 반드시 abstract 클래스이어야 한다.
    3-2.추상 메소드:

    메소드 선언부(접근제한자, 리턴타입, 메소드명, 파라미터)만 있으며 이들의 작성은 필수이고, 몸통({구현부})이 없다. 추상메소드는 다른 이름으로는 미완성 메소드로 불리기도 하며, 이 미완성 메소드를 자식 클래스가 강제로 구현하도록 한다.

    3-3. 추상화와 구체화:
    구체적인 것들로부터 공통의 특성을 뽑아 내는 것이 추상화이다. 이에 반해 보다 대략적인 것들로부터 세부적인 사항들을 구현하는 것이 구체화이다. 즉 추상화는 대략적인 메소드를 부모 클래스가 선언해 두고, 이들의 구체화는 자식 메소드에게 맡긴다는 것으로 이해할 수 있다.

  4. 인터페이스
    미완성 추상 메소드와 상수를 가진 추상메소드의 변형체. 일반 클래스는 인터페이스를 구현할 수 있으나, 추상 메소드는 반드시 오버라이딩 해야 한다. 이는 상속과 다르게 갯수의 제한 없이 다중 구현할 수 있다. 인터페이스 간의 구현은 상속으로 처리하며 하나의 부모 클래스처럼 사용이 가능하다.
    ex.
    class A implements B, C{}
    ex.
    interface A extends B,C,D

    4-1. 자식 클래스에게 물려줄 필드나 메소드가 있으면 추상 클래스, 그렇지 않으면 인터페이스를 사용하는 것이 좋다.

profile
아! 응애에요!

0개의 댓글