본문 바로가기
Java_language

추상화란

by 헬로제이콥 2025. 12. 3.

 

 

🦄 추상화란 무엇일까요?

추상화란 복잡한 것을 간단하게 만들어주는 마법 같은 아이디어예요!

✨ 핵심은 '진짜 중요한 것'만 남기고 '자세한 것'은 숨기는 거예요.

예를 들어, 여러분이 그림을 그린다고 생각해 보세요.

  1. 동물을 그린다고 말하면, "동물이다"라는 가장 중요한 정보만 알 수 있어요. (이게 추상화된 생각이에요.)
  2. 하지만, 그 동물이 '고양이'인지 '강아지'인지 '코끼리'인지는 아직 몰라요. '동물'이라는 큰 틀 안에는 '소리 내기', '잠자기' 같은 공통적인 행동은 있지만, 구체적으로 어떤 소리를 내는지는 각각의 동물마다 다르죠. 

컴퓨터 프로그래밍에서 추상화는 이런 식으로 사용돼요.

  • 가장 기본적인 틀을 만들어서 "이 동물은 반드시 소리를 내야 한다"고 약속만 해놓고,
  • 어떻게 소리를 낼지는 나중에 고양이나 강아지처럼 구체적인 동물들이 알아서 정하게 하는 거예요.

이렇게 하면 나중에 새로운 동물을 추가할 때도, '소리 내기'와 '잠자기' 같은 기본적인 규칙을 잊지 않고 만들 수 있겠죠? 이게 바로 추상화의 멋진 점이에요!


💻 자바 예제로 알아보기

자바(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: PigAnimal의 모든 것을 이어받아요.
  • 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