안녕하세요 jju_developer입니다.
2023 2회 정보처리기사 실기 시험이 07월 22일에 있습니다.
09시 시험 모두 파이팅 하는 의미에서 23년도 1회 정보처리기사 실기 시험 문제였던 자바 코드 문제 풀이를 해보도록 하겠습니다.
자바 코드를 보고 알맞는 출력값을 작성하는 문제입니다.
코드를 먼저 보시겠습니다.
abstact class Vehicle {
String name;
abstract public String getName(String val);
public String getName() {
return "Vehicle name: " + name;
}
}
class Car extends Vehicle {
public Car(String val) {
name=super.name=val;
}
public String getName(String val) {
return "Car name:" + val;
}
public String getName(byte val[]) {
return "Car name:" + val;
}
}
public class Main {
public static void main(String[] args) {
Vehicle obj = new Car("투싼");
System.out.println(obj.getName());
}
}
해당 문제의 정답은 Vehicle name: 투싼 입니다.
여기서 Car name이라고 생각하셨던 분들은 getName이 재 정의 된 것이 아닌가 하는 생각을 하셨을지도 모릅니다.
아래에서 더 설명드리겠습니다.
이번 문제는 다형성(polymorphism)의 개념에 따라 동작하는 결과를 맞추는 문제였습니다.
Vehicle obj = new Car("투싼");에서 obj 변수는 Vehicle 타입으로 선언되었지만,
Car 객체를 참조하고 있습니다.
obj.getName() 메서드를 호출하면, 변수의 타입인 Vehicle의 getName() 메서드가 실행됩니다.
자바에서는 메서드 오버라이딩을 통해 하위 클래스의 메서드가 상위 클래스의 메서드를 재정의할 수 있습니다.
하지만!!!
변수의 타입에 따라 정적 바인딩(static binding)이 이루어지므로,
★★★변수 타입에 해당하는 클래스의 메서드가 실행됩니다.
따라서 Vehicle 클래스의 getName() 메서드가 호출되어 "Vehicle name: 투싼"이 출력되는 것입니다.
✶오버로딩은 정적 바인딩 / 오버라이딩은 동적 바인딩✶
오버로딩은 같은 이름의 메서드를 매개변수의 타입과 개수를 다르게 정의하여 다양한 메서드를 구현하는 것
여기서 같은 이름의 메서드는 getName이며 () 안의 매개변수의 타입이나 개수를 다르게 하여 구현을 한 것을 볼 수 있습니다.
Car에는 String getName() 이 없고 이름은 같지만 매개변수로 String val을 넘겨주는 메서드는 있습니다.
차이가 보이시나요?^^
문제에서 System.out.println(obj.getName()); 호출한 메서드는 getName() 이기 때문에
Vehicle 클래스에 있는 getName() 이 호출되었습니다.
도움이 되셨다면 공감 부탁드립니다✩
오늘도 수고하셨습니다.

'자격증 따야지 > 정보처리기사 2024' 카테고리의 다른 글
정보처리기사 실기_상속 초기화_생성자 호출 과정 (0) | 2023.07.16 |
---|---|
정보처리기사 실기_ JSON, AJAX (0) | 2023.07.16 |
정보처리기사 실기_모듈연계_EAI, ESB, Web Service (0) | 2023.07.16 |
정보처리기사 실기시험_원서 접수 신청 (0) | 2023.06.26 |
정보처리기사 2023 필기시험 공부 참고링크 [합격] (3) | 2023.05.12 |