본문 바로가기
Java

[Java] 상속? 예제로 알아보는 상속의 목적과 장점

by 나는 개발자 2021. 1. 12.
TIL: 스스로 이해한 것을 바탕으로 정리하였기에 오류가 있을 수 있습니다. 틀린 부분은 댓글로 알려주시면 감사하겠습니다.

 

 

상속 inheritance

다른 클래스가 가지고 있는 멤버를 그대로 물려받음으로써 새 클래스를 자신의 멤버처럼 사용할 수 있는 기능

 

상속의 목적

부모가 만든 기능을 자식이 그대로 물려받음으로써 재활용이 가능해지고,

유지보수에 용이하다. 

중복된 코드를 제거해줄 수 있다.

 

 

 

 

 

상속이 있을 때와 없을 때의 예시로 상속의 특징을 알아보기.

 

 

상속이 없다면?

(tv, smartphone, desktop의 정보들을 객체로 관리하는 프로그램)

tv에는 제품명, 제품 코드, 브랜드명, 가격, 인치의 정보가

smartphone에는 제품명, 제품 코드, 브랜드명, 가격, 통신사의 정보가

desktop에는 제품명, 제품 코드, 브랜드명, 가격, 모니터 본체 일체 여부의 정보를 담는다고 가정했을 때,

각 클래스의 필드부
각 클래스의 생성자부

 

각 클래스의 메소드부(setter메소드와 getter메소드)

 

 

메인메소드에 호출

 

Tv/ Smartphone/ Desktop 클래스를 들여다보면 중복되는 코드들이 너무나 많다.

(제품명, 코드명, 브랜드명, 가격)은 모두 중복되는 요소들이다. 

 

 

 

 

상속을 이용한 예제

부모클래스가 될 클래스

이렇게 부모 클래스(super클래스)를 따로 만들어 공통된 요소들을 기입해주었다.

그리고 자식 클래스에서 호출하기

클래스가 작성되어있는 곳에 extends로 상속을 명시해주고 뒤에 부모 클래스를 호출해준다.

각 클래스의 필드부

부모 클래스에서 공통적인 요소를 생성해주었기 때문에 필드부에는 공통적이지 않았던 부분만 추가로 생성만 해주면 된다. 

생성자부

생성자부에서는 super를 이용해서 호출해 줄 수 있다. 

다만, 부모 클래스의 필드부 접근 제한자가 private일 경우 직접 접근이 불가하다.

 

3가지 방법으로 호출할 수 있다.

1) 부모 필드의 접근 제한자를 protected로 바꿔주기 (protected 다른 패키지, 상속 구조에선 호출 가능)

super.pName = pName;

super.pCode = pCode;

super.brand = brand;

super.price = price;

 

2) setter메소드(public)을 활용하기

super.setpName(pName);

super.setpCode(pCode);

super.setBrand(Brand);

super.setPrice(Price);

 

3) super( )를 이용하기   ====> 예제에선 3번 방법 사용

super(pName, pCode, brand, price);

 

메소드부

메소드부 또한 필드부처럼 추가할 부분만 추가해준다.

 

메인메소드에 호출

메인메소드는 똑같이 호출해주면 된다.

 

 

 

 

상속의 장점

예시를 보면 알 수 있듯이 상속을 사용하면 

1. 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고

2. 코드를 공통적으로 관리하기 때문에 코드의 추가나 변경에 용이하며

3. 중복된 코드를 줄였기 때문에 프로그램의 생산성과 유지보수에 용이해진다. 

 

 

 

 

상속의 특징

클래스간의 상속은 단일 상속만 가능하다. (부모는 하나!)

명시되어 있지 않지만 모든 클래스 (자바에서 제공하는 클래스, 내가 만든 클래스)는 object클래스를 상속받고 있다.

그렇기 때문에, object클래스가 제공하고 있는 메소드는 마음대로 호출해서 사용받을 수 있다. (오버라이딩도 가능)

 

 

 

정리하자면,

공통적인 필드와 메소드를 부모 클래스에 정의하고, 각 클래스마다 필요한 필드와 메소드는 자식 클래스에 정의해놓기!

댓글