유수봉 교수의 자바프로그램 10주차 상속

상속이란?

  • 자바에서의 상속은 부모 클래스에 만들어진 필드와 메소드를 자식 클래스가 물려받는 것을 말한다. 상속 선언만 하면, 자식 클래스는 부모 클래스에 만들어진 필드와 메소드를 만들지 않고도 만든 것과 같은 효과를 얻는다.

  • 여기서 참고해야할 점은 상속은 클래스 사이의 상속이며 객체 사이의 상속이 아니라는 점이다. 즉, 자식 객체는 자식 클래스와 부모 클래스에 만들어진 모든 멤버를 가지고 생성된다.

상속의 필요성

  • 자바에서 상속이 필요한 예를 말하자면 개발자가 5개의 클래스를 작성하였다고 하자. 그리고 이 코드에는 a, b, c, d, e라는 코드가 공통으로 들어있다고 가정을 한다면 만일 a라는 멤버에 오류가 발생해서 이를 수정하게 되면 5개의 클래스를 모두 수정해야 하고, 다른 멤버를 수정한다고 하더라도 5개의 클래스를 모두 수정하여야 한다.

  • 즉, 상속이 필요한 이유는 이러한 이유 때문이다. 즉, 상속을 이용하면 공통된 코드를 모아 클래스를 작성하고, 나머지 클래스를 상속 관계로 선언하면 코드를 중복 작성할 필요없이 물려받기만 하면 된다. 또한 수정하고자 한다면 클래스만 수정하면 된다. 즉, 상속은 코드 중복을 제거하여 클래스를 간결하게 구현할 수 있게 한다는 장점이 있으므로 필요하다고 할 수 있다.

상속의 장점

  • 클래스의 간결화 - 멤버의 중복 작성이 필요하지 않다.
  • 클래스의 관리가 용이함 - 클래스들의 계층적 분류
  • 소프트웨어의 생산성 향상 - 클래스 재사용과 확장 용이

자바의 상속 선언

  • 자바에서는 부모 클래스를 슈퍼 클래스. 상속받는 자식 클래스를 서브 클래스라고 부르며, 상속을 선언할 때 확장한다는 뜻을 가진 extends 키워드를 사용한다.
public class Person {

	...

}

public class Student extends Person { // Person을 상속받는 클래스 Student 선언

	...
    
}

public class StudentWorker extends Student {

	// Student를 상속받는 클래스 StudentWorker 선언
    
}
  • 위의 Student 클래스는 Person 클래스의 멤버를 물려받으므로, Person 클래스에 선언된 필드나 메소드를 다시 반복하여 작성할 필요가 없고, 필드나 메소드를 추가 작성하면 된다. (StudentWorker가 Student를 상속받으면 Person 클래스의 멤버도 자동상속 받는다.)
// 클래스 상속 만들기
class Point {

    private int x, y; // 한 점을 구성하는 x, y 좌표

    public void set(int x, int y) {

        this.x = x; this.y = y;

    }

    public void showPoint() { // 점의 좌표 출력

        System.out.println("(" + x + "," + y + ")");

    }

}

class ColorPoint extends Point {

    private String color; // 점의 색

    public void setColor(String color) {

        this.color = color;

    }

    public void showColorPoint() {

        System.out.println(color);
        showPoint(); // Point 클래스의 showPoint() 호출

    }

}

public class main {

    public static void main(String[] args) {

        Point p = new Point(); // Point 객체 생성

        p.set(1, 2); // Point 클래스의 set() 호출
        p.showPoint();

        ColorPoint cp = new ColorPoint(); // Colorpoint 객체 생성

        cp.set(3, 4); // Point 클래스의 set() 호출
        cp.setColor("red"); 
        cp.showColorPoint(); // 컬러와 좌표 출력

    }

}
  • 실행 결과

상속 선언

// Point를 상속받는 ColorPoint 클래스의 상속 선언
class ColorPoint extends Point {

	...

}

서브 클래스의 객체 생성

  • 상속에서 일차적으로 이해해야 하는 것은 바로 서브 클래스 객체의 모양이다.
Point p = new Point();
ColorPoint cp = new ColorPoint(); // 서브 클래스 객체 생성

서브 클래스에서의 슈퍼 클래스 멤버 접근

  • 서브 클래스는 슈퍼 클래스의 private 멤버를 제외하고 모든 멤버를 접근할 수 있다.

좋은 웹페이지 즐겨찾기