SHUSTORY

08-1 상속 본문

프로그래밍/JAVA

08-1 상속

어서오시우 2023. 2. 25. 13:41
728x90

클래스의 상속

B 클래스가 A 클래스를 상속받으면 B 클래스는 A 클래스의 멤버 변수와 메서드를 사용할 수 있다.

객체 지향 프로그램은 유지보수 및 프로그램 수정과 내용 추가가 유연한데, 이 기반이 되는 기술이 '상속'이다.

 

B 클래스가 A 클래스에게 상속받을 때, 화살표로 표시할 때는 B→A로 표현한다. ( * 화살표 방향 주의 )

여기서 A 클래스를 부모 클래스, 상위 클래스라고 부르며 B 클래스를 자식 클래스, 하위 클래스라고 부른다.

class 상속 문법

위 상속 문법은 B 클래스가 A클래스를 상속받는 코드이다.

상속 관계에서 상위 클래스가 하위 클래스보다 일반적인 개념이고, 하위 클래스가 구체적인 클래스가 된다.

 

상속을 사용하여 고객 관리 프로그램 구현하기

회사에서 고객 정보에 맞춤 서비스를 제공하기 위한 고객 관리 프로그램을 구현하고자 할 때,

먼저 고객 클래스 속성(고객 아이디, 이름, 고객 등급, 보너스 포인트, 보너스 포인트 적립 비율)을

멤버 변수로 선언하여 고객 클래스를 구현한다.

예제01

 

예제01의 calcPrice는 제품에 대해 지불해야 할 금액을 계산하여 반환한다.

현재 15행의 금액은 할인되지 않고 그대로 가격을 반환한다.

 

이렇게 간단한 객체 지향 프로그램을 구현해보았는데,

여기서 만약 VIP 고객 등급을 만들어 더 많은 혜택을 주고 싶다면 이와 관련하여 어떻게 구현하는 것이 좋을까?

만약 Customer 클래스에 VIP 고객에게 필요한 변수와 메서드까지 함께 표현하여 구현한다면

Customer 클래스의 코드는 복잡해질 것이며, 일반 고객의 인스턴스를 생성할 때는 필요 없는 VIP 고객 관련

인스턴스까지 생성되는 낭비가 발생한다.

 

그렇기 때문에 VIPCustomer 클래스를 따로 만들어야 하는데, VIPCustomer도 결국 고객이므로,

Customer 클래스와 겹치는 멤버 변수와 메서드가 존재할 것이다.

또한 동일한 이름의 메서드( 여기서는 calcPrice가 될 것이다. )에 다른 구현 내용을 갖게 될 수도 있다.

즉 일반 고객에게 제공하는 혜택을 기본으로 제공하고 추가 속성과 메서드가 필요한데, 이 경우 상속이 사용된다.

 

예제02

 

예제02의 8행에서 오류가 발생하는 이유는 상위 클래스에서 customerGrade가 private으로 선언되어 있기 때문이다.

상속을 받는 하위 클래스이더라도 외부 클래스이므로 private 변수는 사용할 수 없다.

private를 protected로 변경하면 하위 클래스까지 사용할 수 있게 되므로 오류가 발생하지 않는다.

 

예제02의 VIPCustomer 클래스는 Customer 클래스에 선언되어 있는 멤버 변수와 메서드를 상속 받아 사용할 것이기

때문에 따로 구현하지 않아 간단하게 작성할 수 있었다.

* 참고로 VIP 고객에게 제공하는 혜택인 할인율과 세일 가격은 아직 구현하지 않은 코드이다.

 

예제03

 

예제03은 예제01에서 private로 선언한 변수들을 protected로 변경하고

customerID, coustomerName, customerGrade 변수를 사용하기 위해 get( ), set( ) 메서드를 추가한 것이다.

 

다음 예제04는 위 코드를 간단히 테스트해본 것이다.

예제04

 

'프로그래밍 > JAVA' 카테고리의 다른 글

08-3 메서드 오버라이딩  (0) 2023.02.25
08-2 상속에서 클래스 생성과 형 변환  (0) 2023.02.25
07-3 ArrayList 클래스 사용하기  (0) 2023.02.25
07-2 다차원 배열  (0) 2023.02.25
07-1 배열  (0) 2023.02.24