본문 바로가기
IT/java

자바 추상클래스와 인터페이스: 다형성을 위한 핵심 도구들

by 뉴코딩맨 2023. 6. 7.
자바는 추상클래스와 인터페이스라는 기능을 제공하여 다형성을 구현할 수 있도록 합니다. 추상클래스와 인터페이스는 객체지향 프로그래밍에서 중요한 역할을 수행하며, 이 두 가지 개념에 대해 자세히 알아보고 예제를 통해 설명하겠습니다.

 

 

추상클래스 (Abstract Class)

추상클래스는 실체 클래스의 공통된 특성을 추상화하여 정의한 클래스입니다. 추상클래스는 직접 인스턴스화할 수 없고, 상속을 통해 자식 클래스에서 구체화됩니다. 추상클래스는 추상 메서드와 일반 메서드를 포함할 수 있으며, 추상 메서드는 자식 클래스에서 반드시 구현되어야 합니다.

 

다음은 추상클래스의 예시입니다.
 
abstract class Shape {
    protected int width;
    protected int height;

    public Shape(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public abstract double calculateArea();

    public void display() {
    	System.out.println("도형을 그립니다.");
    }
}
 
위의 예제에서 Shape 클래스는 추상클래스로 선언되었습니다. calculateArea() 메서드는 추상 메서드로 선언되어 자식 클래스에서 반드시 구현되어야 합니다. 또한 display() 메서드는 일반 메서드로 추상클래스 내에서 직접 구현되었습니다.
 
 

인터페이스 (Interface)

인터페이스는 클래스가 구현해야 하는 동작을 정의하는 역할을 합니다. 인터페이스는 추상 메서드, 상수, 디폴트 메서드, 정적 메서드를 포함할 수 있으며, 다중 상속이 가능합니다. 클래스가 인터페이스를 구현하기 위해서는 implements 키워드를 사용해야 합니다.
 
다음은 인터페이스의 예시입니다.
 
interface Drawable {
	void draw();
}

class Rectangle implements Drawable {
    public void draw() {
    	System.out.println("사각형을 그립니다.");
    }
}

class Circle implements Drawable {
    public void draw() {
    	System.out.println("원을 그립니다.");
    }
}
 
위의 예제에서 Drawable 인터페이스는 draw() 메서드를 정의하고 있습니다. Rectangle 클래스와 Circle 클래스는 Drawable 인터페이스를 구현하여 draw() 메서드를 재정의하고 있습니다. 이렇게 인터페이스를 구현한 클래스는 동일한 동작을 수행할 수 있게 됩니다.
 
 

추상클래스 vs 인터페이스

추상클래스와 인터페이스는 모두 다형성을 구현하는 도구로서 중요한 역할을 합니다. 그러나 둘 사이에는 몇 가지 차이점이 있습니다.
 
추상클래스는 단일 상속만 가능하지만, 인터페이스는 다중 상속이 가능합니다.
추상클래스는 일반 메서드와 추상 메서드를 모두 가질 수 있지만, 인터페이스는 추상 메서드, 상수, 디폴트 메서드, 정적 메서드만 가질 수 있습니다.
추상클래스는 인스턴스화될 수 없지만, 인터페이스는 인스턴스화될 수 없습니다.
 
 

예제

다음은 추상클래스와 인터페이스를 사용한 예제입니다.
 
abstract class Animal {
	public abstract void makeSound();
}

interface Jumpable {
	void jump();
}

class Cat extends Animal implements Jumpable {
    public void makeSound() {
    	System.out.println("야옹~");
    }

    public void jump() {
    	System.out.println("뛰어오르다!");
    }
}
 
위의 예제에서 Animal 추상클래스는 makeSound() 추상 메서드를 가지고 있으며, Jumpable 인터페이스는 jump() 메서드를 정의하고 있습니다. Cat 클래스는 Animal을 상속받고 Jumpable 인터페이스를 구현하여 추상 메서드와 인터페이스의 메서드를 모두 구현하고 있습니다.

 

 

마무리

자바의 추상클래스와 인터페이스에 대해 알아보았습니다. 추상클래스는 실체 클래스의 공통된 특성을 추상화하여 정의하고, 인터페이스는 클래스가 구현해야 하는 동작을 정의합니다. 이러한 개념들을 통해 다형성을 구현할 수 있으며, 코드의 유연성과 재사용성을 높일 수 있습니다.
 

댓글