Java 상속, 추상화, 다형성, 캡슐화

임유진·2025년 7월 7일

Java

목록 보기
10/12
post-thumbnail

🧬 상속 (Inheritance)

부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 사용할 수 있습니다.

  • extends 키워드 사용
  • 코드 재사용성을 높임
  • 자식 클래스는 부모의 필드와 메서드를 그대로 사용 가능
  • 필요 시 오버라이딩으로 기능을 변경 가능
class Animal {
   void eat() {
      System.out.println("먹는다");
   }
}

class Dog extends Animal {
   void bark() {
     System.out.println("짖는다");
   }
}

// 사용 예
Dog d = new Dog();
d.eat();  // Animal의 메서드
d.bark(); // Dog의 메서드

🏗️ 추상화 (Abstraction)

공통된 특징을 추출해 설계만 정의하고 구체적 구현은 자식 클래스에 위임합니다.

  • abstract 키워드 사용
  • 추상 클래스는 일부 또는 전부 미구현 상태일 수 있음
  • 추상 메서드는 선언만 하고 몸체 없음
  • 자식 클래스에서 반드시 구현해야 함
abstract class Shape {
  abstract void draw();
}

class Circle extends Shape {
  void draw() {
     System.out.println("원을 그린다");
  }
}

// 사용 예
Shape s = new Circle();
s.draw(); // Circle의 draw() 실행

🌀 다형성 (Polymorphism)

동일한 타입으로 다양한 형태의 객체를 다룰 수 있습니다.

  • 업캐스팅: 자식 객체를 부모 타입으로 참조
  • 실행 시점에 실제 객체의 메서드가 호출됨(동적 바인딩)
  • 메서드 오버라이딩으로 구현
  • 인터페이스를 통한 다형성 가능
Shape s = new Circle();
s.draw(); // Circle의 draw() 호출

Shape 타입으로 선언했지만 실제 동작은 Circle 클래스의 메서드가 수행됩니다.


🛡️ 캡슐화 (Encapsulation)

데이터와 메서드를 하나로 묶고 외부에는 필요한 부분만 공개합니다.

  • private 접근 제한자로 멤버 보호
  • public getter/setter 메서드로 간접 접근
  • 데이터 무결성과 보안성 유지
class Account {
  private int balance;

  public int getBalance() {
     return balance;
  }

  public void deposit(int amount) {
     if (amount > 0) balance += amount;
  }
}

// 사용 예
Account acc = new Account();
acc.deposit(1000);
System.out.println(acc.getBalance()); // 1000

balance 필드에 직접 접근하지 않고 메서드를 통해 조작합니다.


📌 전체 요약 표

개념주요 특징
상속부모 클래스의 속성과 기능을 자식이 물려받음
추상화설계만 정의하고 구체적 구현은 자식이 담당
다형성동일 타입으로 다양한 객체를 처리
캡슐화데이터와 메서드를 묶어 외부 접근을 제한

📚 참고자료

profile
말하는 고구마

0개의 댓글