본문 바로가기
백엔드/Java

<FAST CAMPUS>자바 웹개발 - 객체지향 프로그래밍

by 고구마는호박고구마 2021. 1. 9.

<객체 지향 프로그래밍 25장~32장>

 

상속

새로운 클래스를 정의 할 때 이미 구현된 클래스를 상속 받아서 속숭이나 기능이 확장되는 클래스를 구현한다.

 

기존 클래스보다 확장된 기능을 사용할때 상속을 사용 ( class B extends A {} )

 

Customer 클래스

 

VIP Customer 클래스 만들기 

 기능

 - 제품 구매시 10% 할인

 - 보너스 포인트 5% 적립

 - 담당 상담원 배정

 ( 더 많은 속성과 기능이 추가된다)

 

( customerGrade가 private으로 되어있다면 상속이 되어있어도 사용할수 없다.

 -> protected를 사용하면 상속에서 사용가능(하위클래스에서 사용가능))

 

접근 제한자의 가시성

 

상속에서 클래스 생성 과정과 형 변환

 

 하위 클래스가 생성되는 과정

   - 하위 클래스가 생성 될 때 상위 클래스가 먼저 생성 됨

   super(); 라는 상위클래스의 기본 생성자를 먼저 호출한다. 

super()가 없어도 자동으로 컴파일러가 생성해준다. 

  만약 상위클래스의 기본생성자가 없는경우 (매개 변수가 있는 생성자만 존재하는 경우)

  하위 클래스는 명시적으로 상위클래스의 생성자를 호출해야 한다.

기본 생성자가 없는 경우
super를 불러야 하는데 Customer()가 정의 되어있지 않아서 다른 생성자를 명시적으로 불러라.

 

매개변수가 있는 경우 명시적으로 super를 호출한다.

 

상위 클래스로의 묵시적 형 변환 (업캐스팅)

 - 하위클래스의 타입은 상위클래스의 타입으로 묵시적 형변환이 된다. (역은 성립 x)

메모리는 VIP까지 만들어 졌지만 타입은 Customer이기 때문에 사용할수 있는 기능은 Customer의 기능만 사용 가능.

 

매서드 오버라이딩

  오버라이딩

   - 상위 클래스에 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과

     맞지 않는 경우 하위 클래스에서 동일한 이름의 메서드를 재정의 할 수 있다.

Customer클래스의 calcPrice매서드                                                       VIPcustomer클래스의 calcPrice매서드 

 

 

타입이 Customer라 vc는 Customer클래스의 기능만 있다 했는데? 가상함수로 인하여 VIPCustomer의 메서드가 호출된다.

 

가상 메서드 (virtual method)

  - 메서드의 이름과 메서드 주소를 가진 가상 메서드 테이블에서 호출될 메서드의 주소를 참조

 

다형성

 다형성 (polymorphism) 이란? 

 - 하나의 코드가 여러 자료형으로 구현되어 실행되는 것

   ( 같은 코드에서 여러 실행 결과가 나옴) 

 

   정보은닉, 상속 과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나

   객체지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징임

 

 

다운캐스팅과 instanceof

  

   - 묵시적으로 상위 클래스 형변환된 인스턴스가 원래 자료형(하위클래스)으로 변환 되어야

     할 때 다운캐스팅이라고 한다.

 

   - 하위 클래스로의 형 변환은 명시적으로 되어야 한다.

 

   Customer vc = new VIPCustomer();   // 묵시적

   VIPCustomer vCustomer = (VIPCustomer)vc;  // 명시적

 

Human 클래스에서 오버라이딩 된 함수만 사용할 수 있기때문에 Human클래스의 매서드를 사용하기 위하여 Human 클래스로 다운캐스팅을 한다.

 

안정적으로 다운캐스팅 하귀 위해 if문에 instanceof 를 설정하고 오버라이딩을 사용하면 좋지만 예를 들면 독수리가 책을 읽는 메서드는 할수 없으니 따로 메서드를 쓰기 위해 다운캐스팅을 하여 메서드를 사용한다.

 

 

 

 

댓글