SMALL
📚 7강: 객체 지향 프로그래밍 (OOP) - 추상 클래스와 인터페이스
🚀 1. 추상 클래스(Abstract Class)
📌 1.1 추상 클래스란?
- 추상 클래스는 객체를 생성할 수 없는 클래스입니다.
- abstract 키워드를 사용하여 정의합니다.
- 공통된 속성과 기능을 정의하고, 상속받은 클래스에서 반드시 구현해야 할 메서드를 지정할 수 있습니다.
📌 1.2 추상 클래스 문법
abstract class Animal {
// 일반 메서드
void eat() {
System.out.println("동물이 먹습니다.");
}
// 추상 메서드 (선언만, 구현 X)
abstract void sound();
}
📌 1.3 추상 클래스 사용 예제
// 추상 클래스
abstract class Animal {
abstract void sound(); // 추상 메서드
void sleep() {
System.out.println("동물이 잠을 잡니다.");
}
}
// 구체 클래스: Dog
class Dog extends Animal {
@Override
void sound() {
System.out.println("강아지가 멍멍 짖습니다.");
}
}
// 구체 클래스: Cat
class Cat extends Animal {
@Override
void sound() {
System.out.println("고양이가 야옹 울습니다.");
}
}
// 메인 클래스
public class AbstractExample {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.sound(); // 강아지가 멍멍 짖습니다.
cat.sound(); // 고양이가 야옹 울습니다.
dog.sleep(); // 동물이 잠을 잡니다.
}
}
📌 출력 결과:
강아지가 멍멍 짖습니다.
고양이가 야옹 울습니다.
동물이 잠을 잡니다.
📌 1.4 추상 클래스 특징
- 객체 생성 불가: 추상 클래스는 인스턴스화할 수 없습니다.
- 추상 메서드: 상속받은 클래스에서 반드시 오버라이딩해야 합니다.
- 일반 메서드 포함 가능: 추상 클래스는 일반 메서드도 포함할 수 있습니다.
🚀 2. 인터페이스 (Interface)
📌 2.1 인터페이스란?
- 인터페이스는 클래스가 구현해야 할 메서드의 목록을 정의합니다.
- 모든 메서드는 추상 메서드이며, default, static 메서드도 포함될 수 있습니다.
- 다중 상속이 가능합니다.
📌 2.2 인터페이스 문법
interface Animal {
void sound(); // 추상 메서드
void sleep(); // 추상 메서드
}
📌 2.3 인터페이스 사용 예제
// 인터페이스
interface Animal {
void sound(); // 추상 메서드
void eat(); // 추상 메서드
}
// 클래스에서 인터페이스 구현
class Dog implements Animal {
@Override
public void sound() {
System.out.println("강아지가 멍멍 짖습니다.");
}
@Override
public void eat() {
System.out.println("강아지가 사료를 먹습니다.");
}
}
class Cat implements Animal {
@Override
public void sound() {
System.out.println("고양이가 야옹 울습니다.");
}
@Override
public void eat() {
System.out.println("고양이가 생선을 먹습니다.");
}
}
// 메인 클래스
public class InterfaceExample {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.sound(); // 강아지가 멍멍 짖습니다.
dog.eat(); // 강아지가 사료를 먹습니다.
cat.sound(); // 고양이가 야옹 울습니다.
cat.eat(); // 고양이가 생선을 먹습니다.
}
}
📌 출력 결과:
강아지가 멍멍 짖습니다.
강아지가 사료를 먹습니다.
고양이가 야옹 울습니다.
고양이가 생선을 먹습니다.
📌 2.4 인터페이스 특징
- 모든 메서드가 추상 메서드 (Java 8 이전)
- 다중 상속 가능: 한 클래스가 여러 인터페이스를 구현할 수 있습니다.
- default 메서드와 static 메서드` 지원: Java 8부터 가능
- 필드(변수)는 항상 public static final
🚀 3. 추상 클래스 vs 인터페이스
비교 항목 | 추상 클래스 | 인터페이스 |
목적 | 공통 기능 제공 | 표준화 및 규칙 제공 |
메서드 종류 | 일반 메서드 + 추상 메서드 | 모든 메서드는 추상 메서드 (Java 8 이전) |
다중 상속 | 불가능 | 가능 |
생성자 | 있음 | 없음 |
사용 키워드 | abstract class | interface |
🚀 4. 실습 과제
✅ 1. 추상 클래스 실습
- Shape 추상 클래스를 만들고 draw() 메서드를 선언하세요.
- Circle과 Rectangle 클래스를 상속받고 draw()를 오버라이딩하세요.
- 메인 메서드에서 두 객체를 생성하고 draw()를 호출하세요.
// 추상 클래스: Shape
abstract class Shape {
abstract void draw(); // 추상 메서드
}
// Circle 클래스 (Shape 상속)
class Circle extends Shape {
@Override
void draw() {
System.out.println("원을 그립니다.");
}
}
// Rectangle 클래스 (Shape 상속)
class Rectangle extends Shape {
@Override
void draw() {
System.out.println("사각형을 그립니다.");
}
}
// 메인 클래스
public class AbstractShapeExample {
public static void main(String[] args) {
// 추상 클래스의 하위 객체 생성
Shape circle = new Circle();
Shape rectangle = new Rectangle();
// 각 객체의 draw() 메서드 호출
circle.draw(); // 원을 그립니다.
rectangle.draw(); // 사각형을 그립니다.
}
}
✅ 2. 인터페이스 실습
- Flyable 인터페이스를 만들고 fly() 메서드를 선언하세요.
- Bird와 Airplane 클래스를 구현하세요.
- 두 객체의 fly() 메서드를 호출하세요.
// 인터페이스: Flyable
interface Flyable {
void fly(); // 추상 메서드
}
// Bird 클래스 (Flyable 구현)
class Bird implements Flyable {
@Override
public void fly() {
System.out.println("새가 하늘을 날아갑니다.");
}
}
// Airplane 클래스 (Flyable 구현)
class Airplane implements Flyable {
@Override
public void fly() {
System.out.println("비행기가 하늘을 날아갑니다.");
}
}
// 메인 클래스
public class InterfaceFlyableExample {
public static void main(String[] args) {
// 인터페이스 구현 객체 생성
Flyable bird = new Bird();
Flyable airplane = new Airplane();
// 각 객체의 fly() 메서드 호출
bird.fly(); // 새가 하늘을 날아갑니다.
airplane.fly(); // 비행기가 하늘을 날아갑니다.
}
}
🎯 5. 학습 목표
- 추상 클래스와 인터페이스의 개념과 차이를 이해한다.
- 추상 메서드를 사용해 강제 구현을 유도할 수 있다.
- 인터페이스를 통해 다중 상속을 활용할 수 있다.
- abstract와 interface 키워드를 적절히 사용할 수 있다.
✅ 다음 강의 예고: 8강 - 예외 처리 (Exception Handling)
다음 강의에서는 **Java의 예외 처리(Exception Handling)**에 대해 학습합니다. 😊
LIST
'자바 (JAVA)' 카테고리의 다른 글
📚 JAVA 9강: 컬렉션 프레임워크 (Collection Framework) (0) | 2025.01.03 |
---|---|
📚 JAVA 8강: 예외 처리 (Exception Handling) (0) | 2025.01.03 |
📚 JAVA 6강: 객체 지향 프로그래밍 (OOP) - 상속과 오버라이딩 (0) | 2025.01.03 |
📚 JAVA 5강: 객체 지향 프로그래밍 (OOP) - 클래스와 객체 (0) | 2025.01.03 |
📚 JAVA 4강: 배열과 문자열 (1) | 2025.01.03 |