인터페이스와 추상 클래스

 

인터페이스(Interface)와 추상 클래스(Abstract Class)는 Java에서 추상화를 구현하는 두 가지 방법입니다. 이들은 객체 간의 계약을 정의하고, 다형성을 실현하는 데 사용됩니다.

1. 인터페이스(Interface)

인터페이스는 추상 메소드와 상수로 이루어진 추상 타입입니다. 인터페이스는 클래스가 구현해야 하는 메소드의 시그니처를 정의합니다. 클래스는 implements 키워드를 사용하여 인터페이스를 구현할 수 있습니다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public interface Drawable {
    void draw();
}
public class Circle implements Drawable {
    @Override
    public void draw() {
        System.out.println(“Drawing a circle.”);
    }
}
public class Rectangle implements Drawable {
    @Override
    public void draw() {
        System.out.println(“Drawing a rectangle.”);
    }
}
Drawable circle = new Circle();
circle.draw(); // Output: Drawing a circle.
Drawable rectangle = new Rectangle();
rectangle.draw(); // Output: Drawing a rectangle.
cs

2. 추상 클래스(Abstract Class)

추상 클래스는 하나 이상의 추상 메소드를 포함하는 클래스입니다. 추상 클래스는 abstract 키워드로 선언되며, 인스턴스화할 수 없습니다. 추상 클래스를 상속받은 하위 클래스는 모든 추상 메소드를 구현해야 합니다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public abstract class Shape {
    protected String color;
    public Shape(String color) {
        this.color = color;
    }
    public abstract double getArea();
}
public class Square extends Shape {
    private double side;
    public Square(String color, double side) {
        super(color);
        this.side = side;
    }
    @Override
    public double getArea() {
        return side * side;
    }
}
Shape square = new Square(“Red”5);
System.out.println(“Area: “ + square.getArea()); // Output: Area: 25.0
cs

3. 인터페이스와 추상 클래스의 차이점

인터페이스와 추상 클래스는 몇 가지 중요한 차이점이 있습니다.

  • 다중 상속: 클래스는 하나의 추상 클래스만 상속받을 수 있지만, 여러 개의 인터페이스를 구현할 수 있습니다.
  • 구현: 인터페이스는 모든 메소드가 추상 메소드이며 구현을 포함할 수 없습니다. 추상 클래스는 추상 메소드와 구현된 메소드를 모두 포함할 수 있습니다.
  • 필드: 인터페이스는 상수만 포함할 수 있습니다. 추상 클래스는 일반 필드도 포함할 수 있습니다.

4. 인터페이스의 기본 메소드(Default Methods)

Java 8부터는 인터페이스에 기본 메소드를 정의할 수 있습니다. 기본 메소드는 구현을 포함하며, 인터페이스를 구현하는 클래스에서 재정의할 수 있습니다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public interface Clickable {
    void click();
    default void doubleClick() {
        click();
        click();
    }
}
public class Button implements Clickable {
    @Override
    public void click() {
        System.out.println(“Button clicked.”);
    }
}
Button button = new Button();
button.click();       // Output: Button clicked.
button.doubleClick(); // Output: Button clicked. Button clicked.
cs

5. 함수형 인터페이스(Functional Interface)

함수형 인터페이스는 단 하나의 추상 메소드를 갖는 인터페이스입니다. 함수형 인터페이스는 람다 표현식과 메소드 참조에 사용될 수 있습니다. @FunctionalInterface 어노테이션을 사용하여 함수형 인터페이스를 나타낼 수 있습니다.

예제 코드

1
2
3
4
5
6
7
8
@FunctionalInterface
public interface Calculator {
    int calculate(int a, int b);
}
Calculator adder = (a, b) > a + b;
int result = adder.calculate(53);
System.out.println(“Result: “ + result); // Output: Result: 8
cs

 

인터페이스와 추상 클래스는 Java에서 추상화를 구현하는 강력한 도구입니다. 인터페이스는 객체 간의 계약을 정의하고 다중 상속을 지원하는 데 사용되며, 추상 클래스는 공통된 속성과 동작을 정의하고 코드 재사용을 촉진하는 데 사용됩니다. 이들을 적절히 활용하면 유연하고 확장 가능한 객체지향 설계를 구현할 수 있습니다.

관련사이트

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다