extends와 implements는 Java와 같은 객체 지향 프로그래밍 언어에서 주로 사용되는 키워드입니다. 두 키워드는 클래스가 다른 클래스 또는 인터페이스와 어떤 관계를 가지고 있는지를 정의합니다.
extends 키워드는 클래스가 다른 클래스를 상속받을 때 사용됩니다. 즉, 한 클래스가 다른 클래스의 속성과 메서드를 물려받기 위해 extends 키워드를 사용합니다. 이를 통해 코드의 재사용성이 향상되고, 코드의 중복을 줄일 수 있습니다. 자바에서는 단일 상속만 지원하기 때문에 한 클래스는 한 번에 하나의 클래스만 상속받을 수 있습니다.
public class ChildClass extends ParentClass {
// ChildClass now inherits the methods and fields of ParentClass
}
우리는 "동물"이라는 기본 클래스를 가지고 있습니다. 그리고 "고양이"라는 클래스가 "동물" 클래스를 상속받도록 만들 수 있습니다. 이 경우, "동물" 클래스에 정의된 모든 속성과 메서드는 "고양이" 클래스에서도 사용할 수 있습니다.
class Animal {
void eat() {
System.out.println("Eating...");
}
}
class Cat extends Animal {
void meow() {
System.out.println("Meowing...");
}
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat(); // 메서드 from Animal class
cat.meow(); // 메서드 from Cat class
}
}
이 코드를 실행하면, "Eating..."과 "Meowing..."이 출력됩니다. eat() 메서드는 Animal 클래스에서 상속받은 것이고, meow() 메서드는 Cat 클래스에서 정의한 것입니다.
implements 키워드는 클래스가 인터페이스를 구현할 때 사용됩니다. 인터페이스는 메서드 선언을 포함하지만 구현 내용은 없는 추상 타입입니다. implements 키워드를 사용하면 클래스는 인터페이스에서 선언된 모든 메서드를 구현해야 합니다. 자바에서는 다중 인터페이스 구현이 가능하여, 클래스는 여러 인터페이스를 구현할 수 있습니다.
public class SomeClass implements SomeInterface {
// SomeClass must implement all methods declared in SomeInterface
}
"비행 가능한"이라는 인터페이스가 있습니다. "새" 클래스는 이 인터페이스를 구현할 수 있습니다. 이 경우, "새" 클래스는 "비행 가능한" 인터페이스에서 선언된 모든 메서드를 구현해야 합니다.
interface Flyable {
void fly();
}
class Bird implements Flyable {
public void fly() {
System.out.println("Flying...");
}
}
public class Test {
public static void main(String[] args) {
Bird bird = new Bird();
bird.fly(); // 메서드 from Flyable interface
}
}
이 코드를 실행하면, "Flying..."이 출력됩니다. fly() 메서드는 Flyable 인터페이스에서 정의된 것을 Bird 클래스가 구현한 것입니다.
이 두 키워드는 클래스와 클래스, 클래스와 인터페이스 간의 관계를 정의하는 데 중요한 역할을 합니다. 이를 통해 객체 지향 프로그래밍의 주요 특징인 상속성과 다형성을 실현할 수 있습니다.