ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - 상속과 다형성(상속)1
    개발언어/JAVA 2023. 10. 17. 15:29

    상속이란?

    B클래스가 A클래스를 상속받으면 B클래스는 A클래스의 멤버 변수와 메서드를 사용할 수 있다. 객체 지향 프로그램은 유지 보수하기 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것이 유연한데, 그 기반이 되는 기술이 상속이다.

     

    클래스의 상속

    class B extends A {
    
    }

    자바 문법으로 상속을 구현할 때는 extends 예약어를 사용한다. 이때 사용하는 extends 예약어는 '연장,확장하다'의 의미이다. 즉 A가 가지고 있는 속성이나 기능을 추가로 확장하여 B클래스를 구현한다는 뜻이다.

     

    위 그림과 같은 관계를 생각해 보자 포유류는 사람보다 일반적인 개념이다. 즉 사람은 포유류의 특징과 기능을 기본으로 더 많거나 다른 특징을 가지고 있다. 이렇게 상속 관계에서 상위 클래스가 하위 클래스보다 일반적인 개념이고, 하위 클래스는 상위 클래스보다 구체적인 클래스가 된다. 

     

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

    package inheritance;
    
    public class Customer{
     private int customerID;
     private String customerName;
     private String customerGrade;
     int bonusPoint;
     double bonusRatio;
     
     public Customer(){
        customerGrade = "SILVER"  //기본등급
        bonusRatio = 0.01 //보너스 포인트 기본 적립 비율
     }
     
     //보너스 포인트 적립, 지불 가격 계산 메서드
     piblic int calcPrice(int price){
     	// 보너스 포인트 계산
     	bonusPoin += price * bonusRatio;
        return price;
     }
     
     public String showCustomerInfo(){
        return customerName + "님의 등급은 " + customerGrade + "이며, 보너스 포인트는" + 
        bonusPoint + "입니다.";
        
     }
    }

     

    새로운 등급이 필요한 경우

    예제 시나리오
    고객이 점점 늘어나고 판매도 많아지다 보니 단골 고객이 생겼습니다. 단골 고랙은 회사 매풍에 많은 기여를 하는 우수 고객입니다. 이 우수 고객에게 일반 고객보다 더 좋은 혜택을 주고 싶습니다. 우수 고객 등급은 VIP이고, 다음과 같은 혜액을 제공합니다.
    - 제품을 살 때는 항상 10%할인해 줍니다.
    - 보너스 포인트를 5% 적립해 줍니다.
    - 전문 상담원을 배정해 줍니다.

    package inheritance;
    
    public class VIPCustomer extends Customer{
        private int agentID; //VIP 고객 상담원 아이디
        double saleRatio; //할인율
        
        public VIPCustomer(){
        	// 오류
        	⛔️customerGrade = "VIP" //상위 클래스에서 private 변수이르로 오류 발생
            bonusRatio = 0.05;
            saleRatio = 0.1;
        }
        
        public int getAgentID(){
         return agentID;
        }
    }

    Customer 클래스를 상속 받아 구현한 VIPCustomer 클래스에는 두가지 문제가 있다.

     

    첫째,  VIPCustomer 생성자의 첫번째 코드에서 오류가 발생한 다는 것이다. 상위 클래스에서 선언한 변수인데 오류가 발생한 이유는 무엇일까? 왜냐하면 상위 클래스에서 customerGrade는 private 변수이다. 따라서 외부 클래스에서는 이 변수를 사용할 수 없다. 

     

    두번째, VIP 고객에게 제공하는 혜택인 할인율과 세일가격이 VIPCustomer 클라스에는 구현이 되지않았다는 것이다. 

     

    💡tip) 접근제어자

    접근 제어자 설명
    public 외부 클래스 어디에서나 접근할 수 있다.
    protected 같은 패키지 내부상속 관계의 클래스에서만 접근할 수 있고 그 외 클래스에서는 접근할 수 없다.
    아무것도 없는 경우 default이며 같은 패키지 내부에서만 접근할 수 있다. 
    private 같은 클래스 내부에서만 접근할 수 있다.

     

    [출저 - Do it! 자바 프로그래밍 입문 , 박은종]

    http://www.easyspub.co.kr/20_Menu/BookView/A001/267/PUB

     

    http://www.easyspub.co.kr/20_Menu/BookView/A001/267/PUB

     

    www.easyspub.co.kr

     

    '개발언어 > JAVA' 카테고리의 다른 글

    Java - 상속과 다형성(다형성)5  (1) 2023.11.01
    Java - 상속과 다형성(super)2  (0) 2023.10.17
    Java - Object4  (1) 2023.10.17
    Java - Object3  (1) 2023.10.16
    Java - Object 1  (0) 2023.10.16

    댓글

Designed by Tistory.