🕊️ 2024 버클리즈 Java SpringBoot 인터뷰 질문 (3)

Finally 블록에서 예외가 발생하면 어떻게 되나요?

자바에서, try-catch에서 finally 블록 내에서 예외가 발생할 때의 동작은, try-catch 블록의 예외 처리와 약간 다릅니다. 

 

[Try-Catch 블록의 예외]

  • 정상적인 플로우가 중지됩니다.

  • 예외 유형과 일치하는 catch 블록이 있다면, 해당 블록 내의 코드가 실행됩니다. 이를 통해 예외를 처리할 수 있습니다.

  • catch 블록이 완료되거나 어떤 catch 블록과도 일치하지 않으면 finally 블록의 코드가 실행됩니다.

[Finally 블록의 예외]

  • 원래의 예외가 중지됩니다. 이는 원래의 예외가 메서드 호출자에게 전달되지 않는 것을 의미합니다.

  • finally 블록에서 던진 예외가 호출자에게 전파되는 새로운 예외가 됩니다.

[키 포인트]

  • finally 블록은 try-catch 블록에서 예외가 발생하는지 여부에 관계없이 항상 실행됩니다.

  • finally 블록의 예외는 원래의 예외를 억제합니다.

  • finally 블록에서 던진 예외는 호출자가 처리해야 하는 새로운 예외가 됩니다.

[Finally 블록의 쓰임새]

  • 리소스(데이터베이스 연결, 파일 클로징)를 해제합니다.

  • 예외에 관계없이 항상 수행해야 하는 정리 작업을 처리합니다.

 

자바의 다이아몬드 문제란 무엇인가요?

"다이아몬드 문제"란 여러 상속 시나리오에서 발생하는 특정한 문제를 의미합니다. 클래스 상속 다이어그램을 그릴 때 발생하는 다이아몬드 모양에서 이름을 따왔습니다.


  1. 자바의 접근방식: 자바는 클래스의 다중상속을 지원하지 않습니다. 그러나 자바는 인터페이스의 다중상속은 허용합니다. 

  2. 자바 인터페이스의 다이아몬드 문제: 클래스가 두 개의 인터페이스를 구현하고 두 인터페이스가 모두 동일한 메소드명을 가진다면, 구현 클래스는 모호성을 해결하기 위해 메서드를 자체적으로 구현해야 합니다.

interface InterfaceA {
    default void display() {
        System.out.println("Inside InterfaceA");
    }
}

interface InterfaceB {
    default void display() {
        System.out.println("Inside InterfaceB");
    }
}

class MyClass implements InterfaceA, InterfaceB {
    // Here, we must provide our own implementation of display to resolve the ambiguity.
    @Override
    public void display() {
        InterfaceA.super.display(); // calling InterfaceA's default implementation
        InterfaceB.super.display(); // calling InterfaceB's default implementation
    }
}

어떻게 해결할 수 있을까요?


1. 메서드 오버라이딩: 구현 클래스에서 자신만의 구현을 제공하여 모호함을 해결합니다. 이 방식은 기본 구현 중 하나를 선택하거나 완전히 새로운 구현을 제공하고자 할 때 적합합니다.

class MyClass implements InterfaceA, InterfaceB {
    @Override
    public void display() {
        System.out.println("Hello world");
    }
}

2. 특정 인터페이스의 메서드 호출: 특정한 인터페이스의 메서드를 호출합니다. 

class MyClass implements InterfaceA, InterfaceB {
    @Override
    public void display() {
        InterfaceA.super.display(); // or InterfaceB.super.display()
        // Additional logic if needed
    }
}

 

Multilevel 상속이란 무엇인가요?

Multilevel 상속에서 A 클래스는 B 클래스를 상속하며, B 클래스 역시 C 클래스를 상속합니다.

 

자식 클래스는 부모 클래스를 통해 조부모 클래스에서 간접적으로 상속됩니다. 자식 클래스는 부모 및 조부모 클래스의 모든 public/protected 멤버에 접근할 수 있습니다.

 

String, Stringbuffer, Stringbuilder의 차이는 무엇인가요?

(번역/원문 참고)

 

메서드 오버라이딩과 오버로딩은 무엇인가요?

[메서드 오버로딩]

  • 단일 클래스 내에서 발생합니다. 이름은 같지만 매개 변수가 다른 동일한 클래스의 여러 메서드를 말합니다.

  • 메서드 오버로딩을 사용하면 유사한 작업을 수행하지만 입력/출력이 다른 메서드를 만들 수 있습니다.

class Calculator {
  public int add(int a, int b) {
    return a + b;
  }

  public double add(double a, double b) {
    return a + b;
  }
}

[메서드 오버라이딩]

  • 상속에서 클래스 간에 메서드 오버라이딩이 발생합니다. 하위 클래스가 상위 클래스에서 상속된 메서드를 재정의하는 것을 말합니다. 메서드는 상위 클래스 메서드와 동일한 이름, 반환 유형 및 매개 변수를 갖습니다.

  • 메서드 오버라이딩을 사용하면 하위 클래스가 상위 클래스에서 상속된 메서드를 자체적으로 구현하여 하위 클래스에 대한 동작을 전문화할 수 있습니다.

class Animal {
  public void makeSound() {
    System.out.println("Generic animal sound");
  }
}

class Dog extends Animal {
  @Override
  public void makeSound() {
    System.out.println("Woof!");
  }
}

 

예외 클래스의 계층구조는 무엇인가요?

Arraylist와 Linkedlist의 차이는 무엇인가요?

Set과 Arraylist의 차이는 무엇인가요?

(번역/원문 참고)

 

번역: [https://ducktopia.tistory.com/119]

원문:

Barclays Java Spring-Boot Micro-service Interview Question with answer 2024

Medium

Barclays Java Spring-Boot Micro-service Interview Question with answer 2024

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 4월 10일 오전 11:57

 • 

저장 112조회 8,451

댓글 0