Java/강의

[📙 Java 문법 종합반] 2-9. 객체지향 PART 3 - 추상화

가지코딩 2025. 4. 15. 20:34

📙 목차

  1. 추상화
  2. 인터페이스 상속을 활용한 추상 계층 표현
  3. 클래스 상속을 활용한 추상 계층 표현
  4. 실습과제

🧡 학습 목표

  • 추상화가 무엇인지 학습한다.

객체지향의 4가지 특징

  • 캡슐화 - 데이터의 보호
  • 상속 - 재사용성과 확장
  • 추상화 - 데이터의 계층적 표현
  • 다형성 - 객체지향의 꽃

1. 추상화

추상화란?

  • 불필요한 정보를 제거하고 본질적인 특징만 남기는 것을 의미한다.
  • 객체지향 프로그래밍에서는 추상화의 계층적 특징을 활용해서 유지보수성이 좋은 프로그램을 만들 수 있다.
  • 계층구조를 자바의 특징(인터페이스 상속, 클래스 상속)을 통해 구현할 수 있다.
  • 추상화의 특징은 다형성에서 활용된다.

2. 인터페이스 상속을 활용한 추상 계층 표현

고양이 → 동물 → 생명체 

public interface LifeForm {
    void exist(); // ✅ 공통: 모든 생명체는 존재한다.
}
public interface Animal extends LifeForm {
    void makeSound(); //✅ 공통: 모든 동물은 소리를 냅니다.
}
public class Cat implements Animal {

    @Override
    public void exist() {
        System.out.println("고양이가 존재합니다.");
    }

    @Override
    public void makeSound() {
        System.out.println("야옹");
    }

    public void scratch() {
        System.out.println("스크래치");
    }
}

 

public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.exist();
        cat.makeSound();
        cat.scratch();
    }
}

3. 클래스 상속을 활용한 추상 계층 표현

고양이 → 동물 → 생명체 

public class LifeForm {
    public void exist() {
        System.out.println("존재합니다2"); // ✅ 공통: 모든 객체는 존재한다.
    }
}
public class Animal extends LifeForm {
    public void makeSound() {
        System.out.println("소리를 냅니다2"); // ✅ 공통: 모든 생명체는 성장한다.
    }
}
public class Cat extends Animal {

    @Override
    public void makeSound() {
        System.out.println("야옹2");
    }

    public void scratch() {
        System.out.println("스크래치!");
    }
}

 

public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.exist();
        cat.makeSound();
        cat.scratch();
    }
}

4. 실습과제

스스로 주제를 정하고 인터페이스와 클래스를 활용하여 3단계 이상의 추상 계층을 구현해 보세요.

 

인터페이스

public interface Program {
    void install();
}
public interface Game extends Program{
    void play();
}
public class OnlineGame implements Game {
    @Override
    public void install() {
        System.out.println("온라인 게임을 설치한다.");
    }

    @Override
    public void play() {
        System.out.println("온라인 게임 시작");
    }

    public void checkInternet() {
        System.out.println("인터넷 연결 확인");
    }
}
public class Main {
    public static void main(String[] args) {
        OnlineGame og = new OnlineGame();
        og.install();
        og.play();
        og.checkInternet();
    }
}

 

 

클래스

public class Program{
    public void install() {
        System.out.println("프로그램을 설치한다.");
    }
}
public class Game extends Program {
    @Override
    public void install() {
        System.out.println("게임을 설치한다.");
    }

    public void play() {
        System.out.println("게임 시작");
    }
}
public class OnlineGame extends Game {
    public void checkInternet() {
        System.out.println("인터넷 연결 확인");
    }
}
public class Main {
    public static void main(String[] args) {
        OnlineGame og = new OnlineGame();
        og.install();
        og.play();
        og.checkInternet();
    }
}