ki-sd 님의 블로그
[2026-03-24] 다형성(Polymorphism)과 추상화(Abstraction)의 강력함 본문
객체 지향 프로그래밍의 대미를 장식하는 가장 어렵지만 가장 강력한 무기, 다형성의 본질을 이해하고 추상화의 개념을 정립했다.
1. 다형성: 하나의 코드가 다양한 형태로 동작하는 원리
- 업캐스팅(Upcasting): 자식 객체를 생성할 때, 이를 가리키는 리모컨(참조 변수)의 타입을 자식이 아닌 부모 타입으로 설정할 수 있다. (예: Animal a = new Dog();)
- 동적 바인딩(Dynamic Binding): 부모 타입의 참조 변수로 오버라이딩된 메서드를 호출하면, 컴파일러는 부모의 메서드를 호출하는 것처럼 보이지만 실제 프로그램 실행(Runtime) 시점에는 힙 메모리에 생성된 자식의 재정의된 메서드가 실행된다.
- 이를 통해 각기 다른 수많은 자식 객체들을 '부모 타입 배열' 하나로 묶어서 관리하거나, 하나의 매개변수로 모든 자식 객체를 받아 처리할 수 있게 되어 코드의 유연성이 극대화됨을 실습했다.
2. 추상 클래스(Abstract Class) - 설계의 규격화
- 부모 클래스가 자신만의 완전한 기능을 갖기보다는, 자식들이 반드시 가져야 할 공통 기능의 '목차'만 제시해야 할 때 abstract 키워드를 사용한다.
- 추상 메서드: 구현부 {} 없이 선언부만 존재하는 메서드로, 상속받은 자식 클래스는 반드시 이 메서드를 오버라이딩하여 구현해야 한다. 구현하지 않으면 컴파일 에러가 발생하여 강력한 설계 규격을 강제할 수 있다.
- 추상 클래스는 미완성 설계도이므로 단독으로 new를 통해 객체를 생성할 수 없다. 오직 다형성을 위한 뼈대로서 작용하는 설계 기법을 마스터했다.
'JavaStudy' 카테고리의 다른 글
| [2026-03-26] 예외 처리 심화와 finally 블록의 자원 반납 (0) | 2026.04.17 |
|---|---|
| [2026-03-25] 인터페이스(Interface)와 예외 처리(Exception) 입문 (0) | 2026.04.17 |
| [2026-03-23] 상속(Inheritance)과 포함(Composition)의 설계 철학 (0) | 2026.04.13 |
| [2026-03-20] 캡슐화(Encapsulation)와 데이터 은닉화 (0) | 2026.04.13 |
| [2026-03-19] 생성자 설계와 파라미터 전달 방식 (Call by Value/Reference) (0) | 2026.04.13 |
