개발공부/CS

추상화란?

카슈밀 2025. 2. 16. 00:12
반응형

복잡한 부분은 감추고 공통된 주요 부분으로 일반화 하는 것.

 

 

📌 추상화(Abstraction)란?

 

추상화(Abstraction)는 복잡한 시스템에서 핵심적인 개념만을 추려내어 단순화하는 과정이야.

➡️ 불필요한 세부 사항을 숨기고, 중요한 정보만 강조하는 것이 핵심이야!

 

💡 쉽게 말해?

 

📌 운전할 때 자동차 내부 구조를 몰라도 핸들과 페달만 알면 운전할 수 있지?

📌 스마트폰을 사용할 때 내부 회로를 몰라도 앱을 실행하고 전화를 걸 수 있지?

➡️ 이게 바로 “추상화”야! 🎯

 

📌 객체지향 프로그래밍(OOP)에서 추상화란?

 

객체지향 프로그래밍(OOP)에서 추상화란,

➡️ 객체의 필수적인 특징만을 정의하고, 불필요한 세부사항은 숨기는 것을 의미해!

 

✔️ “어떤 기능을 제공하는지”만 정의하고, “어떻게 동작하는지”는 감춤!

 

💡 OOP에서 추상화 적용 방법

 

1️⃣ 추상 클래스(Abstract Class) 사용

2️⃣ 인터페이스(Interface) 사용

 

📌 추상 클래스(abstract class) 예제 (Java)

 

💡 추상 클래스는 “설계도” 같은 역할을 해!

➡️ 구체적인 구현 없이, 자식 클래스에서 구현하도록 강제!

 

abstract class Animal {

    abstract void makeSound();  // 추상 메서드 (구현 없음)

    

    void sleep() {

        System.out.println("동물이 잠을 잡니다.");

    }

}

 

class Dog extends Animal {

    @Override

    void makeSound() {

        System.out.println("멍멍!");  // 추상 메서드 구현

    }

}

 

public class Main {

    public static void main(String[] args) {

        Animal myDog = new Dog();

        myDog.makeSound();  // "멍멍!"

        myDog.sleep();  // "동물이 잠을 잡니다."

    }

}

 

📌 추상 클래스 Animal에는 makeSound()의 구현이 없음!

📌 Dog 클래스가 makeSound()를 반드시 구현해야 함!

 

📌 인터페이스(interface) 예제 (Java)

 

💡 인터페이스는 “기능 목록”을 정의하는 것!

➡️ 구현은 하지 않고, 반드시 구현해야 하는 메서드만 정의!

 

interface Animal {

    void makeSound();  // 인터페이스는 기본적으로 추상 메서드만 가짐

}

 

class Cat implements Animal {

    @Override

    public void makeSound() {

        System.out.println("야옹!");  // 인터페이스의 메서드 구현

    }

}

 

public class Main {

    public static void main(String[] args) {

        Animal myCat = new Cat();

        myCat.makeSound();  // "야옹!"

    }

}

 

📌 인터페이스 AnimalmakeSound()를 강제하고, Cat이 이를 구현했어!

📌 인터페이스는 다중 구현이 가능하다는 장점도 있음!

 

📌 추상화 vs. 캡슐화 차이점

 

개념 추상화(Abstraction) 캡슐화(Encapsulation)

정의 불필요한 세부 정보를 숨기고 핵심 기능만 제공 데이터와 메서드를 하나로 묶고, 직접 접근을 제한

목적 복잡성을 줄이고 중요한 기능만 노출 데이터 보호 및 무결성 유지

사용 방식 추상 클래스, 인터페이스 접근 제한자 (private, public 등) 사용

예시 자동차 운전 (핸들, 페달만 사용) 자동차 내부 엔진 보호

 

추상화: “무엇을 할 것인가?” (핵심 기능 정의)

캡슐화: “어떻게 할 것인가?” (데이터 보호)

 

📌 추상화의 장점

 

복잡성 감소 → 핵심 기능만 노출하여 유지보수 용이

유연한 설계 → 인터페이스를 활용하면 다양한 구현이 가능

재사용성 증가 → 공통 기능을 한 번만 정의하고 여러 곳에서 사용 가능

다형성과 조합 가능 → 추상화된 인터페이스를 활용하여 확장 가능

 

📌 결론

 

🔹 추상화(Abstraction) = 중요한 기능만 노출하고, 불필요한 세부 정보는 숨김

🔹 OOP에서 추상화는 인터페이스와 추상 클래스로 구현 가능

🔹 복잡성을 줄이고 유지보수성을 높이는 중요한 개념!

 

 

728x90

'개발공부 > CS' 카테고리의 다른 글

Call by Value란?  (0) 2025.02.16
Git과 GitHub 차이점  (0) 2025.02.16
오버로딩(Overloading) vs. 오버라이딩(Overriding) 차이점  (0) 2025.02.16
가비지 컬렉터란?  (0) 2025.02.16
Docker란?  (0) 2025.02.15