Java | 추상 클래스(Abstract Class)와 인터페이스(Interface)

바다·2023년 5월 30일
0

Java

목록 보기
6/18
post-thumbnail

추상 클래스(Abstract Class)

추상 클래스란?

  • 추상 메소드(메소드의 구현 코드가 없이, 메소드의 선언만 있는 불완전한 메소드)를 0개 이상 포함한 클래스
  • 불완전한 클래스
  • 스스로 자신의 생성자를 활용한 인스턴스 생성이 불가능 (new 불가능)
  • abstract 예약어를 사용

메소드 선언(declaration) : 반환타입, 메소드 이름, 매개변수로 구성
메소드 정의(definition) : 메소드 구현과 도일한 의미 구현부(body)를 가짐

추상 클래스의 구현

  • 메소드에 구현 코드가 없으면 abstract로 선언
  • abstract로 선언된 메서드를 가진 클래스는 abstract로 선언
  • 모든 메소드가 구현된 클래스라도 abstract로 선언되면 추상 클래스로 인스턴스화 할 수 없음
  • 추상 클래스의 추상 메소드는 하위 클래스가 상속하여 구현

추상 클래스 내의 추상 메소드 : 하위 클래스가 구현해야 하는 메소드
추상 클래스 내의 구현된 메소드 : 하위 클래스가 공통으로 사용하는 메소드(필요에 따라 하위 클래스에서 오버라이딩 해서 사용)

class abstract AbstractClass() {

	// 메소드의 바디가 없는 추상 메소드(불완전한 메소드)
    // 메소드의 헤더(접근 제어자, 예약어, 반환형, 메소드명, 매개변수)만 존재
    // 추상 메소드는 끝에 세미콜론을 붙여 주어야 함
	public abstract void method1();
    
    // 완전한 메소드
    public void method2() {}

추상 클래스의 사용 목적

  • 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함 (오버라이딩에 강제성을 부여)
  • 필수 기능을 정의해서 일관된 인터페이스를 제공하는 데 도움이 됨

인터페이스(Interface)

인터페이스란?

  • 모든 메소드가 추상 메소드로 선언됨 public abstract
  • 모든 변수는 상수로 선언됨 public static final
  • 추상 메소드와 상수 필드만 가질 수 있는 클래스의 변형체
  • 상속과 다르게 'implements' 키워드를 사용하며, '구현한다'는 표현을 사용한다.

인터페이스 선언

public interface Animal {
	public static final String name = "동물";
    public static final int = 100;
    
    public abstract void move();
    public abstract void eat();
    public abstract void bark();

인터페이스의 구현

public class Dog implements Animal {
	@Override
    public void move() {
    	System.out.println("강아지가 걷습니다.");
    }
    
    @Override
    public void eat() {
    	System.out.println("강아지가 먹습니다.");
    }
    
    @Override
    public void bark() {
    	System.out.println("강아지가 짖습니다. 멍멍!");
	}
  • 자바는 클래스의 다중 상속을 지워하지 않는다, 하지만 인터페이스는 여러 개를 구현할 수 있도록 다중 상속을 지원한다.
  • 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수는 없다.
  • 인터페이스르 구현한 클래스는 인터페이스형으로 선언한 변수로 형 변환할 수 있다.
Animal animal = new Dog();

인터페이스의 사용 목적

  • 다중 상속이 가능
  • 클래스나 프로그램이 제공하는 기능을 명시적으로 선언
  • 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능
  • 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로 개발 시간을 단축할 수 있음
  • 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능

추상 클래스와 인터페이스

공통점

  • 메소드의 선언만 있고, 구현 내용이 없다.
  • new 키워드를 통해 객체를 생성할 수 없으며, 상속받은 클래스가 반드시 선언된 추상 메소드를 구현해야 함

차이점

사용의도 차이점

추상 클래스 : IS-A "~이다"
인터페이스 : HAS-A "~을 할 수 있는"

공통된 기능 사용 여부

추상 클래스 : 공통으로 필요한 기능은 미리 작성해두고, 필요 시에만 오버라이딩
인터페이스 : 모든 메소드가 추상 메소드, 공통된 기능이 없을 때 사용하는 것이 편리

차이점 표로 정리하기

profile
ᴘʜɪʟɪᴘᴘɪᴀɴs 3:14

0개의 댓글