이번시간에는 자바 객체지향 프로그래밍에서 중요한 개념인 상속에 대해서 알아보도록 하겠습니다.
상속은 쉽게 말해서 인간세계를 비유하자면, 부모의 재산을 자식이 모두 물려받고 자식은 그 재산을 다른 수단과 방법으로 더 불릴수 있다는 개념으로 설명하면 좀 더 쉽게 접근하실 수 있을까요?
이걸 프로그래밍의 관점에서 본다면 기존의 클래스를 재사용하여 새로운 클래스를 작성할때 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있으므로 해서 코드의 추가 및 변경이 용이합니다.
이런 특징들은 코드의 재사용성을 높이고 중복을 제거하여 프로그램의 유지보수에 기여하는 바가 크다고 볼 수 있겠습니다.
자바에서 상속을 구현하는 방법은 의외로 간단한데... 새로운 클래스 뒤에 extends의 키워드를 써주고 상속 받고자하는 부모클래스를 써주면 됩니다.
class Child extends Parent { }
상속을 해주는 클래스를 조상클래스, 부모(parent)클래스, 상위(super)클래스, 기반(base) 클래스라고 부르고 이 이름들은 모두 동일한 용어입니다.
상속을 받는 클래스를 자손클래스, 자식(child)클래스, 하위(sub)클래스, 파생된(derived) 클래스라고 합니다.
class Parent {
int age;
}
class Child extends Parent { }
만일 Parent클래스에 age라는 멤버변수가 있다면, 자손 클래스는 조상의 멤버를 상속받기때문에, Child 클래스는 자동적으로 age라는 멤버변수가 추가된 것과 같은 효과를 봅니다.
class Parent {
int age;
}
class Child extends Parent {
void playRun() {
System.out.println("애들이 뛰어 논다");
}
}
Child 클래스에 새롭게 추가된 playRun()함수가 추가되어도 Parent클래스는 아무런 영향을 받지 않습니다.
즉, 부모클래스가 변경되면 자동적으로 자식클래스가 영향을 받지만, 자식클래스가 변경되면 조상클래스는 아무런 영향을 받게 되지 않습니다.
자손클래스는 조상 클래스의 모든 멤버를 상속 받으므로 항상 조상 클래스보다 같거나 많은 멤버를 가집니다. 즉, 상속에 상속을 거듭할 수록 상속받는 클래스의 멤버 개수는 점점 늘어나게 됩니다.
그래서 상속을 받는다는 것은 조상 클래스를 확장(extend)한다는 의미로 해석될 수 있기때문에 키워드 extends를 쓴다고 볼 수 있습니다.
class Parent { }
class Child extends Parent { }
class Child2 extends Parent{ }
위코드에서 Parent클래스를 상속받는 Child2 클래스를 만들었습니다.
클래스 Child와 Child2가 모두 Parent클래스를 상속받고 있으므로 Parent클래스의 Child클래스, 그리고 Parent클래스와 Child2 클래스는 서로 상속관계에 있지만 클래스 Child와 Child2는 아무런 관계가 없습니다.
만일 Child와 Child2에 공통적으로 추가해야할 멤버가 있다면 Parent클래스에 추가해주는 것이 코드의 중복을 막고 관리가 용이해지는 프로그램을 만들 수 있습니다. 코드의 중복성이 많아지면 유지보수가 힘들고 일관성을 유지하기 힘들어지기 때문입니다.
코드의 중복을 최소화해야지만이 프로그램의 오동작을 막을 수 있는 단초를 제공할 수 있다고 볼 수 있습니다.
자손클래스의 인스턴스를 생성하면 조상 클래스의 멤버도 함께 생성되기 때문에 따로 조상클래스의 인스턴스를 생성하지 않고도 조상 클래스의 멤버들을 사용하실 수 가 있습니다.
위의 코드를 보면 지금까지 우리가 논의했던 상속에 대한 개념을 조금은 이해가 되리라 생각됩니다.
코드는 너무 단순해서 따로 설명은 하지 않겠습니다.
다음시간에 이어서 상속에 대해서 더 알아보도록 하겠습니다.
이글이 도움이 되셨다면 공감버튼 눌러주시길 부탁드립니다. ^^
공감버튼은 로그인을 하시지 않아도 누르실 수 있습니다.^^*
제어자(Modifier), 접근제어자(access modifier), static, final, abstract, 다형성 (0) | 2019.03.13 |
---|---|
클래스의 관계, 단일 상속, Object 클래스, 오버라이딩, super, super() (0) | 2019.03.12 |
자바강좌 - 네번째 ( 클래스 메서드, 인스턴스 메서드, 생성자, 변수의 초기화) (0) | 2019.03.10 |
자바강좌 - 세번째 ( 기본형 매개변수, 참조형 매개변수 ) (0) | 2019.03.09 |
자바강좌 - 객체지향 ( 클래스와 객체 2 ) (0) | 2019.03.09 |
댓글 영역