일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- throws
- try-catch
- ArrayList
- 졸리다
- 다형성
- 메서드
- FileInputStream
- 새벽공부
- 개발자
- 파이팅
- 인스턴스
- 인터페이스
- Java
- 변수
- 예외 처리
- node.js
- 보조 스트림
- SSR
- 자료형
- 백엔드
- 초보개발자
- 문자 단위 스트림
- 코린이
- 상속
- 자바
- 코딩
- 바이트 단위 스트림
- exception
- MPA
- 배열
- Today
- Total
SHUSTORY
08-1 상속 본문
클래스의 상속
B 클래스가 A 클래스를 상속받으면 B 클래스는 A 클래스의 멤버 변수와 메서드를 사용할 수 있다.
객체 지향 프로그램은 유지보수 및 프로그램 수정과 내용 추가가 유연한데, 이 기반이 되는 기술이 '상속'이다.
B 클래스가 A 클래스에게 상속받을 때, 화살표로 표시할 때는 B→A로 표현한다. ( * 화살표 방향 주의 )
여기서 A 클래스를 부모 클래스, 상위 클래스라고 부르며 B 클래스를 자식 클래스, 하위 클래스라고 부른다.
위 상속 문법은 B 클래스가 A클래스를 상속받는 코드이다.
상속 관계에서 상위 클래스가 하위 클래스보다 일반적인 개념이고, 하위 클래스가 구체적인 클래스가 된다.
상속을 사용하여 고객 관리 프로그램 구현하기
회사에서 고객 정보에 맞춤 서비스를 제공하기 위한 고객 관리 프로그램을 구현하고자 할 때,
먼저 고객 클래스 속성(고객 아이디, 이름, 고객 등급, 보너스 포인트, 보너스 포인트 적립 비율)을
멤버 변수로 선언하여 고객 클래스를 구현한다.
예제01의 calcPrice는 제품에 대해 지불해야 할 금액을 계산하여 반환한다.
현재 15행의 금액은 할인되지 않고 그대로 가격을 반환한다.
이렇게 간단한 객체 지향 프로그램을 구현해보았는데,
여기서 만약 VIP 고객 등급을 만들어 더 많은 혜택을 주고 싶다면 이와 관련하여 어떻게 구현하는 것이 좋을까?
만약 Customer 클래스에 VIP 고객에게 필요한 변수와 메서드까지 함께 표현하여 구현한다면
Customer 클래스의 코드는 복잡해질 것이며, 일반 고객의 인스턴스를 생성할 때는 필요 없는 VIP 고객 관련
인스턴스까지 생성되는 낭비가 발생한다.
그렇기 때문에 VIPCustomer 클래스를 따로 만들어야 하는데, VIPCustomer도 결국 고객이므로,
Customer 클래스와 겹치는 멤버 변수와 메서드가 존재할 것이다.
또한 동일한 이름의 메서드( 여기서는 calcPrice가 될 것이다. )에 다른 구현 내용을 갖게 될 수도 있다.
즉 일반 고객에게 제공하는 혜택을 기본으로 제공하고 추가 속성과 메서드가 필요한데, 이 경우 상속이 사용된다.
예제02의 8행에서 오류가 발생하는 이유는 상위 클래스에서 customerGrade가 private으로 선언되어 있기 때문이다.
상속을 받는 하위 클래스이더라도 외부 클래스이므로 private 변수는 사용할 수 없다.
private를 protected로 변경하면 하위 클래스까지 사용할 수 있게 되므로 오류가 발생하지 않는다.
예제02의 VIPCustomer 클래스는 Customer 클래스에 선언되어 있는 멤버 변수와 메서드를 상속 받아 사용할 것이기
때문에 따로 구현하지 않아 간단하게 작성할 수 있었다.
* 참고로 VIP 고객에게 제공하는 혜택인 할인율과 세일 가격은 아직 구현하지 않은 코드이다.
예제03은 예제01에서 private로 선언한 변수들을 protected로 변경하고
customerID, coustomerName, customerGrade 변수를 사용하기 위해 get( ), set( ) 메서드를 추가한 것이다.
다음 예제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 |