추상클래스와 인터페이스 차이

노을·2022년 3월 10일
0

java

목록 보기
8/9
post-thumbnail

인터페이스와 추상클래스의 차이를 보기 전에
먼저 추상메소드가 무엇인지 알아보자.


추상메소드

선언부는 있는데 구현부가 없는 메소드

용도

  • 메서드의 내용이 너무 일반적인 내용이라 부모클래스에서 구체화하여 정의할 필요가 없을 경우

추상메소드 형식

  • 어떠한 클래스(인터페이스)에 추상메소드가 있으면, 그 클래스(인터페이스)를 상속받는 실체클래스가 메소드를 오버라이드 해야 한다.
public abstract class Animal {
    abstract void sound();
}
public class Dog extends Animal
{
		@Override
    void sound() {
        System.out.println("멍멍!");
    }
}



추상클래스

관련성이 높은 클래스 간 공통적인 특성을 추출한 클래스

한 개 이상의 추상메서드를 가지는 클래스

용도 - 중복 제거

  • 추상클래스 코드를 상속받아 실체 클래스를 작성할 때 시간을 절약할 수 있다.
  • 같은 기능을 하는 메소드와 같은 속성인 필드의 이름을 통일하기 위해서
    • 예를 들면 전원을 켜는 메소드는 Telephone에서 turnOn()으로, SmartPhone에서는 powerOn()으로 설계하는 경우 → 객체마다 사용 방법이 달라진다.

추상클래스 형식

  • 클래스 앞에 abstract를 붙인다.
  • new 연산자로 새로운 객체를 만들지 못함.
  • 하지만 자식객체가 생성될 때 super()를 호출하기 때문에 생성자가 있어야 함.
public abstract class Animal {
		//필드
		//생성자
		//메소드
}
public class Dog extends Animal{
		public Dog(){
				super(); //부모클래스의 생성자 호출해야 함.
		}
}



인터페이스

여러 클래스들이 지켜야 하는 규약

클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장한다.

용도 - 확장

  • 다양한 객체의 ‘사용방법’을 통일하고 싶을 때 사용한다. 사용방법을 통일하면 나중에 객체를 쉽게 갈아끼울 수 있다.
  • 사용방법을 통일하면 나중에 코드 수정 없이 객체를 바꿔줄 수 있다.
    • 예시 : 고양이 캐릭터를 강아지 캐릭터로 바꾸고 싶을 때, Cat 클래스의 메소드나 속성을 바꿔야 한다.(코드 수정 필요) 근데 Animal 이라는 인터페이스를 만들어 Cat, Dog 클래스가 상속 받게 하면 Cat 클래스를 수정하지 않고 Dog 클래스를 새로 만들어 객체만 갈아끼우면 된다.
      Animal animal = new Cat(); //기존 Cat 객체
      Animal animal = new Dog(); //Dog 객체로 코드 수정 없이 바꾸기

인터페이스 형식

  • 상수와 추상메소드만 가진다. 이때 abstract 키워드 생략 가능
  • 모두 구현클래스에서 메소드를 재정의하기 때문에 다중상속이 가능하다.
public interface Animal{
		//상수

		//추상메소드
		public void sound();
}
public class Dog implements Animal {

		//실체메소드
		@Override
		public void sound(){
				System.out.println("멍멍");
		}
}




정리

인터페이스(최소한의 약속)

  • 확장을 위해 쓴다.
  • 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용한다.
  • 다중상속이 가능하다.
  • 모든 메서드를 구현클래스에서 재정의 해야 한다.

추상클래스(공통 부분 추상화)

  • 공통적인 특성을 추출하여 추상화를 하기 위해 쓴다.
  • 기능을 물려받으면서 일부는 바꿔서 사용하고 싶을 때 상속받는다.

0개의 댓글