본문
상속
# 상속
- 상속이란 ?
기존 클래스를 가져다가 클래스를 확장하여 만드는 것
즉, 기존 클래스가 가지고 있는 데이터 구조와 기능을 그대로 물려 받아 사용한다. 는 의미이다.
그래서 부모클래스, 자식클래스라는 말이 생긴 것이고
그걸 좀 더 이해하기 쉽게 말하면 부모가 자식에게 자신의 재산을 물려준다는 것을 생각하면 된다.
- 그럼 부모는 누가 정하고 자식은 누가 정해 ?
그건 개발 하기 전이라면 먼저 생각해서 물려줄만한 부모를 만드는 것이 맞지 않나 싶다.
개발 전에 부모의 능력을 잘 다듬어놔야 하지 않을까 한다.
부모가 능력이 되야 자식도 금수저로 태어난다고,
부모의 상속해 줄 능력에 따라 자식이 손 쉽게 제작 할 수가 있다.
- 상속을 필요한 이유 ?
예의 첫번째)
A클래스에 a, b, c 행동을 하는 함수가 있다.
B클래스를 새로 만드는데, A클래스의 a, b 행동의 함수랑 유사하게 행동을 하는 함수가 필요하다.
상속이 몰랐을 때에는 A클래스에 있는 함수를 복사하여 B클래스에 붙여 넣는다.
그리고 B클래스에 맞게 수정하거나, 그대로 사용한다.
그럴 경우 발생하는 문제가 있다.
우리는 항상 유지보수를 생각하며 개발해야 하는데 상속을 사용하지 않을 경우에는
"a, b 행동(메소드)의 규칙이 조금 바뀌었다." 라고한다면
그러면 A클래스도 변경해야하고, B클래스도 변경해주어야 한다.
A클래스, B클래스 총 2개여서 다행이지 만약 20개의 클래스라 한다면, 와우 20개 클래스 전부 바꾸어 주어야 한다.
상속을 알게된 지금은
A클래스에 있는 함수를 B 클래스가 " 물려줘어 ! 내(B)가 너(A)에게 상속을 받겠어 ! " 라고 선언하면,
이미 갖춰져있는 A클래스가 B에게 자기의 기능(행동) 등을 넘겨준다.
예의 두번째)
네발 자전거를 만들고 싶다. 만들으려 할 때에 핸들, 바퀴, 브레이크, 페달 등등 여러가지가 있어야 한다.
처음부터 만들려고 한다면 오랜 시간과 노력이 필요하다는 것을 알 것이다.
그래서 쉽게 두 발자전거를 구입해서 바퀴 2개를 붙이는 방법을 실행 했다.
처음 생각했던 것보다 많이 쉽게 네발 자전거를 완성했다.
여기서 두발 자전거가 부모클래스이고, 네발 자전거가 자식클래스인 것이다.
다시 정리하면, 크게 2가지로 나뉘는데
첫번째로는 모든 개발을 처음부터 하얀 도화지에 하지는 않을 것이다. 회사에 들어가게 되면 이미 만들어져있는 프로그램이 있을 것이고, 상속을 통해서 훌륭한 결과물을 빠른 시간 내에 만들 수 있다. 또한 기존의 프로그램은 대부분 검증이 잘 되어 있어 버그도 거의 없을 것이다. 즉, 속도가 단축된다.
두번째로는 다양한 객체(타입)를 상속을 통해 하나의 객체(타입)으로 묶을 수 있다. 추상화 개념이 있어야 한다.
Q) 그럼 부모 클래스의 모든 메소드들을 자식이 실행해야 하는가 ?
A) 아니다. 자식은 필요한 것만 받고, 변경할 곳은 변경 할 수 있다.
- 부모클래스와 자식클래스의 진행되는 순서
프로그램이 실행될 때 Static으로 선언된 것이 있다면 Static이 가장 우선 (main도 static이다.) 이고,
객체 생성시 가장 먼저 동작하는 부분은 생성자이다.
- Main에서 자식클래스를 생성하는 순간 => "자식클래스 변수명=new 자식클래스();"
1. 자식클래스의 생성자()가 실행이 되며, ( 생성자가 하나도 선언 되어있지 않으면 내부적으로 기본생성자가 선언되어있다. )
2. 자식클래스의 생성자에서 가장 먼저는 부모생성자에게 간다.
자식클래스의 생성자에는 super(); 라고 내부적으로 선언 되어있다.
3. 부모생성자를 실행하고 다시 자식 생성자의 나머지를 실행한다.
- 부모클래스에 있는 생성자를 자식클래스에서 동일한 메소드명으로 다른 {} 동작을 만들 경우를 오버라이드라고 한다.
오버라이드한 메소드는 자식만 실행된다.
즉, 자식 것만 실행되지 부모것은 실행되지 않는다.
- 출처 및 참고 : http://smilennv.blog.me/220443312153
댓글