자바에는 다형성을 위한 전략이 상속(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 |