자바 상속, 다형성, 추상화에서 꼭 알아야 할 핵심
1. 오버라이딩(Overriding) vs 오버로딩(Overloading)
- 오버라이딩: 상속 관계에서 부모 메서드를 자식이 재정의하는 것.
- 실제 실행 시점에는 인스턴스의 타입이 우선된다.
- 즉, 부모 타입으로 참조해도 자식 객체라면 자식의 메서드가 실행된다.
- 필요하면 super.메서드명() 으로 부모의 메서드도 명시적으로 호출 가능하다.
📌 예시
class Parent {
void hello() { System.out.println("부모"); }
}
class Child extends Parent {
@Override
void hello() { System.out.println("자식"); }
}
Parent p = new Child();
p.hello(); // "자식"
- 오버로딩: 같은 이름의 메서드를 여러 개 정의하되, 매개변수 타입이나 개수(시그니처)가 달라야 한다.
📌 예시
void print(int x) { ... }
void print(String s) { ... }
2. 관점: 사용자 vs 작성자
- 클래스 작성자: 미래의 확장을 고려해, 재정의될 수 있는 메서드를 설계해야 한다.
- 클래스 사용자(자식 개발자): 부모의 메서드를 재정의해 필요에 맞게 확장한다.
➡️ 이것이 바로 Called by Framework 패턴의 기본 아이디어.
프레임워크 작성자가 “나중에 여길 재정의해 쓰세요”라고 만들어둔 추상/가상 메서드를
사용자가 오버라이딩하여 자신의 요구에 맞게 활용한다.
📌 예시: setData() 같은 메서드를 부모에서 선언해두면, 자식이 재정의해서 자신만의 동작을 구현할 수 있음.
3. 바인딩과 실행 시점
- 정적 바인딩(Static Binding): 컴파일 시점에 호출이 확정되는 것. (예: private 메서드, static 메서드, final 메서드)
- 동적 바인딩(Dynamic Binding): 런타임 시점에 실제 객체 타입을 기준으로 호출되는 것. (일반적인 인스턴스 메서드, 오버라이딩 대상)
자바는 가상 함수 테이블(Virtual Method Table, V-Table) 로 메서드를 관리한다.
- 부모 생성자가 먼저 호출되어 부모의 메서드가 V-Table에 올라감
- 자식 생성자가 호출되면서 오버라이딩한 메서드로 갱신
4. 다형성(Polymorphism)과 추상화
- 다형성: 같은 메서드 호출이더라도 실제 객체 타입에 따라 다르게 동작하는 것.
- 추상화: 공통점을 뽑아내어 단순화/일반화하는 것.
- 반대 개념은 구체화
- 추상화는 설계를 단순하게 하고, 상속과 다형성의 기반이 된다.
📌 예시
Animal a1 = new Dog();
Animal a2 = new Cat();
a1.sound(); // 멍멍
a2.sound(); // 야옹
5. 업캐스팅 vs 다운캐스팅
- 업캐스팅 (항상 안전): 자식 객체를 부모 타입 참조에 담는 것.
- 다형성의 핵심. 항상 가능하고 안정적이다.
- 다운캐스팅 (가급적 지양): 부모 타입 참조를 다시 자식 타입으로 변환하는 것.
- 잘못 사용하면 ClassCastException 발생.
- 꼭 필요하다면 instanceof 로 타입을 먼저 확인해야 한다.
📌 예시
Parent p = new Child(); // 업캐스팅
Child c = (Child) p; // 다운캐스팅 (instanceof 확인 권장)
6. 추상 클래스
- abstract 키워드로 정의, new 연산자로 직접 인스턴스 생성 불가
- 공통 기능은 구현해두고, 필수로 구현해야 할 메서드는 추상 메서드로 선언 → 자식 클래스가 재정의
7. 인터페이스
- 자바 8 이전: 필드 없음, 메서드 선언만 가능
- 자바 8 이후: default, static 메서드 추가 가능
- 다중 구현이 가능하므로, 상속의 한계를 보완
8. 이넘(Enum) 클래스
- 심볼릭 상수 집합을 정의할 수 있는 문법
- 단순한 상수가 아니라 타입 안정성(type safety) 보장
- 코드 가독성 향상, switch-case 문에서도 유용
📌 예시
enum Direction { NORTH, SOUTH, EAST, WEST }
Direction d = Direction.NORTH;
핵심 요약
- 오버라이딩은 동적 바인딩, 오버로딩은 정적 바인딩.
- 사용자 vs 작성자 관점을 의식해야 OOP 설계를 잘할 수 있다.
- 바인딩 시점과 V-Table 구조를 이해해야 재정의 동작 원리를 알 수 있다.
- 다형성과 추상화는 코드 확장성과 단순화를 위한 핵심 개념이다.
- 업캐스팅은 안전, 다운캐스팅은 지양. 필요 시 instanceof 활용.
- 추상 클래스, 인터페이스, 이넘은 각각 목적이 분명한 언어 도구.
'자바 > 자바' 카테고리의 다른 글
| (자바) JVM 메모리 관리와 GC, 객체 동작 핵심 정리 *널널한 개발자 (0) | 2025.09.09 |
|---|---|
| (자바)JVM, 클래스 로딩, 런타임 메모리 구조 정리 *널널한 개발자 (0) | 2025.09.09 |
| (자바) 상속 정리 *인프런_널널한 개발자 (0) | 2025.09.08 |
| (자바) 인프런 강의(자바 ) *널널한 개발자 (0) | 2025.09.02 |
| 인프런 강의 정리_ JAVA 성능 튜닝과 트러블 슈팅 * 휴먼넷 (1) | 2025.08.31 |