부모(슈퍼Super 클래스) 클래스 ---> 자식(서브Sub 클래스) 클래스 (멤버변수, 메소드를 물려 줄 수 있다.)
이렇게 부모 클래스의 내용을 자식 클래스에게 물려주든 모든 기능을 물려주는 것이다.
하지만 상속과 복사는 다르다. (기능은 비슷하지만, 의미가 조금 다르다.)
만약 A class를 1000줄짜리 이상의 코딩을 진행하였다고 가정해보자.
거기에 추가로 B라는 클래스, C라는 클래스를 생성할때 만약 A클래스와 코드가 중복되거나, 비슷한 내용의 소스 코드가 비슷한게 많다면, 이때 우리는 상속이라는 방식으로 중복의 제거를 할 수가 있다.
이는 굉장히 혁신적인 방식으로 우리의 좌절과 피로를 줄여줄수가 있다.
즉 복사와 상속의 차이는 복사를 한다면 복사한 만큼의 코드 수가 추가가 되겠지만, 상속의 경우 내용은 가져오되
코드의 양은 늘어나지않는다 라는 것이다. 그렇다면 코드의 양이 많아지면 어떤 문제가 발생될 수 있을까?
라인이 많아지면 개발시간이 늘어날수있는 리스크가 발생할수가있다. 코드는 최대한 간결하고 깔끔하게 처리를 하는것이 관건이다.
상속의 장점은
기존의 부모 클래스의 멤버변수, 메소드를 그대로 사용하며 부모의 소스 코드를 재사용(=재활용)할수가 있다.
코딩의 양이 줄어들고 개발시간이 단축된다.
상속의 특징은
1.부모->멤버변수,메서드를 상속(O)->생성자는 상속불가(X)
(구조적인 문제때문에)
단)private로 선언된 멤버변수와 메서드는 상속불가(X)
=>접근권한자 때문에 private (개인적인것)
2.다중상속 불가(동시에 한개이상의 부모로부터 상속금지)
class 자식 extends 아버지,어머니(X) ->다중 상속X
sub() sub()
=>프로그램이 복잡=>X ** 단일상속만 지원(간편,명확하게) **
class Child extends Father
class Child extends Mother
=>프로그램이 복잡->서로 다른 클래스->똑같은 메서드가 존재하면
구분X
=>단일상속만 가능-->C++(다중 상속을 허용)
3.상속도 누적제 =========> Parent(10억) int a
|
Child(20억) int b
| |
GrandChild(30억)->int a,b
=>기능이 많아진다.
(멤버변수,메서드의 갯수가 증가)
상속 예제 실행 해보기
우선 상속을 하려면 상속을 받으려는 Super 클래스를 생성해줘야한다. 회사의 직원들의 정보를 입력 할수있는Employee.java파일을 위 사진과 같이 생성해보자. Super 클래스는 실행하는 클래스가 아니기때문에 main 으로 체크할 필요없이 생성을 하면된다.
※ 주의 ※ 상속시 생성자는 상속이 안된다.
참조 사항 _ 슈퍼 클래스에서 서브 클래스로 상속 하는 방법 _
자식클래스명 extends 부모클래스명
ctrl+space 를 동시에 누르면 상속받은 내용(멤버변수, 메소드)들이 목록을 통해 모두 보여진다. 어떠한 데이터를 상속받았는지를 알 수가 있는것임.
위 사진은 현재 가정하에 직원들이 아직 부서가 정해지지않았을때 상속받은 Manager 클래스에서 새롭게 멤버 변수도 정할수있다는것을 보여주는것 이다.
또한 생성자는 상속이 되질 않기때문에 따로 작성을 해야하고
상속을 받은후 상속 받은 내용이 무엇인지 식별하기 편하게 데이터를 입력후 주석 처리를 해준다.
그다음 우리는 값을 출력 또는 기능으로 작동할만한 Company.java라는 클래스를 생성하여 작동할 준비를 위해 위와 같이 코드를 작성해 주면된다.
위에서 말했듯, 생성자는 상속이 안되기때문에, public Manager()로 새로 생성을 해준다. 기존(슈퍼 클래스)에 있는것들(name,age,sung,salary,addr) + 이번 클래스에서 새롭게 추가한 내용들(department)을 추가적으로 구문입력을 해준다.
이제 신입사원3명이 입사를하게되어 상속받은 클래스를 이용 main클래스에 데이터 입력 구문을 위와 같이 입력해보자.
그리고 부서배치를 위해 Manager 클래스에서 m1이라는 변수로 새로운 데이터를 부서지정과 함께 입력을 위와 같이 해주자
그리고 위에서 만든 Employee sub[];의 Employee객체만 저장이 되는 배열에 신입 사원 3명의 정보를 위와 같이 넣어주면 현재 m1.sub[ ]배열안에 1번은 홍길동씨의 정보, 2번은 테스트 씨의 정보, 3번은 임시 씨의 정보가 들어가 잇는것이다.
이제 우리는 배열안에 저장된 정보를 for문을 이용 직원의 모든 정보를 위와 같이 출력할수가 있다. 배열의정보.display();를 하면 배열안에 넣은 데이터를 모두 출력할수가있다.
팀장의 정보는 for문 밖에서 m1.display를 하면 위와같이 출력이된다.
배열의 정보를 보기 좋게 간결하게 출력을하는 방법은 display(); 메소드를 활용하여 출력하면 간편하고 간결하다.
여기서 상속의 단점에 대해 집고 넘어가자.
부모 salary*1.5는 Employee에만 적용이 되는것으로 자식입장에서도 똑같이 보너스가 1.5로 계산이 된다는것이다.
이때 해결할수 있는 방법은 "오버 라이딩" 기법을 사용하여 문제를 해결 할 수가있다.
오버라이딩은 부모로부터 물려받은 메소드 중에서 자식클래스 입장에서 내용이 맞지않을때 자식클래스에 내용에 맞게 내용을 수정하는 기법이다.
방법 => 부모의 물려받은 메소드를 자식클래스 내부에 맞게 다시 한번 더 써주면 된다. (내용을 변경해서)
상속받는 구문 안에 보너스 메소드를 입력해주면 된다. 그렇다면 하위에 있는 m1.display(); 에서는 오버라이딩된 보너스 구문으로 적용이 되며 보너스는 *3.0으로 계산이되어 호출이된다.
'JAVA-Spring > 상속성' 카테고리의 다른 글
JAVA 자바 [ 객체 지향 프로그래밍 ] 생성자, Super (0) | 2019.07.22 |
---|---|
JAVA 자바 [ 객체 지향 프로그래밍 ] 상속과 생성자와의 관계 (0) | 2019.07.19 |
댓글