언어/자바

[Java] 자바의 객제치향 4가지 특징 3. 추상화

believekim 2025. 3. 4. 20:03

 

자바 객체지향의 4가지 특징

1. 캡슐화(Encapsulation) - 데이터 보호, 접근 제한
2. 상속(Inheritance) - 기능 재사용, 확장
3. 추상화(Abstraction) - 핵심만 정의
4. 다형성(Polymorphism) - 하나의 인터페이스, 다양한 구현

 

 

 

1. 추상화(Abstraction)란?

  • 복잡한 시스템에서 필요한 기능만을 뽑아내고 불필요한 세부 사항은 감추는 과정
  • 계층구조를 인터페이스 상속, 클래스 상속으로 구현

📌 장점

코드의 재사용성 공통 기능은 추상 클래스에 작성, 상속받아 사용
유지보수 용이성 코드 변경 시 부모 클래스만 수정
코드의 일관성 동일한 규칙에 따라 구현하도록 강제
느슨한 결합 세부 사항을 감추고 기능만 공개하여 종속성을 줄임

 

 

 

2. 인터페이스(interface)

  • 클래스 이름 앞에 interface 키워드 사용
  • 모든 메서드가 추상 메서드(구현하지 않은 메서드)로 구성
  • 다중 상속 가능
interface Animal {
    void sound(); // 구현{} X
    void eat(); // 구현{} X
}

// 상속받은 곳에서 구현
class Cat implements Animal {
    @Override
    public void sound() {
        System.out.println("야옹");
    }

    @Override
    public void eat() {
        System.out.println("생선을 먹습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal cat = new Cat();
        cat.sound(); // 야옹
        cat.eat();   // 생선을 먹습니다.
    }
}

 

 

 

 

3. 추상클래스(abstract class)

  • 클래스 이름 앞에 abstract 키워드 사용
  • 상속받는 자식 클래스가 반드시 추상 메서드를 구현하도록 강제
abstract class Animal {
    // 추상 메서드 (구현 {} -> X)
    abstract void sound();

    // 일반 메서드 (구현 {} -> O)
    void eat() {
        System.out.println("먹이를 먹습니다.");
    }
}

class Dog extends Animal {
    // 강제구현 안하면 오류
    @Override
    void sound() {
        System.out.println("멍멍");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.sound(); // 멍멍
        dog.eat();   // 먹이를 먹습니다.
    }
}