티스토리 뷰
저를 포함한 초보자분들에게 도움이 됐으면 좋겠습니다.
초보자분들은 수박 겉핥기 식으로 알고 넘어가지 마시고, 조금이라도 왜 이렇게 프로그램이 돌아가는지 알고 가시는 시간이 됐으면 좋겠습니다.
자바 뜯어보기 - 클래스 편 보셨는지요? 상속은 클래스 편을 반드시 보고 오시는 게 좋습니다.
http://sims-solve.tistory.com/5?category=747624
오늘은 클래스 편에 이어 '상속'에 대해서 이야기해보도록 하겠습니다.
대개 일상생활에서는 '상속' 하면 '재산 상속'이 생각나네요.
'재산 상속'이라 하면 가지고 있는 재산을 물려준다.라는 의미가 되는데요.
클래스에서도 이 의미가 통하게 됩니다.
일단 자바에서 어떻게 상속을 받는지 살펴보도록 합시다.
(1)public class parent { public void say() { System.out.println("부모의 유산"); } }
(2)public class son extends parent{ }
(1)은 parent(부모)가 되는 클래스를 정의해 주었습니다.
(2)는 son(자손)이 parent를 상속받은 클래스입니다.
(2)에서 보듯 상속은 extends를 사용합니다. 이렇게 parent를 상속해주면 어떻게 될까요?
상속은 '재산 상속'과 같다고 말씀드렸습니다. parent의 재산은 무엇일까요?
재산은 parent가 가지고 있는 변수 / 메소드라고 생각하시면 됩니다.
즉 parent가 가지고 있는 모든 것을 son에게 물려줍니다.
이렇게 되면 son은 무슨 이득이 있을까요? (3) 코드를 보시죠.
(3)public class son extends parent{ public static void main(String[] args) { son myson = new son(); // 객체생성 myson.say(); // "부모의 유산" 출력 } }
say()라는 메소드는 (1) 소스에서 보듯이 parent에서 선언한 메소드입니다.
하지만 son은 parent를 상속받고 있으므로 son 형태로 만든 myson 객체가 say 메소드를 사용할 수 있습니다. 마치 myson 객체 안에 선언된 메소드처럼 사용할 수 있게 되는 것이죠.
이게 바로 상속입니다. 다시 정의를 하지 않아도 부모에게서 물려받은 변수 / 메소드를 재사용 할 수 있습니다.
물론 myson 안에 say가 생성되는 것은 아닙니다. 상속을 받게 되면 son - parent 순으로 연결이 된다고 생각하시면 됩니다. 그래서 myson.say()를 하게 되면, 처음은 son 클래스에 say()메소드가 있는지 찾습니다. 없으면 다음 순서인 parent로 넘어가 say()가 있나 찾습니다. 이렇게 상속받은 쪽으로 올라가면서 해당 메소드,변수가 있는지 찾아 찾으면 실행시켜 주는 것이죠.
증명을 하고 넘어가 보죠. 만약 son에서도 say()가 있다면 어떻게 될까요?
(4)public class son extends parent{ public void say() { System.out.println("자손의 유산"); } public static void main(String[] args) { son myson = new son(); // 객체생성 myson.say(); // "자손의 유산" 출력 } }
(4) 코드를 해보시면, son에 있는 say 메소드가 실행되는 것을 보실 수 있을 겁니다.
이처럼 생성한 자손의 클래스에서 먼저 say()가 있는지 찾기 때문에 son에 있는 say()가 출력되는 것을 볼 수 있습니다. 이것을 바로 '오버라이딩'이라고 합니다.
지금은 간단히 설명하고 넘어가겠습니다. '오버라이딩'은 부모가 물려준 재산 중 중복된 재산이 있다면
부모의 재산을 사용하지 않고 내가 가지고 있는 재산을 사용하겠다는 겁니다.
즉, 부모 건 필요 없다는 소리죠. '오버라이딩'에 관한 내용은 추후에 쓰겠습니다.
오늘도 코드적으로 뜯어보기보단 이론적인 설명이었습니다. 자바에서 Class를 사용하는데 상속은 약방에 감초같이 빠질 수 없는 역할을 하죠. 상속은 그렇게 어려운 개념은 아니므로 잘 이해하시고 넘어가시길 바랍니다.
다음은 오버라이딩,은닉 등등.. 추가적인 부분을 올리도록 하겠습니다.
'JAVA' 카테고리의 다른 글
[JAVA]8. 자바 뜯어보기 - this, super, final 편 (0) | 2018.08.31 |
---|---|
[JAVA]7. 자바 뜯어보기 - 오버라이딩(Overriding)/오버 로딩(Overloading)/하이딩(hiding) (0) | 2018.08.30 |
[JAVA]3-1. 자바 뜯어보기 - 입력처리(StringTokenizer) (0) | 2018.08.28 |
[JAVA]5. 자바 뜯어보기 - 클래스편 (0) | 2018.08.28 |
[JAVA]4. 자바 뜯어보기 - 자료형편 (0) | 2018.08.27 |
- Total
- Today
- Yesterday
- python
- Tree
- 깃
- 디텍션
- DeepLearning
- GIT
- 정리
- 도커
- CNN
- V11
- GNN
- 백준
- docker
- YOLOv8
- 어탠션
- 초보자
- 자바
- YOLO
- 욜로
- 뜯어보기
- 티스토리챌린지
- java
- c3k2
- 이미지
- github
- yolov11
- 오류
- 딥러닝
- 알고리즘
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |