상속

이유진·2024년 7월 31일

TIL

목록 보기
15/24

🌱상속

  • 상속 관계
    • 기존 클래스의 속성과 기능을 그대로 물려받는 것
    • extends 키워드 사용
    • 상속 대상은 하나만 선택 가능, 부모가 또 다른 부모를 가지는 것은 괜찮다.
    • 객체 지향 프로그래밍의 핵심 요소 중 하나
    • 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해준다.

  • 용어 정리
    • 부모 클래스(슈퍼 클래스) : 상속을 통해 자신의 필드와 메서드를 다른 클래스에 제공하는 클래스
    • 자식 클래스(서브 클래스) : 부모 클래스로부터 필드와 메서드를 상속받는 클래스
package extends1.ex2;

public class Car {

    public void move(){
        System.out.println("차를 이동합니다.");
    }
}
package extends1.ex2;

public class ElectricCar extends Car {
 	public void charge() {
 		System.out.println("충전합니다.");
 	}
}
package extends1.ex1;

public class CarMain {

    public static void main(String[] args) {
        ElectricCar electricCar = new ElectricCar();
        electricCar.move();
        electricCar.charge();
    }
}

결과:
차를 이동합니다.
충전합니다.
이미지 이름
  • 상속과 메모리 구조

​ 상속 관계를 사용하면 부모클래스도 함께 포함해서 생성된다. 외부에서 볼때는 하나의 인스턴스를 생성하는 것 같지만 내부에서는 부모와 자식이 모두 생성되고 공간도 구분된다.

- 호출할 때는 호출하는 변수의 타입(클래스)을 기준으로 선택

- 위 그림에서는 인스턴스 내부에 같은 타입인 `ElectricCar`를 통해서 `charge()`를 호출

Electric Car에는 move() 메서드가 없으므로 상속 관계에서는 자식타입에 해당 기능이 없으면 부모 타입 으로 올라가서 찾는다. 부모인 Carmove()가 있으므로 부모에 있는 move() 호출


  • 상속과 기능추가


  • 메서드 오버라이딩

    • 부모에게서 상속 받은 기능을 자식이 재정의 하는 것

      package extends1.overriding;
      
      public class ElectronicCar extends Car {
      
          @Override
          public void move(){
              System.out.println("전기차를 빠르게 이동합니다.");
          }
      
          public void charge(){
              System.out.println("충전합니다.");
          }
      }

      ElectricCar 는 부모인 Carmove() 기능을 그대로 사용하고 싶지 않다. 메서드 이름은 같지만 새로운 기능을 사용하고 싶다. 그래서 ElectricCarmove() 메서드를 새로 만들었다.

      이제 ElectricCarmove() 를 호출하면 Carmove() 가 아니라 ElectricCarmove() 가 호출된다.

    • +) @Override

      • @이 붙은 부분을 애노테이션이라 함

      • 프로그램이 읽을 수 있는 특별한 주석이라 생각하면 된다.

      • 필수는 아니지만 조건을 만족시키지 않으면 컴파일 에러를 발생시켜서 실수를 방지해준다. 고로 코드의 명확성을 위해 붙여주는 것이 좋다.

  • 오버로딩 vs 오버라이딩

    • 메서드 오버로딩 (Overloading)
      • 메서드 이름이 같고 매개변수(파라미터)가 다른 메서드를 여러개 정의하는 것
      • 같은 이름 의 메서드를 여러개 정의했다고 이해하면 된다.
    • 메서드 오버라이딩(Overriding)
      • 하위 클래스에서 상위 클래스의 메서드를 재정의하는 과정을 의미한다. 상속 관계에서 사용
      • 상속 관계에서는 기존 기능을 다시 정의한다고 이해하면 된다.

💤 오늘 회고..

요 며칠 개인과제 제출 마감의 여파로 잠을 너무 늦게 잤더니 피곤해서 계속 졸았다ㅠ 아직 강의 진도 나갈 거 많은데... 내일부턴 팀과제도 해야하는데ㅜㅜ 걱정.. 이지만... 그래도 해야지💪 오늘은 좀 일찍 자고 내일 부턴 다시 힘내서 해보고자 한다~~

profile
🙌중요한건 꺾였는데도 그냥 하는 마음

0개의 댓글