JAVA101

준비중..

JAVA101

자바 프로그래밍 입문

15 상속과 생성자 호출

# 상속과 생성자 호출 ## 들어가며 --- 이전 장에서 우리는 접근 제한자와 자바 API에 대해 배웠습니다. ![클라우드스터딩-자바-접근-제한자와-자바-API](https://i.imgur.com/bM4TLEB.png) 이번 장에서는 상속과 인터페이스에 대한 내용을 배울 건데요, 그 시작으로 상속에 대한 개념을 알아보도록 하죠. ## 목차 --- 1. 상속이란 2. 상속의 필요성 ## 1. 상속이란 상속이란, *기존 클래스를 확장하여 새 클래스를 만드는 것*입니다. ![클라우드스터딩-자바-상속-예](https://i.imgur.com/1TYV6ln.png) 상속이라는 개념을 설명하기 위해, RPG 게임 속 직업으로 초심자와 마법사라는 직업이 있다고 해볼게요. 또 초심자(Novice)는 마법사(Wizard)로 전직이 가능하고, 각 직업의 속성은 아래와 같다고 합시다. ![클라우드스터딩-자바-상속-사용-전](https://i.imgur.com/E4Mn7r4.png) 위 클래스 다이어그램을 보면, Novice와 Wizard에 중복 속성이 있죠? 이때, 상속 개념을 사용하면 이러한 중복을 제거할 수 있습니다. 그뿐 아니라, 더 확장 가능한 형태의 클래스를 구성할 수 있게 되죠. 어떻게요? 바로 `extends` 키워드를 사용해서 말이죠! ![클라우드스터딩-자바-상속-코드-예](https://i.imgur.com/5r0jFjT.png) 위 코드를 보면 Wizard는 extends 키워드를 통해 Novice의 속성을 물려받습니다. 다시 말해, Novice 클래스로부터 확장되는 거죠. 따라서 Wizard 클래스는 실제로 자신의 필드인 mp와 fireball() 메소드 뿐만 아니라, Novice의 두 필드 name과 hp와 메소드인 punch()를 가지게 됩니다. 이를 확인하기 위해 아래와 같은 코드를 실행해 볼 수 있겠네요. (더 자세한 내용은 실습을 통해 연습해볼게요) ``` // 객체 생성 Wizard w = new Wizard(); // 필드 초기화 w.name = "닥터 스트레인지"; w.hp = 100; w.mp = 100; // 메소드 수행 w.punch(); w.fireball(); ``` ## 2. 상속의 필요성 --- 이러한 상속을 사용하면 어떤 장점이 있을까요? ![클라우드스터딩-자바-상속의-장점](https://i.imgur.com/AEvkrgq.png) #### 중복 코드 제거 먼저는 앞서 말한 중복 코드를 제거할 수 있습니다. 만약 상속없이 코드를 작성했다면 아래와 같이 중복이 많았겠죠? ``` class Novice { private String name; private int hp; public void punch() { System.out.println("Punch!!"); } } class Wizard { private String name; // 필드 중복 private int hp; // 필드 중복 private int mp; // 메소드 중복 public void punch() { System.out.println("Punch!!"); } public void fireball() { System.out.println("Fireball@@"); } } ``` #### 프로그램의 확장성 증가 더 나아가 상속은, 클래스 코드의 *재사용성(**resuability**)을 증가*시키는데요, 이는 프로그램의 확장성을 증가시키게 됩니다. 지금까지 상속에 대한 정의와 필요성에 대해 이야기해보았는데요, 다음 실습을 통해 더 연습해보도록 할까요? ## 요약 --- 1. 상속이란, 기존 클래스를 확장하여 새 클래스를 만드는 것이다. 2. 상속을 사용하면, 중복된 코드를 줄일 수 있다. 3. 상속은 코드의 재사용성 및 확장성을 증가시킨다. 4. extends 키워드로 상속을 구현한다. ## 확인하기 --- <div class="interact_responsive_padding" style="padding:100% 0 0 0;position:relative;margin-bottom:5px;"><div class="interact_responsive_wrapper" style="height:100%;left:0;position:absolute;top:0;width:100%;"><iframe id="interactApp5d121d76553fe300148a86f7" width="100%" height="100%" style="border:none;max-width:100%;margin:0;" allowTransparency="true" frameborder="0" src="https://quiz.tryinteract.com/#/5d121d76553fe300148a86f7/q/1?method=iframe"></iframe></div></div>