JAVA를 공부 할 때 가장 중요하고 꼭 알고 넘어가야 하는 부분이 상속과 추상화 개념이다!
상속은 우리가 일상에서 알고 있는 상속 이다. 아버님의 재산을 물려받는 아들의 경우 아버님으로부터 아들은 재산을 상속 받은 경우 이다. 반대로 아버님이 많은 빚을 아들에게 물려주는 경우도 있다. 이 경우에도 아들은 아버님으로부터 많은 빚을 상속 받은 경우 이다.
프로그래밍에서도 어떤 객체가 다른 객체로부터 객체의 데이터(속성)와 메소드를 상속 받을 수 있다. 이럴 경우 상속받은 객체는 상속해준 객체의 데이터 및 메소드를 이용할 수 있고 또는 변경 할 수도 있다.
상속을 통해서 4발 자전거를 만든다고 생각해 보겠다. 자전거에는 기본적으로 핸들, 바퀴, 브레이크, 페달, 프레임 등이 있어야 한다. 그리고 4발 자전거는 바퀴가 4개 있어야 한다. 자전거 제작자가 처음부터 4발 자전거를 만들려고 하면 많은 시간과 노력이 필요 하다. 그래서 자전거 제작자는 아이디어를 생각해 낸다. 자전거 가게에 가서 2발 자전거를 사가지고 와서, 뒷바퀴에 2개의 바퀴를 달면 4발 자전거가 쉽게 제작 되어진다. 몇 일이 걸릴 수 있고, 여러 번의 시행착오가 생길 수 있는 자전거 제작을 단 몇 분만에 뚝딱 끝낼 수 있게 되었다.
프로그램도 마찬가지 이다. 기존의 좋은 클래스가 있다면 상속을 통해서 개발시간을 단축시킬 수 있다.
상속이 필요한 이유!
첫째로는, 모든 개발을 처음부터 하얀 도화지에 할 필요는 없다. 이미 훌륭한 선배님들께서 만들어 놓은 프로그램이 있다면 상속을 통해서 훌륭한 결과물을 빠른 시간 내에 만들 수 있다. 또한 기존의 훌륭한 프로그램은 대부분 검증이 잘 되어 있어 버그도 거의 없을 수 있다.
둘째로는, 다양한 객체(타입)를 상속을 통해서 하나의 객체(타입)으로 묶을 수 있다. 이것은 추상화 개념의 이해가 있어야 한다
자 그러면 바로 코드를 통해 알아보자!
ParentMenu.java
package com.javalec.mune;
public class ParentMenu {
public ParentMenu() {
}
public void makeChungGukJang() {
System.out.println("청국장");
}
public void makeDoenJangGuk() {
System.out.println("된장국");
}
public void makeGalbiJjim() {
System.out.println("갈비찜");
}
public void MakeSoybean() {
System.out.println("콩비지");
}
}
미리 메소드를 만들어 준다. 여기 있는 메소드의 메뉴를 다른 것으로 바꾸려고 하려면 어떻게 해야할까? 이때 상속을 하면 된다. 상속은 extends를 사용한다. 코드를 보자.
ChildMenu.java
package com.javalec.mune;
public class ChildMenu extends ParentMenu {
public ChildMenu() {
}
private void makeBeefChungGukJang() {
System.out.println("쇠고기 청국장");
}
public void makeHotDoenJangGuk() {
System.out.println("얼큰 된장국");
}
public void makeKongNaMool() {
System.out.println("콩나물국");
}
@Override
public void makeChungGukJang() {
System.out.println("냄세 없는 청국장");
}
}
이렇게 만들어둔 클래스에 extends를 이용해서 상속 받으면 된다. 그리고 @override를 통해 메소드를 상속 받아 원래 청국장을 냄세 없는 청국장으로 출력할 수 있다!
MainClass.java
package com.javalec.mune;
public class MainClass {
public static void main(String[] args) {
ChildMenu childMenu = new ChildMenu();
childMenu.makeChungGukJang();
childMenu.makeDoenJangGuk();
childMenu.makeGalbiJjim();
childMenu.makeHotDoenJangGuk();
childMenu.makeKongNaMool();
childMenu.MakeSoybean();
}
}
냄세 없는 청국장
된장국
갈비찜
얼큰 된장국
콩나물국
콩비지
실행 하면 위처럼 출력되는 것을 볼 수 있다!!
간단히 상속을 정리 해봤는데, 매우 중요한 개념인 것 같다. 그리고 TMI지만 오늘 오라클 설정하면서 eclipse랑 java 버전 때문에 삽질을 좀 했다... 으 그리고 왜 오라클 11버전 공홈에 없는지 모르겠다...ㅎ