본문 바로가기

#기본개념

추상클래스와 인터페이스의 차이가 무엇일까?(추상메소드란 뭘까?)

반응형

추상클래스와 인터페이스의 차이가 무엇일까?(추상메소드란 뭘까?)

 

 

 

 

 

 

 

 

[작성자의 다른 글 보러가기: 'Spring에 대해 알아보자 (#MVC패턴? / #Spring의 계층 구조?)']

 


 

 

개요

 

추상클래스나 인터페이스 둘 다 상속을 위한 클래스로 사용되는 것 같은데, 두개의 차이가 무엇일까?

보다 명확하게 이해하고 넘어가도록 하기위해 이번 피드를 작성해보기로 합니다.

이 두가지의 차이점을 살펴보기에 앞서, 그렇다면 추상메소드란 무엇일까? 라는점에 대해 알아보고

이후에 두 가지를 비교해보도록 하겠습니다.

 

 

목차

 

1. 추상메소드란 무엇일까?

2. 추상클래스란 무엇일까?

3. 인터페이스란 무엇일까?

4. 추상클래스와 인터페이스의 차이는 무엇일까?

 

 

 

 

 


 

 

 

추상메소드란 무엇일까?

 

자바에서 추상이란 구체화와 반대되는 구체적이지 않은 대략적인 미완성을 의미한다. 추상은 abstract라는 제어자를 붙이며 선언할 수 있다. 그리고 추상의 능력을 붙여줄 수 있는 것은 클래스와 메소드이다.

여기서 추상메소드란 형태적으로는 abstract 제어자를 달고 구현부가 없는 메소드를 의미한다.

 

ex> 일반메소드 :  

          public int test(int y) {

               return y;  }

 

ex> 추상메소드 : 

          public int test(int y);

 

 


 

# 추상메소드가 필요한 이유와 사용법

 

코드의 표준화와 중복을 방지하고 작업효율화를 높여줄 수 있기 때문이다.

추상메소드는 구현부가 없는 미완성인 관계로 그 자체로 단독으로 써줄 수 없다.

추상메소드를 사용하기 위해서는 다음과 같이 해야한다.

 

  • 추상메소드가 있는 추상클래스를 일반 클래스에서 상속한다.
  • 추상메소드를 일반클래스 내에서 오버라이딩으로 구현한다.

 

이 과정에서 추상메소드는 구현부가 없으므로 상속받은 자손 클래스마다 구현부를 다르게할 수 있다.

즉, 추상메소드는 코드를 짤 때 메소드에 대한 최소한의 가이드라인 역할을 하게되는 것이다.

 

 

 

 

 


 

 

# 추상클래스란 무엇일까?

 

추상클래스는 일반클래스와 크게 다른 것은 없다. 단지, 추상메소드를 선언하여 상속을 통해서 자손클래스에서 완성하도록 유도하는 클래스이다. 그래서 미완성 설계도라고도 표현한다. 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없으며 class 앞에 "abstract"예약어를 사용한다.

 

ex>  abstract class test {

            public abstract void testMethod();  }

 

 

 

 


 

 

 

# 인터페이스란 무엇일까?

 

추상클래스가 미완성 설계도라면 인터페이스는 기본 설계도라고 할 수 있다. 인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하지만 추상클래스와의 큰 차이점은 다중상속(구현)이 가능하다는 점이다.

 

ex> interfact test {

     public abstract void testMethod();  }

 

 

 


 

 

 

# 추상클래스와 인터페이스의 차이점은 무엇일까?

 

위에 살펴본것처럼 두가지는 비슷한 형태인것처럼 보이고, 공통적으로 추상메소드를 사용할 수 있다는 점이다. 

그런데 왜 굳이 2가지로 나눠서 사용할까? 추상클래스와 인터페이스의 기능들을 살펴보면 추상클래스가 인터페이스의 역할을 다 할 수 있는데 왜 굳이 인터페이스라는게 있어야 하는걸까?

 

이론적인 차이점을 다 제외하고 두개로 나눠서 사용하는 가장 큰 차이점은 사용용도라고 할 수 있다.

 

 

 

1. 사용의도 차이점

 

 

추상클래스는 IS - A "~이다".

인터페이스는 HAS - A "~을 할 수 있는".

 

이렇게 구분하는 이유는 다중상속의 가능 여부에 따라 용도를 정한다. 자바의 특성상 한개의 클래스만 상속이 가능하여 해당 클래스의 구분을 추상클래스 상속을 통해 해결하고, 할 수 있는 기능들을 인터페이스로 구현한다.

 

 

 

2. 공통된 기능 사용 여부

 

 

만약 모든 클래스가 인터페이스를 사용해서 기본틀을 구성한다면 공통으로 필요한 기능들도 모든 클래스에서 오버라이딩하여 재정의 해야하는 번거로움이 있을 것이다. 이렇게 공통된 기능이 필요하다면 추상클래스를 이용해서 일반메소드를 작성하여 자식 클래스에서 사용할 수 있도록 하면 된다. 

 

 

 


 

 

 

요약

 

# 추상클래스 사용 시기 : 상속 관계를 쭉 타고 올라갔을 때 같은 조상클래스를 상속하는데 기능까지 완벽히 똑같은 기능이 필요한 경우에 사용한다.

 

#인터페이스 사용 시기: 상속 관계를 쭉 타고 올라갔을 때 다른 조상클래스를 상속하는데 같은 기능이 필요할 경우 인터페이스를 사용한다.