본문 바로가기
프로그래밍/JAVA

초보 자바 프로그래밍(52) - 상속 (inheritance)

by 머니테크리더 2023. 5. 14.
반응형

자바 상속 대표 이미지
자바 상속 대표 이미지

🔖 INDEX

     

     

    상속의 개념

    상속(Inheritance)은 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 상속은 한 클래스가 다른 클래스의 속성과 메서드를 이어받는 것을 의미합니다. 상속을 사용하면 기존 클래스의 코드를 재사용하고 확장할 수 있습니다.

     

    자바에서 상속은 extends 키워드를 사용해 표현합니다. 예를 들어, Animal이라는 부모 클래스(Parent Class 또는 Super Class)에서 Dog이라는 자식 클래스(Child Class 또는 Sub Class)로 기능을 상속하려면 다음과 같이 코드를 작성합니다:

    public class Animal {
        public void eat() {
            System.out.println("동물이 먹는다.");
        }
    }
    
    public class Dog extends Animal {
        public void bark() {
            System.out.println("개가 짖는다.");
        }
    }

     

    상속의 장점

    • 코드 재사용: 상속을 사용하면 기존 클래스의 변수와 메서드를 재사용할 수 있으므로 코드 중복을 줄일 수 있습니다.
    • 유지 보수 용이: 공통 기능이 부모 클래스에 모여 있으므로, 이를 수정하면 모든 자식 클래스에 변경사항이 적용됩니다.
    • 확장성: 기존 클래스를 확장하여 새로운 기능을 추가하거나 기존 기능을 변경할 수 있습니다.

     

     

    상속의 특징

    • 메서드 오버라이딩: 자식 클래스는 부모 클래스의 메서드를 재정의(Override)하여 그 기능을 변경할 수 있습니다.
    • 단일 상속: 자바에서는 한 클래스가 여러 클래스를 상속받는 것을 허용하지 않습니다. 즉, 한 클래스는 하나의 부모 클래스만 가질 수 있습니다.
    • 다형성: 부모 클래스 타입의 참조 변수를 사용하여 자식 클래스의 인스턴스를 참조할 수 있습니다. 이는 다형성(Polymorphism)을 가능하게 합니다.

     

    자식 클래스 (Child Class)

    자식 클래스(Child Class), 또는 서브 클래스(Sub Class)는 객체 지향 프로그래밍의 상속 개념에서 중요한 역할을 하는 클래스입니다. 자식 클래스는 부모 클래스(Super Class 또는 Parent Class)로부터 속성(변수)와 메서드를 상속받아 사용할 수 있습니다. 이를 통해 코드의 재사용성이 증가하고 프로그램의 구조가 효율적으로 구성됩니다. 자바에서는 extends 키워드를 사용해 부모 클래스를 상속받습니다:

    public class Parent {
        public void parentMethod() {
            System.out.println("This is a parent method");
        }
    }
    
    public class Child extends Parent {
        public void childMethod() {
            System.out.println("This is a child method");
        }
    }

    위 코드에서 Child는 Parent 클래스를 상속받으므로, Parent 클래스의 parentMethod()를 호출할 수 있습니다:

    public class Main {
        public static void main(String[] args) {
            Child child = new Child();
            child.parentMethod(); // 출력: "This is a parent method"
            child.childMethod();  // 출력: "This is a child method"
        }
    }

     

     

    자식 클래스는 다음과 같은 특징을 가집니다:

    • 메서드 오버라이딩: 자식 클래스는 부모 클래스의 메서드를 재정의(Override)할 수 있습니다. 이를 통해 상속받은 기능을 필요에 맞게 변경할 수 있습니다.
    • 확장성: 자식 클래스는 부모 클래스의 기능을 그대로 이어받을 뿐만 아니라, 새로운 속성이나 메서드를 추가하여 기능을 확장할 수 있습니다.
    • 다형성: 자식 클래스의 객체는 부모 클래스 타입의 변수로 참조될 수 있습니다. 이는 다형성(Polymorphism)을 가능하게 하는 중요한 특징입니다.
    • 접근 제어: 자식 클래스는 부모 클래스의 public과 protected 멤버에 접근할 수 있습니다. 그러나 부모 클래스의 private 멤버는 자식 클래스에서 접근할 수 없습니다.

     

    이처럼, 자식 클래스는 상속을 통해 코드의 재사용성을 높이고, 프로그램의 구조를 더욱 유연하게 만드는 중요한 도구입니다.

     

    Object 클래스 (Object Class)

    자바에서 Object 클래스는 모든 클래스의 최상위 클래스입니다. 다시 말해, 자바에서 모든 클래스는 명시적으로 다른 클래스를 상속받지 않으면 자동으로 Object 클래스를 상속받게 됩니다. 이로 인해 Object 클래스에 정의된 메서드는 모든 자바 클래스에서 사용할 수 있습니다.

     

    Object 클래스에는 여러 가지 메서드가 정의되어 있습니다. 그 중 몇 가지를 살펴보면 다음과 같습니다:

    • equals(Object obj): 객체가 같은지 비교하는 메서드입니다. 기본적으로 두 객체의 메모리 주소를 비교하지만, 필요에 따라 오버라이드하여 객체의 상태를 비교하는 방식으로 변경할 수 있습니다.
    • hashCode(): 객체의 해시 코드 값을 반환하는 메서드입니다. equals() 메서드를 오버라이드하는 경우, hashCode() 메서드도 함께 오버라이드하는 것이 일반적입니다.
    • toString(): 객체를 문자열로 표현하는 메서드입니다. 이 메서드 역시 필요에 따라 오버라이드하여 객체의 상태를 잘 표현하는 문자열을 반환하도록 변경할 수 있습니다.
    • clone(): 객체를 복제하는 메서드입니다. Cloneable 인터페이스를 구현하고 이 메서드를 오버라이드하여 객체의 복제를 지원할 수 있습니다.
    • getClass(): 객체의 실행 시간 클래스를 반환하는 메서드입니다. 이 메서드는 final이므로 오버라이드할 수 없습니다.

     

    이 외에도 Object 클래스에는 finalize(), notify(), notifyAll(), wait() 등의 메서드가 있습니다. 이들 메서드는 객체의 최종화와 스레드 동기화에 사용됩니다.

     

     

    댓글