[Java][국비교육] Day 13

Ga02·2023년 1월 13일

국비교육

목록 보기
12/82

🔍 상속, Inheritance

기존의 클래스 코드를 재사용하여 새로운 클래스를 작성할 수 있게 하는 문법

➰ 코드 재사용성

기존의 코드에 필요한 부분을 수정, 추가하여 새로운 코드를 작성
👉🏻 멤버필드, 생성자, 메소드를 중복으로 작성하지 않고 비슷한 기능의 다른 클래스를 만들 수 있음

➰ 상속을 하는 이유(목적)

클래스 정의코드의 재사용성을 높일 수 있음 ➡ 코드의 중복작성을 줄여줌

➰ 부모클래스, 자식클래스

부모클래스 : 상속을 주는 클래스 / 상위, super, Based
자식클래스 : 상속을 받는 클래스 / 하위, sub, Derived

  • 부모클래스의 코드를 변경하면 자식클래스의 코드에 반영됨

🔍 바인딩, Binding

메소드의 호출코드(사용코드)와 정의코드(구현코드)가 연결되는 과정

➰ 정적 바인딩(static)

프로그램 동작 에 바인딩되는 것
👉🏻 객체 변수를 선언할 때 사용한 데이터타입(클래스타입)의 정의코드로 바인딩함

➰ 동적 바인딩(dynamic)

프로그램 실행 중 메소드가 호출될 때 바인딩되는 것
👉🏻 동적으로 생성된 인스턴스의 데이터타입(클래스 타입)의 정의코드로 바인딩
new 동적 연산자 : 실행되고 new를 만났을 때 동적 연산결과를 반환 ➡ 동적 바인딩

자바는 상속관계가 아니더라도 메소드를 호출할 때 동적바인딩을 함

👀 example

Parent2 pc = new Child2();
  • 실행되기 전 : pc가 Parent2 타입 ➡ 정적바인딩
  • new : 동적연산 결과 Child2() 타입 반환 ➡ 동적바인딩
    __👉🏻 물리적 연결은 "부모클래스"로 되지만 코드가 실행되면서 실질적 연결은 "자식클래스"로 연결됨

🔍 메소드 오버라이딩, Override

상속받은 메소드의 기능(코드)을 재정의

  • 부모클래스에 정의된 메소드의 형식과 같아야 적용됨 ➡ 리턴타입, 메소드 이름, 매개변수 형식
  • 오버라이딩을 통해 접근제한자 범위를 좁힐 수 없음 ➡ 넓히는 것은 가능
  • 구현부를 다르게 작성하기 위해서 오버라이딩을 함 👉🏻 다르게 구현할 것이 없다면 작성하지 않아도 됨 ➡ 오버라이딩을 안해도 상속받은 메소드가 있으므로 부모의 메소드가 실행됨

➰ @Override 어노테이션

오버라이딩 규칙이 잘 지켜졌는지 유효성 검사를 해줌 👉🏻 규칙에 맞지 않은 메소드를 작성하면 문법 에러 발생

  • 어노테이션, Annotation : 코드의 부가적인 기능, 특별한 의미 등을 부여할 때 사용
    • 개발하는 동안 특정 코드(동작, 기능), 문법검사 등을 간편히 적용할 수 있도록 제공되는 요소
    • @ 기호를 이용하여 표현

🔍 super 키워드

➰ super.

자식클래스에서 부모클래스의 멤버에 접근할 때 사용
👀 example

this.num = 10; ➡ 자식클래스의 멤버필드
super.num = 20; ➡ 부모클래스의 멤버필드

this.method(); ➡ 오버라이딩한 자식클래스의 메소드
super.method(); ➡ 부모클래스의 메소드

➰ super()

부모클래스의 디폴트생성자를 호출하는 코드

  • 생성자의 첫번째 코드로만 작성할 수 있음
  • 자식클래스의 모든 생성자들은 첫코드로 super();가 생략되어있음 👉🏻 따로 작성하지 않아도 자동으로 추가됨
  • 전달값을 ( )에 추가해 부모클래스의 매개변수 있는 생성자를 호출할 수 있음
  • 자동완성으로 생성자 작성시 자동생성, 직접 생성자를 작성하는 경우에도 생략으로 자동추가

❔ 부모클래스에 매개변수가 있는 생성자가 있어도 부모 디폴트 생성자를 작성하는 이유

👉🏻 매개변수가 있는 생성자를 작성하면 JVM이 디폴트 생성자를 자동으로 추가해주지 않음.
자식 클래스에서 생성자를 작성하는 경우 super(); 코드가 자동으로 생략추가되는데, 이때 부모클래스에 디폴트 생성자가 없는 경우 불러올 생성자가 없어 오류가 발생하게 됨


🔍 final 키워드

더 이상 확장(변경)할 수 없도록 설정하는 키워드

➰ 적용 위치

  • 변수 : 딱 한번만 초기화(대입)할 수 있도록 설정 ➡ 변수를 상수화 시킴
public final int MAX = 5;
public static final int LEN = 10;
  • 메소드 : 더이상 오버라이딩 할 수 없도록 설정 ➡ 자식클래스에서 재정의(override)할 수 없음
public final void out() {

}
  • 클래스 : 더이상 자식클래스를 생성할 수 없도록 설정 ➡ 상속 불가
public final calss Chaild() {

}
profile
IT꿈나무 댓츠미

0개의 댓글