Java

Java 정리 - 5 (상속과 구현)

cheesecrust1008 2025. 2. 4. 15:26

자바에는 다형성을 위한 전략이 상속(extends), 구현(implements) 두개가 있다.

여기서 다형성이란 추상화된 상위 타입의 변수에 다른 객체들을 할당 할 수 있습니다.

상속(extends)

상속은 부모 class 를 이어받아 확장하는 의미로 extends 키워드를 사용한다.

이때 부모 클래스에서 자식 클래스에 구현을 강제할 수 있는데 이 키워드는 abstract이다.

구현(implements)

구현은 다형성을 위한 방법 중 하나로 단일 상속만을 하용하는 자바에서 상속관계가 아니더라도 다형성을 활용할 수 있도록 하는 방벙다. 이는 인터페이스를 받아 구현을 하는 형태로 사용한다.

이때 interface를 선언하면 안에 필드와 메서드를 선언하게 되는데

인터페이스의 변수는 public static final을 생략하고 있고

인터페이스 메서드는 public abstract

interface의 메서드를 구현하지 않을 경우 abstract 선언을 해야한다.

위의 방법으로 다형성을 구현한 후에는 해당 객체에 binding으로 접근하게 된다.

Static Binding & Dynamic Binding

Static binding
정적 바인딩으로 컴파일 시에 binding 되는것으로, static 메서드나 멤버 변수에 적용, 해당 타입에 접근

class Person {
    String name = "사람";
}

class Student extends Person {
    String name = "학생";
}

class Test {
 public static void main(String[] args) {
     Person test = new Student();
     System.out.println(test.name);
 }
}

위의 코드를 실행 할 경우 안의 실제 객체인 Student 의 “학생”이 출력되는 것이 아닌 “사람”이 출력됩니다.

Dynamic binding
동적 바인딩으로 runtime 시에 바인딩 되어 객체의 타입에 접근 합니다. 메서드 등에 적용됩니다.

따라서 Person 타입의 변수에 Student 객체가 들어가 있다면 Student에 정의된 메소드가 실행됩니다.

default method

  • 메서드 선언부에 default 키워드를 선언하고 구현부를 작성합니다.
  • 이때 구현부가 있기 때문에 충돌이 발생 할 수 있다.

default 메서드 충돌

  • method 우선순위, super class method 우선이다.
  • 인터페이스 충돌의 경우 반드시 override 하여 해결한다.

'Java' 카테고리의 다른 글

Java 정리 - 4 (접근 제한자)  (0) 2025.02.04
Java 정리 - 3 (overloading, overriding)  (1) 2025.02.04
Java 정리 - 2 (hashCode 와 equals)  (0) 2025.02.04