이번 포스팅에서는 자바에서 중요한 개념인 인터페이스와 추상 클래스에 대해 알아보겠습니다. 이 두 개념은 객체 지향 프로그래밍에서 매우 중요한 역할을 하며, 코드의 재사용성과 유연성을 높이는 데 큰 도움이 됩니다.
1. 추상 클래스 (Abstract Class)
1.1. 추상 클래스란?
추상 클래스는 인스턴스를 생성할 수 없는 클래스입니다. 즉, 직접 객체를 만들 수 없고, 다른 클래스에서 상속받아 사용해야 합니다. 추상 클래스는 일반 메서드와 추상 메서드를 가질 수 있습니다. 추상 메서드는 구현이 없는 메서드로, 이를 상속받는 클래스에서 반드시 구현해야 합니다.
1.2. 추상 클래스의 예제
// 추상 클래스 정의
abstract class Animal {
// 일반 메서드
void eat() {
System.out.println("이 동물은 먹고 있습니다.");
}
// 추상 메서드
abstract void sound();
}
// Animal 클래스를 상속받는 Dog 클래스
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍!");
}
}
// Animal 클래스를 상속받는 Cat 클래스
class Cat extends Animal {
@Override
void sound() {
System.out.println("야옹!");
}
}
// 메인 클래스
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.eat(); // 출력: 이 동물은 먹고 있습니다.
dog.sound(); // 출력: 멍멍!
Animal cat = new Cat();
cat.eat(); // 출력: 이 동물은 먹고 있습니다.
cat.sound(); // 출력: 야옹!
}
}
1.3. 추상 클래스의 특징
-인스턴스를 생성할 수 없다.
-일반 메서드와 추상 메서드를 가질 수 있다.
-상속을 통해서만 사용할 수 있다.
2. 인터페이스 (Interface)
2.1. 인터페이스란?
인터페이스는 클래스가 구현해야 하는 메서드의 집합을 정의합니다. 인터페이스는 다중 상속을 지원하며, 클래스는 여러 개의 인터페이스를 구현할 수 있습니다. 인터페이스는 모든 메서드가 기본적으로 추상 메서드이며, 필드는 상수로만 정의할 수 있습니다.
2.2. 인터페이스의 예제
// 인터페이스 정의
interface Animal {
void eat();
void sound();
}
// Animal 인터페이스를 구현하는 Dog 클래스
class Dog implements Animal {
@Override
public void eat() {
System.out.println("개가 먹고 있습니다.");
}
@Override
public void sound() {
System.out.println("멍멍!");
}
}
// Animal 인터페이스를 구현하는 Cat 클래스
class Cat implements Animal {
@Override
public void eat() {
System.out.println("고양이가 먹고 있습니다.");
}
@Override
public void sound() {
System.out.println("야옹!");
}
}
// 메인 클래스
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.eat(); // 출력: 개가 먹고 있습니다.
dog.sound(); // 출력: 멍멍!
Animal cat = new Cat();
cat.eat(); // 출력: 고양이가 먹고 있습니다.
cat.sound(); // 출력: 야옹!
}
}
2.3. 인터페이스의 특징
-다중 상속이 가능하다.
-모든 메서드는 기본적으로 추상 메서드이다.
-필드는 상수로만 정의할 수 있다.
3. 추상 클래스 vs 인터페이스
4. 마치며
추상 클래스와 인터페이스는 자바에서 객체 지향 프로그래밍의 중요한 개념입니다. 추상 클래스는 공통된 기능을 제공하고, 인터페이스는 다양한 클래스가 동일한 메서드를 구현하도록 강제합니다. 이 두 개념을 잘 이해하고 활용하면, 더 나은 코드 구조와 유연성을 갖춘 프로그램을 만들 수 있습니다.
'IT프로그램 언어 > Java' 카테고리의 다른 글
Java(예외처리) (0) | 2025.01.10 |
---|---|
Java(상속과 다형성) (5) | 2024.12.25 |
Java(객체지향 프로그래밍,OOP) (3) | 2024.12.21 |
Java(메소드의 매개변수와 반환값, 오버로딩) (3) | 2024.12.16 |
Java(메서드의 정의와 호출) (3) | 2024.12.13 |