36강 3:48

이전의 예제들과 달리 이런 경우 왜 abstract를 써야 되는건지 이해가 안 가요ㅠ
답변 2
0
안녕하세요! abstract라는 키워드가 붙으면 추상클래스 (혹은 추상메서드)가 됩니다.
추상이라는 말은 대략적인 규칙만 제공하고, 나머지 구현은 상속 받은 쪽에서 구현하는 것입니다.
시동을 거는 방식은 차량 종류마다 다릅니다. 자동차, 오토바이, 전기차의 엔진(또는 모터) 구동 방식이 각각 다르기 때문에 Vehicle 클래스 단계에서는 공통된 구현을 하나로 정해줄 수 없습니다.
이때 startEngine()을 abstract로 선언하면 다음과 같은 효과가 생깁니다.
Vehicle은 "모든 차량은 반드시 startEngine()을 가진다"는 규칙(설계도)만 제공하고, 실제 구현은 비워둡니다.
Car, Truck 같은 하위 클래스는 반드시 startEngine()을 오버라이딩해서 구현해야 합니다. 구현하지 않으면 컴파일 오류가 발생합니다.
반면 stopEngine()처럼 모든 차량에 공통으로 적용되는 로직은 Vehicle에 실제 구현을 두고 그대로 상속해서 재사용합니다.
즉, abstract를 쓰는 이유는 "구현 방식은 하위 클래스마다 다르지만, 반드시 존재해야 하는 기능"을 상위 클래스에서 강제하기 위해서입니다. 이를 통해 Car car = new Car("Toyota")처럼 다형성을 이용해 호출할 때, car.startEngine()이 Car에 맞게 재정의된 동작을 실행하게 됩니다.
시험을 위해서는 그냥 "메서드 구현을 강제하는 키워드"로 생각하고 계시면 됩니다. 지금까지 1번인가 출제되었습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 가보자고님.
추상 클래스와 메서드를 사용하는 이유에 대해 설명드리겠습니다. 객체 지향 프로그래밍에서 추상 클래스는 인스턴스를 직접 생성할 수 없는 불완전한 클래스입니다. 대신, 이 클래스는 공통적인 특성과 동작을 정의하고, 실제 구현은 서브 클래스에서 덮어쓰도록 설계됩니다.
추상 클래스 사용의 목적:
1. 코드의 재사용성 증가: 공통적인 속성과 메서드를 하나의 추상 클래스에서 정의하여, 여러 서브 클래스에서 재사용할 수 있습니다.
2. 확장성과 유연성: 새로운 타입의 객체가 필요할 때, 추상 클래스를 상속받아 필요한 기능을 구현하면 됩니다.
3. 강제성 부여: 추상 메서드를 사용함으로써 서브 클래스들이 반드시 특정 메서드를 구현하도록 강제할 수 있습니다.
질문하신 예제에서는 Vehicle 클래스의 startEngine() 메서드가 추상 메서드로 정의되어 있습니다. 이는 모든 Vehicle 타입의 객체들이 반드시 startEngine() 기능을 가져야 하지만, 그 구현은 각 서브 클래스가 책임지도록 강제하는 것입니다. Car 클래스는 Vehicle을 상속받아 startEngine() 메서드를 구현하게 됩니다.
유사한 주제를 다룬 기존 질문이 있습니다. 추가적인 정보가 필요하시면 아래의 답변을 참고하시면 도움이 될 것입니다:
- 추상클래스, 인터페이스 3분 33초 경 코드: 추상 클래스와 추상 메서드의 사용 목적과 상속 관계에서의 접근 메커니즘을 자세히 설명하는 답변입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
정처기 26-2회. 9번 질문드립니다!
0
22
1
이론 보면서 질문이 있습니다.
0
26
2
정보처리기사 실기 26년 2회 SRT 스케줄링 문제 단위 질문
0
37
2
유튜브(정보처리기사 실기 | 26년 2회 기출문제 코드 해설)
0
53
2
262 정처기 실기 C언어코딩
0
24
1
정보처리기사 262 실기 Hash(해시) 질문
0
40
2
static 변수 질문입니다.
0
35
2
파이썬 4강 질문입니다.
0
42
2
모의고사 1회 3번문제
0
73
3
41강 30:10
0
48
2
이론 공부법 질문 있습니다.
0
70
2
부모의 생성자 관련 질문
0
48
2
시험지 문제에 필기해도 되나요?
0
58
3
41강 11:23
0
44
2
4강파이썬 질문입니다
0
41
2
try-catch 핸들러명
0
54
2
35강 18:27
0
52
2
자식 코드 내 super() 생략
0
51
2
출력질문
0
66
2
31강 4:06
0
57
2
파이썬 학습자료가 강의 자료와 다릅니다.
0
81
3
섹션 2 - 9강 강의자료 다운로드 문제
0
66
3
29강 3:09
0
51
2
28강 6:42
0
55
2





