JAVA

상속이란?

NEWDODORIPYO 2022. 3. 14. 15:43

상속이란? 

부모 Class와 자식 Calss 가있으며 자식 Class 가 부모 클래스를 선택해서 그 부모의 내용을 물려받아서 가지고 오는 것

 

자식 클래스는 기본적으로 부모의 모든 메서드 + (자신의 고유 기능) 따라가 자식 클래스는 부모 클래스보다 기능이 더 많은 경우가 많습니다 

 

 

상속의 기준 판단하기 

 

보통 JAVA상속을 검색하면 이런 이미지가 나온다 이 이미지가 의미하는 뜻은 알겠지만 단순하게 이 구조가 상속이다!라고 생각하면 안 된다 그 이유는  위 구조는 로직의 구조이다 로직의 구조로서 저 데이터를 보면 상속의 대상이지만 만약 저걸 데이터로써 본다면 어떨까??? 

 

데이터로써 보면 이런 구조일 것이다 이것은 클래스 하나에 여러 개의 인스턴스일 뿐이다 즉 상속의 대상으로 보기 어렵다 그렇다면 상속을 어떤 기준으로 판단해야 할까요?? 그 판단 기준은 바로 데이터로 볼 것이다 아님 로직으로 볼 것이냐 이다 

 

 

로직 기준 상속 

로직 기준의 상속은 은 정말 쉽게 생각하면 if~else로 생각하면 된다 

로직을 상속하면 코드에서 if else 가 없어진다 기존 로직에서 예외 상황이 생겼을 때 보통 if ,  if else , else를 사용해서 처리해왔지만 상속을 사용하게 된다는 그런 상황을 전부 로직으로 만들어두고 상속해주면 된다 

그래서 결과적으로 상속을 로직으로 봤을 때는 if ~else를 없애는 거다 

 

로직 기준 상속 예제

public class Store {
    public void  makeZazang(){
        System.out.println("짜장면을 만들어요");
    }
}

Class Store를 하나 만들어주었습니다 안에는 짜장면을 만들어요 라는 내용을 출력하고 있습니다 

public class Main {
                       //파라미터로 Store 를 받아온다
    public static void order(Store store) {
          //makeZazang 를 가져온다
        store.makeZazang();
    }

    public static void main(String[] args) {

        Store store = new Store();

        order(store);
    }
}
⭐결과
 짜장면을 만들어요

이 구조는 많이 보았던 구조입니다 하지만 만약 여기서 짜장면이 아닌 다른 내용을 원한다면? 간짜장을 원한다면? 

원래는 if ~else를 사용해서 아마 만들었겠지만 이번에는 상속을 이용해 보려 합니다 

 

클래스 뒤의 extends + 상속받을 클래스

SeoulStore Class를 하나 만들고 메서드 재정의를 눌러주고 

makeZazang를 선택해줍니다  그러면 

이렇게 @Override 가 생기고 내용은 간짜장을 만들어요로 수정해 주었습니다  이제 Main으로 가서 

public class Main {
                       //파라미터로 Store 를 받아온다
    public static void order(Store store) {
          //makeZazang 를 가져온다
        store.makeZazang();
    }

    public static void main(String[] args) {

        Store store = new SeoulStore();

        order(store);
    }
}
⭐결과
간짜장을 만들어요

store를 new SeoulStore(): 로 수정해주면 결과가 간짜장을 만들어요 로 수정된 걸 볼 수 있습니다 

 

우린 분명 store에서 makeZazang만을 불러왔고 makeZazang에는 간짜장의 내용이 없습니다 하지만 결과는 간짜장으로 변화했죠 이건 상속을 사용하지 않는다면 이것은 불가능합니다 쉽게 말하자면 if ~else를 사용하지 않고 그 역할을 지금 상속으로 해주고 있는 것이죠 이런 방법을 사용한다면 기존 코드는 유지하면서 계속해서 새로운 상황을 추가할 수 있게 됩니다 

 

상속을 사용하는 경우 

  • 타입은 한 가지인데 종류가 여러 가지 
  • 타입은 한 가지인데 동작이 여러 가지 

 

데이터 때문에 상속을 쓰는 경우  

  • 원래 데이터에서 +추가적인 데이터 

 

로직 상속 때문에 상속을 쓰는 경우 

  • 기존 로직 +추가 로직 
  • 기존 로직을 대체하는 경우 

 

상속의 장점 단점 

장점 

 

코드 절약 -------1. 부모에다가 기능을 많이 만들고 자식에서 기능을 추가할 수 있다 

                     2.  if~else를 줄일수있다 

                     3. 부모 클래스가 가진 속성과 동작을 그대로 물려받을 수 있기 때문에 호출하려는 메소드가 부모 쪽에 있으면 그대로 물려받아서 사용할 수 있습니다

 

단점 

 

단일상속만 가능하다 (한 가지 기능)<부모 타입>  

 

메모리 문제 -- 부모와 자식 전부를 불러옴 

'JAVA' 카테고리의 다른 글

눈 속임 Override  (0) 2022.03.14
상속 심화  (0) 2022.03.14
ArrayList  (0) 2022.03.13
메모장 파일 불러오기 File = new File  (0) 2022.03.09
배열과 사랑에 빠진 반복문  (0) 2022.03.06