자바 상속과 다형성 연습문제 및 실습
본 내용은
"
명품 JAVA Programming(개정5판) [개정5판] 연습문제 챕터 5
"
의 원문 자료에서 일부 인용된 것입니다.
2025.06.03
문서 내 토픽
-
1. 자바 상속(Inheritance)자바에서 상속은 기존 클래스의 멤버를 새로운 클래스가 물려받는 메커니즘입니다. extends 키워드를 사용하여 선언하며, 슈퍼클래스의 private 멤버는 서브클래스에서 접근할 수 없고, protected 멤버는 같은 패키지 내에서 접근 가능합니다. 생성자는 상속되지 않으므로 super() 키워드로 명시적으로 호출해야 합니다. 업캐스팅과 다운캐스팅을 통해 다양한 타입 변환이 가능합니다.
-
2. 추상 클래스와 추상 메소드추상 클래스는 abstract 키워드로 선언되며 직접 객체를 생성할 수 없습니다. 추상 메소드는 구현 없이 선언만 되며, 서브클래스에서 반드시 구현해야 합니다. 추상 클래스는 공통 기능을 정의하고 서브클래스에서 다형성을 실현하도록 강제합니다. 추상 클래스의 생성자는 서브클래스 객체 생성 시 호출됩니다.
-
3. 인터페이스(Interface)인터페이스는 interface 키워드로 선언되며 implements 키워드로 구현합니다. 인터페이스의 모든 메소드는 자동으로 public이며, 상수만 포함할 수 있습니다. 클래스는 여러 인터페이스를 구현할 수 있으며, 인터페이스의 모든 추상 메소드를 구현해야 합니다. 디폴트 메소드를 통해 기본 구현을 제공할 수 있습니다.
-
4. 다형성(Polymorphism)다형성은 같은 메소드 이름으로 서로 다른 동작을 수행하는 특성입니다. 동적 바인딩을 통해 실행 시간에 실제 객체의 메소드가 호출됩니다. 메소드 오버라이딩을 통해 서브클래스가 슈퍼클래스의 메소드를 재정의합니다. instanceof 연산자로 객체의 타입을 확인할 수 있으며, 이를 통해 안전한 타입 변환이 가능합니다.
-
1. 자바 상속(Inheritance)자바 상속은 객체지향 프로그래밍의 핵심 개념으로, 기존 클래스의 속성과 메소드를 새로운 클래스가 물려받을 수 있게 합니다. 이를 통해 코드 재사용성이 크게 향상되고 유지보수가 용이해집니다. 상속은 계층적 구조를 형성하여 관련된 클래스들을 체계적으로 조직할 수 있게 해줍니다. 다만 과도한 상속은 복잡성을 증가시킬 수 있으므로, 명확한 'is-a' 관계가 있을 때만 사용하는 것이 좋습니다. 자바의 단일 상속 정책은 다중 상속의 복잡성을 피하면서도 필요한 기능을 제공합니다.
-
2. 추상 클래스와 추상 메소드추상 클래스와 추상 메소드는 설계 단계에서 인터페이스를 정의하고 구현을 강제하는 메커니즘입니다. 추상 클래스는 공통된 기능을 제공하면서도 일부 메소드의 구현을 하위 클래스에 위임할 수 있어 유연성을 제공합니다. 이는 템플릿 메소드 패턴 구현에 효과적이며, 관련 클래스들 간의 계약을 명확히 합니다. 추상 클래스는 상태를 가질 수 있다는 점에서 인터페이스와 구별되며, 더 강한 결합도를 가진 관계에 적합합니다. 적절히 사용하면 코드의 일관성과 확장성을 크게 향상시킬 수 있습니다.
-
3. 인터페이스(Interface)인터페이스는 자바에서 계약(contract)을 정의하는 강력한 도구로, 구현 클래스가 반드시 따라야 할 메소드들을 명시합니다. 인터페이스를 통해 느슨한 결합을 달성할 수 있으며, 다중 구현이 가능하여 유연한 설계가 가능합니다. 자바 8 이후 default 메소드와 static 메소드 추가로 더욱 실용적이 되었습니다. 인터페이스는 추상화 수준이 높아 다양한 구현체를 쉽게 교체할 수 있게 해줍니다. 의존성 주입과 같은 패턴과 결합하면 테스트 가능하고 유지보수하기 좋은 코드를 작성할 수 있습니다.
-
4. 다형성(Polymorphism)다형성은 객체지향 프로그래밍의 가장 강력한 특징 중 하나로, 같은 인터페이스로 다양한 구현을 처리할 수 있게 합니다. 메소드 오버라이딩을 통한 런타임 다형성은 동적 바인딩으로 유연한 코드 작성을 가능하게 합니다. 다형성을 활용하면 새로운 타입 추가 시 기존 코드 수정을 최소화할 수 있어 개방-폐쇄 원칙을 따릅니다. 메소드 오버로딩을 통한 컴파일 타임 다형성도 코드 가독성을 향상시킵니다. 다형성은 프레임워크와 라이브러리 설계의 기초이며, 올바르게 활용하면 확장 가능하고 유지보수하기 좋은 시스템을 구축할 수 있습니다.
