복잡한 부분은 감추고 공통된 주요 부분으로 일반화 하는 것.
📌 추상화(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(); // "야옹!"
}
}
📌 인터페이스 Animal은 makeSound()를 강제하고, Cat이 이를 구현했어!
📌 인터페이스는 다중 구현이 가능하다는 장점도 있음!
📌 추상화 vs. 캡슐화 차이점
개념 추상화(Abstraction) 캡슐화(Encapsulation)
정의 불필요한 세부 정보를 숨기고 핵심 기능만 제공 데이터와 메서드를 하나로 묶고, 직접 접근을 제한
목적 복잡성을 줄이고 중요한 기능만 노출 데이터 보호 및 무결성 유지
사용 방식 추상 클래스, 인터페이스 접근 제한자 (private, public 등) 사용
예시 자동차 운전 (핸들, 페달만 사용) 자동차 내부 엔진 보호
✅ 추상화: “무엇을 할 것인가?” (핵심 기능 정의)
✅ 캡슐화: “어떻게 할 것인가?” (데이터 보호)
📌 추상화의 장점
✅ 복잡성 감소 → 핵심 기능만 노출하여 유지보수 용이
✅ 유연한 설계 → 인터페이스를 활용하면 다양한 구현이 가능
✅ 재사용성 증가 → 공통 기능을 한 번만 정의하고 여러 곳에서 사용 가능
✅ 다형성과 조합 가능 → 추상화된 인터페이스를 활용하여 확장 가능
📌 결론
🔹 추상화(Abstraction) = 중요한 기능만 노출하고, 불필요한 세부 정보는 숨김
🔹 OOP에서 추상화는 인터페이스와 추상 클래스로 구현 가능
🔹 복잡성을 줄이고 유지보수성을 높이는 중요한 개념!
'개발공부 > 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 |