Ch.5 상속

^_^·2022년 3월 14일
0

JAVA

목록 보기
5/7

상속(Inheritance)이란?

  • 상속이란 특정 클래스를 구성할 때 기존 클래스의 데이터(속성)와 메소드를 상위(부모) 클래스에서
    그대로 물려받아서 중복적인 코드를 줄인 것
  • 하나의 변수 타입으로 여러 종류의 객체를 의미하는 추상화

데이터 위주의 상속 팁

  • 데이터가 옆으로 늘어날 때(칼럼이 추가될때) 사용하자
  • 하위 클래스를 먼저 만들고 상위 클래스로 뽑아내는 것
  • private으로 문제 발생할때는 protected, getter/setter을 사용하여 해결

상속에서 사용하는 용어 및 설명

용어 및 문법설명
부모 클래스, Super 클래스, Parent코드를 물려주는 클래스
자식 클래스, Sub 클래스, Child코드를 물려 받는 클래스
extends상속을 사용하는 문법
  • 자식 클래스는 부모 클래스의 모든 것을 물려받는다
  • JAVA에서는 하나의 부모 클래스만 가질수있습니다
  • 변수의 타입은 컴파일러를 위한 것
    ->변수의 타입에 상관없이 실행되는 것은 결국은 객체

원하는 메소드가 없다면 부모 클래스를 찾아서 실행하려 한다

public class Store {
    public void makeZazang(){
        System.out.println("짜장면을 만들어요");
    }
}
public class SeoulStore extends Store{
    @Override
    public void makeZazang() {
        System.out.println("간짜장을 만듭니다.");
    }
}

this 와 super

  • this -> 현재 코드를 실행하는 객체의 데이터나 메소드를 호출할 때 사용
    현재 클래스의 또 다른 생성자를 호출하고자 할 때 사용하는 방식
    같은 클래스의 또 다른 생성자를 호출할 때 사용
  • super -> 현재 코드에서 명시적으로 부모 클래스의 속성이나 메소드를 호출할 때 사용
    상속 관계에서 부모 클래스에 정의된 생성자를 사용하는 방식
    실제 호출되는 생성자는 부모 클래스 안에 정의해 둔 생성자 호출

오버라이드(Override)

  • 자식 클래스에서 부모 클래스의 메소드를 다시 정의
  • 잘 이용하면 간단한 코드로 if~else를 없앨 수 있다

추상 클래스(Abstract Class)

  • 객체가 아니라 타입으로만 존재하고 추상 메소드를 가지는 존재
  • 객체 생성의 용도로 사용하지 않음
  • 변수의 타입으로 선언하는 용도, 상속의 본연의 기능으로 하위 클래스로 코드를 물려주는 기능
  • 100%사용 -> new를 선언하지 못하게
  • 90%%사용 -> new를 선언하지 못하는 것 + 강제성(오버라이드를 강제적으로 해야함)

체크

  • 반드시 ~의 일종이 성립할 때만 사용하자 이외에는 조합(Composition)을 이용할 것
  • 단순 기능을 하나로 모으려고 상속을 사용하지 않음
  • 하위 클래스에서 오버라이드를 많이 할수록 위험한 신호
  • incetanceof를 사용할 때 if~else가 많이 나오면 위험한 신호

변수를 이용할 때 실제 움직이는 객체가 무엇인지 생각해보자.

0개의 댓글