콘텐츠로 건너뛰기
» 자바 클래스 상속 예제와 개념 정리

자바 클래스 상속 예제와 개념 정리

  • 기준

자바 프로그래밍 언어에서 상속은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 코드의 재사용과 구조적인 관계를 통해 복잡한 프로그램을 효과적으로 개발할 수 있도록 돕습니다. 상속을 이해하고 활용하는 것은 자바 개발자에게 필수적인 요소입니다.

상속의 개념

상속은 한 클래스를 기반으로 새로운 클래스를 생성하는 기능을 제공합니다. 이를 통해 부모 클래스의 속성과 메소드를 자식 클래스가 물려받을 수 있습니다. 부모 클래스는 일반적으로 ‘슈퍼 클래스’라 불리며, 자식 클래스는 ‘서브 클래스’라고 명명됩니다. 이와 같은 구조는 코드의 중복을 줄이고, 유지 보수를 용이하게 합니다.

상속의 장점

  • 코드 재사용: 기존 클래스를 활용할 수 있어 새로운 코드 작성을 줄일 수 있습니다.
  • 유지보수 용이: 부모 클래스에서 수정이 이루어질 경우, 자식 클래스에도 자동으로 적용되어 관리가 편리합니다.
  • 다형성 구현: 같은 메소드를 서브 클래스에서 오버라이딩하여 다양한 작업을 수행할 수 있습니다.

자바에서의 상속 예제

자바에서 상속을 구현하는 방법은 간단합니다. 예를 들어, ‘동물’이라는 상위 클래스와 이를 상속받는 ‘개’와 ‘고양이’라는 하위 클래스를 만들어 보겠습니다.

class Animal { 
  void sound() { 
    System.out.println("동물의 소리"); 
  } 
}
class Dog extends Animal { 
  @Override
  void sound() { 
    System.out.println("멍멍"); 
  } 
}
class Cat extends Animal { 
  @Override
  void sound() { 
    System.out.println("야옹"); 
  } 
}

위의 코드에서 ‘Animal’ 클래스는 기본적인 동물의 소리를 정의하고, ‘Dog’와 ‘Cat’ 클래스는 이를 상속받아 각기 다른 소리를 출력하는 메소드를 오버라이딩하였습니다. 이러한 방식으로 다양한 클래스가 공통된 속성과 기능을 가지면서도 각기 다른 동작을 수행할 수 있습니다.

상속의 사용 예

상속은 실생활에서도 쉽게 찾아볼 수 있는 개념입니다. 예를 들어, 사람이라는 클래스가 있을 때, 남자와 여자가 각각 자신만의 특정한 속성이나 행동을 가질 수 있습니다. 이때 ‘사람’ 클래스를 부모 클래스로 하고, ‘남자’와 ‘여자’ 클래스를 자식 클래스로 생성하여 각자의 특성을 추가할 수 있습니다.

class Person {
  void walk() {
    System.out.println("걷기");
  }
}
class Male extends Person {
  void shave() {
    System.out.println("면도하기");
  }
}
class Female extends Person {
  void makeup() {
    System.out.println("화장하기");
  }
}

위의 예시에서 각 성별에 따른 특정 행동을 정의함으로써, 공통된 속성인 ‘걷기’는 부모 클래스에서 공유하고, ‘면도하기’와 ‘화장하기’는 각각의 자식 클래스에서 추가적인 행동으로 정의하였습니다.

자바에서의 상속 제한

자바에서는 단일 상속을 지원합니다. 즉, 한 클래스는 오직 하나의 부모 클래스만을 가질 수 있습니다. 하지만, 인터페이스를 사용하면 여러 가지 기능을 구현할 수 있습니다. 인터페이스는 클래스가 구현해야 하는 메소드의 집합으로, 자바에서 다중 상속 문제를 해결하는 방법 중 하나입니다.

인터페이스와 다중 상속

인터페이스를 사용하면 클래스 간에 다중 상속을 효과적으로 구현할 수 있습니다. 여러 인터페이스를 구현하여 다양한 기능을 제공받을 수 있는 구조를 설계할 수 있습니다.

interface CanFly {
  void fly();
}
class Bird implements CanFly {
  public void fly() {
    System.out.println("새가 날고 있습니다.");
  }
}
class Airplane implements CanFly {
  public void fly() {
    System.out.println("비행기가 하늘을 날고 있습니다.");
  }
}

위의 예시에서 ‘CanFly’ 인터페이스는 ‘fly()’ 메소드를 정의하고, ‘Bird’와 ‘Airplane’ 클래스는 이를 구현하여 각자의 비행 동작을 정의합니다. 이로 인해, 다중 상속의 어려움을 피하면서도 다양한 클래스에서 동일한 기능을 공유할 수 있게 됩니다.

상속과 오버라이딩

상속의 주요 특징 중 하나는 메소드 오버라이딩입니다. 자식 클래스가 부모 클래스의 메소드를 재정의하여 동작을 변경할 수 있는 기능을 제공합니다. 이로 인해 객체 지향 프로그래밍에서는 유연성과 확장성을 가질 수 있습니다.

오버라이딩의 규칙

  • 메소드의 이름과 매개변수는 부모 메소드와 동일해야 합니다.
  • 부모 클래스의 메소드보다 접근 제어자는 같거나 더 범위가 넓어야 합니다.
  • 부모 클래스의 메소드가 던지는 예외보다 자식 클래스에서 던지는 예외는 좁은 범위여야 합니다.

상속을 통한 오버라이딩은 코드의 유연성을 높이며, 특정 클래스에서만 필요한 기능을 추가하거나 수정하는 데 필수적입니다.

결론

자바에서의 상속은 객체 지향 프로그래밍의 중요한 기본 원칙 중 하나로, 코드의 재사용성과 유지보수 편의성을 제공합니다. 상속의 개념을 잘 이해하고 활용하면 더 효율적이고 체계적인 프로그램을 작성할 수 있습니다. 다양한 예제와 개념을 통해 자바 상속의 원리를 잘 이해하는 데 도움이 되었기를 바랍니다.

질문 FAQ

자바에서 상속이란 무엇인가요?

자바에서 상속은 한 클래스가 다른 클래스의 속성과 메소드를 물려받는 기능을 의미합니다. 이를 통해 코드의 중복을 줄이고, 효율적인 프로그래밍이 가능해집니다.

자식 클래스에서 부모 클래스의 메소드를 변경할 수 있나요?

네, 자식 클래스는 부모 클래스의 메소드를 오버라이딩하여 그 동작을 수정할 수 있습니다. 이 과정은 자식 클래스의 요구에 맞게 기능을 조정하는 데 유용합니다.

자바에서 다중 상속은 어떻게 처리되나요?

자바는 단일 상속만 지원합니다. 그러나 인터페이스를 사용하면 여러 기능을 구현할 수 있어, 여러 클래스로부터 메소드를 이용할 수 있도록 해줍니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다