본문 바로가기

개발/이론

[JAVA] 추상클래스와 인터페이스 / 상속과 다형성

 

1) 클래스는 크게 일반 클래스와 추상 클래스로 구분,

    그 중 추상 클래스 : 클래스 내  '추상 메소드' 가 하나 이상 포함되거나 abstract로 정의된 경우

                      : 여러 메소드가 존재, 따라서 그대로 가져다 쓰거나, 오버라이드 하거나,  abstract 가 붙은 메소드만 반드시 구현해주면 되는 게 추상 클래스

 

2) 인터페이스는 모든 메소드가 추상 메소드인 경우

: 미리 이런 메소드들을 사용할 것이라고 인터페이스에 선언해두고,  상속 시 안에 선언된 모든 메소드들을 구현하면 되는게 인터페이스

 

-> 결국 둘 다 상속 받은 자식이 반드시 구현을 하도록 만들 때 사용

-> 스스로 new 로 객체 생성이 불가능

 

한마디로 둘의 차이는 ?

추상 클래스는 클래스를 상속 받아 기능을 이용 및 확장,

-> 상속 (Inherit) 의 개념

인터페이스는 껍데기만 존재 -> 구현을 강제시켜 구현 객체의 동일 동작을 보장

-> 다형성 (Polymorphism) 의 개념

 

 

비슷해보이는 추상 클래스와 인터페이스인데 왜 구분을 했을까?

왜냐하면 자바는 다중 상속이 불가, 다중 상속의 모호성 때문에 하나만 상속 가능

한 마디로, extends A, B  불가능

class Color extends Blue, Red {

      @Override

      pulic void coloring() {

            super.Add();

      }

}

 

추상 클래스와 상속 클래스의 예

public abstract class Shape() {

      protected Point center;

 

      protected Shape(Point center) {

         this.center = center;

      }

      public Point getCenter() {

         return center;

      }

      public abstract void draw();    //추상 메소드

}

 

public class Rectangle extends Shape {

      private int height;

      private int width;

   

      public Rectangle(Point center, int weight, int height) {

         super(center);

         this.width = width;

         this.height = height;

      }

   // 부모 클래스 (Super Class) 인 Shape 에서 abstract 통해 상속 받은 클래스는 반드시 구현

      public void drawGraphics g) {

          @doSomething

      }  

}

 

 

그러나 인터페이스 여러개 구현은 가능 즉, implements A, B  가능

class Animals implements Cat, Dog {

      @Override

       public void eating() {

           @doSomething

       }

}

 

 

따라서,

추상 클래스는 부모가 가진 기능을 물려받으면서 오버라이드할 수 있는 상속을 위한 틀

인터페이스는 다형성을 제공해주는 반드시 구현해야하는 메소드들을 포함한 틀

이라고 정리할 수 있을 것 같다.

 

 

 

참고

https://loustler.io/languages/oop_inheritance_and_polymorphism/

https://marobiana.tistory.com/58

https://brunch.co.kr/@kd4/6