본문 바로가기
Oracle 1z0-808 Exam

Oracle 1z0-808 Exam 2024: Question #8

by Status Code 2024. 2. 20.

Oracle 1z0-808 Exam: Question #8 해설

질문 원본 내용

Given the following class declarations:

class Caller {
    private void init() {
        System.out.println("Initialized");
    }

    private void start() {
        init();
        System.out.println("Started");
    }
}

public class TestCall {
    public static void main(String[] args) {
        Caller c = new Caller();
        c.start(); // line n1
        c.init();  // line n2
    }
}

What is the result?

A. Compilation fails at line n1.
B. Initialized Started Initialized
C. Initialized Started
D. Compilation fails at line n2.


질문 번역

다음은 Java 클래스와 메소드에 관한 코드 예시입니다:

class Caller {
    private void init() {
        System.out.println("Initialized");
    }

    private void start() {
        init();
        System.out.println("Started");
    }
}

public class TestCall {
    public static void main(String[] args) {
        Caller c = new Caller();
        c.start(); // line n1
        c.init();  // line n2
    }
}

코드를 실행했을 때 결과는 무엇일까요?

A. line n1에서 컴파일 실패
B. Initialized Started Initialized
C. Initialized Started
D. line n2에서 컴파일 실패

정답: D. line n2에서 컴파일 실패

해설

Caller 클래스에는 두 개의 메소드 init()start()가 있으며, 두 메소드 모두 private 접근 제한자로 선언되어 있습니다. 이는 해당 메소드들이 클래스 외부에서 접근할 수 없음을 의미합니다.

TestCall 클래스의 main 메소드에서 Caller 객체 c를 생성하고 있으며, c.start()를 호출합니다. start() 메소드 내에서 init() 메소드를 호출하고 있기 때문에, main 메소드 내에서 c.start() 호출은 성공적으로 "Initialized"와 "Started"를 출력합니다.

그러나 main 메소드 내에서 c.init()을 직접 호출하려고 하면 컴파일 오류가 발생합니다. init() 메소드는 private이므로 Caller 클래스 외부에서는 보이지 않으며 접근할 수 없습니다. 이는 TestCall 클래스에서 직접 접근할 수 없음을 의미합니다.

따라서, main 메소드의 c.init() 호출이 문제가 되며, 이로 인해 컴파일 오류가 발생합니다. 결과적으로 올바른 답변은 D입니다.

댓글