[java] 자바 추상 클래스와 인터페이스의 기능 확장 방법
자바에서 추상 클래스와 인터페이스는 다형성을 구현하는 데 중요한 역할을 합니다. 이들을 통해 많은 기능을 확장할 수 있습니다. 이번 기사에서는 자바 추상 클래스와 인터페이스를 확장하는 방법에 대해 알아보겠습니다.
추상 클래스 확장하기
자바 추상 클래스는 abstract
예약어를 이용하여 선언됩니다. 추상 클래스는 하나 이상의 추상 메서드를 포함할 수 있으며, 추상 메서드는 하위 클래스에서 구현될 수 있도록 선언된 메서드입니다. 추상 클래스를 확장하여 기능을 구현하기 위해서는 다음 단계를 따릅니다:
- 추상 클래스를 상속받는 구체 클래스를 생성합니다.
- 구체 클래스에서 추상 메서드를 오버라이드하여 구현합니다.
- 구체 클래스에서 필요한 추가 기능을 구현합니다.
아래는 추상 클래스를 확장하는 예시 코드입니다:
public abstract class Animal {
public abstract void sound();
public void sleep() {
System.out.println("동물이 잠을 잡니다.");
}
}
public class Cat extends Animal {
@Override
public void sound() {
System.out.println("야옹");
}
public void play() {
System.out.println("고양이가 놀고 있습니다.");
}
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
cat.sound(); // "야옹" 출력
cat.sleep(); // "동물이 잠을 잡니다." 출력
cat.play(); // "고양이가 놀고 있습니다." 출력
}
}
추상 클래스는 상속을 통해 확장되므로, 여러 개의 클래스에서 동일한 기능을 공유할 수 있습니다.
인터페이스 구현하기
자바 인터페이스는 추상 메서드의 집합으로 구성됩니다. 클래스는 인터페이스를 구현하는 것을 통해 인터페이스에 선언된 메서드를 구현할 수 있습니다. 인터페이스를 구현하기 위해서 다음 단계를 따릅니다:
- 구현 클래스를 생성하고,
implements
예약어를 이용하여 인터페이스를 구현합니다. - 인터페이스에 선언된 메서드들을 구현합니다.
아래는 인터페이스를 구현하는 예시 코드입니다:
public interface Printable {
void print();
}
public class Book implements Printable {
@Override
public void print() {
System.out.println("책을 인쇄합니다.");
}
}
public class Magazine implements Printable {
@Override
public void print() {
System.out.println("잡지를 인쇄합니다.");
}
}
public class Main {
public static void main(String[] args) {
Book book = new Book();
Magazine magazine = new Magazine();
book.print(); // "책을 인쇄합니다." 출력
magazine.print(); // "잡지를 인쇄합니다." 출력
}
}
인터페이스를 구현함으로써 클래스들은 동일한 인터페이스를 가진 책임을 공유할 수 있습니다.
결론
자바에서 추상 클래스와 인터페이스를 활용하여 기능을 확장하는 방법을 알아보았습니다. 추상 클래스는 상속을 통해 기능을 확장하며, 인터페이스는 구현을 통해 기능을 확장합니다. 이 두 가지 개념을 적재적소에 잘 활용하여 유연한 소프트웨어 디자인을 구현할 수 있습니다.
참고 자료: