상속이란?
부모 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 |