인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

(2025) 일주일만에 합격하는 정보처리기사 실기

(기출) 2024년 1회 코드해석 문제

자바 실행순서

해결된 질문

작성

·

50

0

[강의]

(기출) 2024년 1회 코드해석 문제 | 24년 1회 Java

 

[시간]

00:22:49

 


 

실행 순서 이해를 위해 문제를 변형해서 여쭤봅니다.

 

[질문 1]

보기 7번(노란색 주석)의 parent.getA()에 1이나 2와 같이 매개변수가 있었다면, 해당 라인은 오류인가요, 아니면 자동으로 자식클래스의 getA()를 찾아가나요?

 

[질문 2]

여전히 parent.getA()에 1이나 2와 같이 매개변수가 있고, 자식클래스의 getA(int n) 메소드에서 매개변수 n이 없고, 부모클래스의 getA()에는 매개변수가 int m과 같은 매개 변수가 있다고 가정했을 때는 해당 로직이 오류일까요, 아니면 자동으로 부모클래스의 getA()를 찾아가나요?

 

[질문 3]

위 두 질문과 별개로, 만약 -아래-와 같은 부모클래스 메소드가 있었다면, 보기 3번(노란색 주석) 실행 전에 실행하는 게 맞는 걸까요?

-아래-

Parent(int z) { }

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

  1. 1과 2같이 매개변수가 있다는게 코드 내의 1번 2번인지 getA(1)을 말하는 건지 몰라서 일단 숫자 1개를 파라미터로 받았다는 가정 하에 답변드립니다.

    일단 get(int n)은 재정의가 아닙니다. 부모가 가지고 있는 메서드와 파라미터가 똑같지 않으니까요. 부모에게 없는 것을 업캐스팅에서 자식만의 메서드를 만든 것을 호출하면 에러가 난다고 설명드렸습니다. (오류 발생!)

 

  1. 위에서 답변드린 것처럼 질문과 상관없이 호출하는 순간 오류가 발생합니다.

 

  1. 아뇨. 문제의 코드에서는 해당 생성자는 아예 명시적으로 불리지 않았습니다. 실행되지 않습니다. 실행하려면 super(3)과 같이 명시적으로 정수 1개인 파라미터 생성자를 호출해야합니다. 아니면 부모클래스 내에서 this(3)과 같이 불러도 호출되긴 합니다. 전체적 코드 예시를 봐야지 정확한 답변이 가능하겠네요.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. minho0802님.

자바의 메소드 오버로딩과 오버라이딩, 그리고 생성자 호출 순서는 초보 개발자들에게 혼란을 줄 수 있는 주제지만, 이를 명료하게 이해하는 것이 중요합니다. 주신 질문에 대해 각각 답변드리겠습니다.

[질문 1에 대한 답변]

자식 클래스의 getA() 메소드가 오버라이딩되어 있다면, parent.getA()에 매개변수가 있다면 컴파일 오류가 발생합니다. 왜냐하면 getA()는 인자 없이 호출되도록 정의된 메소드이므로, 호출 시 메소드 시그니처에 맞지 않는 호출이 됩니다. 매개변수를 가진 메소드를 정의하지 않았다면, 자바는 자동으로 그런 메소드를 찾아 실행하지 않습니다.

[질문 2에 대한 답변]

주어진 가정 상황에서, parent.getA(1) 과 같은 형태로 호출될 때, 부모 클래스의 getA(int m)이 존재한다면 해당 메소드를 호출하게 됩니다. 이는 메소드 오버로딩에 의해 가능한 것이며, 부모 클래스에서 정의된 메소드가 호출됩니다. 만약 부모 클래스에 해당 메소드가 없다면, 이 또한 컴파일 오류를 발생시킵니다.

[질문 3에 대한 답변]

아래와 같은 생성자가 부모 클래스에 존재한다면, 자식 클래스가 생성될 때 부모 클래스의 기본 생성자(Parent())를 호출하지만, 자식 클래스의 생성자가 부모 클래스의 특정 생성자를 명시적으로 호출(super(z))한다면 해당 생성자가 실행됩니다. 따라서, 자식 클래스 생성자 호출 시 명시적인 super()가 있다면 그에 맞춰서 실행됩니다.

관련해서 더 자세한 설명이 필요한 경우, 아래 유사한 질문과 답변을 참고하시면 좋습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기