
🦄 추상화란 무엇일까요?
추상화란 복잡한 것을 간단하게 만들어주는 마법 같은 아이디어예요!
✨ 핵심은 '진짜 중요한 것'만 남기고 '자세한 것'은 숨기는 거예요.
예를 들어, 여러분이 그림을 그린다고 생각해 보세요.
- 동물을 그린다고 말하면, "동물이다"라는 가장 중요한 정보만 알 수 있어요. (이게 추상화된 생각이에요.)
- 하지만, 그 동물이 '고양이'인지 '강아지'인지 '코끼리'인지는 아직 몰라요. '동물'이라는 큰 틀 안에는 '소리 내기', '잠자기' 같은 공통적인 행동은 있지만, 구체적으로 어떤 소리를 내는지는 각각의 동물마다 다르죠.
컴퓨터 프로그래밍에서 추상화는 이런 식으로 사용돼요.
- 가장 기본적인 틀을 만들어서 "이 동물은 반드시 소리를 내야 한다"고 약속만 해놓고,
- 어떻게 소리를 낼지는 나중에 고양이나 강아지처럼 구체적인 동물들이 알아서 정하게 하는 거예요.
이렇게 하면 나중에 새로운 동물을 추가할 때도, '소리 내기'와 '잠자기' 같은 기본적인 규칙을 잊지 않고 만들 수 있겠죠? 이게 바로 추상화의 멋진 점이에요!
💻 자바 예제로 알아보기
자바(Java)에서는 이 추상화의 아이디어를 추상 클래스(abstract class)와 추상 메서드(abstract method)로 만들어요.
📜 추상 클래스 예제 설명
주어진 예제를 보면서 아까의 동물 이야기와 연결해 볼게요.
Java
// 추상 클래스
abstract class Animal {
// 추상 메서드 (몸통이 없고, 약속만 있어요)
public abstract void animalSound();
// 일반 메서드 (몸통이 있고, 모든 동물이 똑같이 해요)
public void sleep() {
System.out.println("Zzz");
}
}
- abstract class Animal (추상 클래스): 얘가 바로 '동물'이라는 가장 기본적인 틀이에요. 이 클래스는 스스로는 구체적인 동물이 될 수 없어요. ("고양이가 아닌 그냥 동물"을 만질 순 없죠?)
- public abstract void animalSound(); (추상 메서드): "모든 동물은 소리를 내야 해!"라는 약속이에요. 하지만 어떤 소리를 낼지는 정하지 않고 빈칸으로 남겨둬요.
- public void sleep() (일반 메서드): "모든 동물은 똑같이 잠을 자!" (여기서는 "Zzz" 출력) 하고 구체적인 행동까지 정해 놓은 거예요.
🐷 구체적인 클래스 만들기
이제 이 '동물'이라는 틀을 이어받아 '돼지'라는 구체적인 동물을 만들어 볼게요.
Java
// 서브 클래스 (Animal을 상속받아요)
class Pig extends Animal {
// 약속했던 animalSound()의 구체적인 내용(몸통)을 여기에서 만들어요
public void animalSound() {
System.out.println("The pig says: wee wee");
}
}
- class Pig extends Animal: Pig는 Animal의 모든 것을 이어받아요.
- public void animalSound(): Animal에서 "소리를 내야 한다"고 약속한 것을 Pig가 "나는 꿀꿀(wee wee) 소리를 낼 거야!"라고 구체적으로 정해준 거예요.
🚀 실행해 보기
Java
class Main {
public static void main(String[] args) {
Pig myPig = new Pig(); // 돼지(Pig) 객체를 만들어요
myPig.animalSound(); // 돼지가 소리를 내요 (꿀꿀!)
myPig.sleep(); // 돼지가 잠을 자요 (Zzz)
}
}
결과:
The pig says: wee wee
Zzz
✨ 핵심 정리:
- Animal (추상 클래스)은 가장 중요한 약속 (소리 내기)과 모두 똑같은 행동 (잠자기)을 정해주었어요.
- Pig (구체적 클래스)는 그 약속(소리 내기)을 자신만의 방식으로 지킨 거예요!
'Java_language' 카테고리의 다른 글
| 💡 예외 처리란 무엇일까요? (0) | 2025.12.05 |
|---|---|
| 인터페이스란 무엇일까요? (0) | 2025.12.03 |
| 오버라이딩 (Overriding) (0) | 2025.12.03 |
| 다형성 (0) | 2025.12.03 |
| 상속 (0) | 2025.12.03 |