클래스 로더의 종류에 대해 설명해보세요.

상위 계층부터 부트스트랩 클래스 로더, 플랫폼 클래스 로더, 애플리케이션 클래스 로더가 있습니다.
부트스트랩 클래스 로더는 최상위 클래스 로더로 자바 API를 로드하며, 다른 클래스 로더와 달리 네이티브 코드로 구현되어 있습니다. 플랫폼 클래스 로더는 기본 자바 API를 제외한 확장 클래스를 로드합니다. 애플리케이션 클래스 로더는 클래스 패스 지정된 클래스와 라이브러리를 로드합니다.

클래스 로더의 계층 구조에서 어떠한 클래스 로더들이 상위에 위치하고, 하위에 위치하는지 설명해주세요.

최상위에 부트 스트랩 클래스 로더가 위치하고, 플랫폼 클래스 로더, 애플리케이션 클래스 로더가 위치합니다.

클래스로더의 delegation model에 대해 좀 더 상세히 설명해주세요. 클래스로더가 클래스를 로드할 때 어떤 과정을 거치는지 설명해보세요.

Delegation Model은 계층 구조를 통해 클래스 로딩 요청을 상위 클래스 로더로 위임하는 방식을 의미합니다. 하위 클래스인 애플리케이션 클래스 로더는 부모인 플랫폼 클래스 로더에 요청을 전달하고, 다시 최상위 부트스트랩 클래스에게 요청을 전달합니다. 최상위 클래스 로더에서 클래스를 찾으면 클래스가 로드되고, 못 찾으면 하위 클래스로 요청을 다시 전달합니다.

클래스 로더의 부모-자식 관계가 클래스를 로드하는 과정에 어떤 영향을 미치나요?

클래스 로더는 부모 클래스 로더에게 클래스를 먼저 검색하도록 위임하고, 부모 클래스 로더가 클래스를 찾지 못한 경우에 자식 클래스 로더에게 검색을 위임합니다.

클래스 로더의 위임 방식은 어떤 이점을 가지고 있으며, 어떤 순서로 클래스를 검색하는지 설명해주세요.

  • 이점
    (중복 로딩 방지) 상위 클래스에서 이미 로딩된 클래스가 중복 로딩되는 것을 방지하여 메모리 낭비를 방지할 수 있습니다.
    (보안 강화) 상위 클래스 로더는 표준 자바 API, 확장 라이브러리를 로드합니다. 따라서 하위 클래스 로더가 핵심 자바API나 확장 클래스를 임의로 로드, 변경되는 것을 방지하여 시스템 보안과 안정성을 유지할 수 있습니다.
  • 순서
    부트스트랩 클래스 로더를 통해 표준 자바 API 클래스가 로드된 후
    확장 클래스 로더에서 확장 클래스가 로드합니다.
    이후 애플리케이션 클래스 로더에서 클래스 패스에 있는 클래스를 로드합니다.

GC 발생할 때 어플리케이션이 일시적으로 중단되는 이유는 무엇인가요?

메모리 일관성 유지, 오동작을 방지하기 위함이다.
GC 도중 다른 스레드에 의해 사용되지 않던 객체가 다시 참조하게 되는 경우 오동작을 일으킬 수도 있고, 메모리의 일관성이 깨질 수 있다. 특히 컴팩션 과정에서 객체가 이동하는 동안 해당 객체를 참조한다면 잘못된 위치를 참조할 수도 있다. 따라서 이러한 프로그램의 오동작, 메모리 일관성을 유지하기 위해 애플리케이션은 일시적으로 중단될 수 있다.

'언어, 프레임워크 > TIL' 카테고리의 다른 글

7/4 TIL  (0) 2024.07.05

hashCode()와 equals() 메소드의 관계에 대해 설명하세요.

두 객체가 equals()에 의해 동일하다면, 두 객체의 해시코드는 동일해야 하는 관계를 가집니다.

이퀄스 메소드를 오버라이딩할 때 어떤 점을 주의해야 하나요?

해시 코드와 같이 오버라이딩해야 합니다. 같이 오버라이딩하지 않으면 해시 기반의 자료구조가 제대로 작동하지 않을 수 있기 때문입니다.

이퀄스 메소드와 해시코드가 일관되지 않을 때 어떤 문제가 발생할 수 있나요?

해시 컬렉션의 객체 동등성 비교가 제대로 동작하지 않을 수 있습니다.

이퀄스 메소드와 해시코드를 일관되게 구현하기 위해 무엇을 고려해야 할까요?

일관되게 구현하기 위해서는 객체의 논리적 동등성을 판단할 기준을 고려해야 합니다.
예를 들어 학생 객체 필드는 이름, 주민번호, 나이, 주소. 동등성 판단을 위해 이름이나 나이 고려할 필요 없으며 주민번호로만 판단해도 될 것.

Object equals() 메서드를 오버라이딩할 때 hashCode() 메서드를 같이 오버라이딩해야 하는 이유는 무엇일까요?

해시 코드를 오버라이딩하지 않으면 동일한 객체라 하더라도 서로 다른 해시 코드를 갖게 되어 해시 기반의 자료구조(예: 해시맵)에서 제대로 작동하지 않을 수 있기 때문입니다. 객체를 비교할 때 equals 메서드로 비교하더라도, 해시 코드가 다르면 다른 객체로 간주될 수 있습니다.
따라서 일관성 있는 동작을 보장하기 위해 해시코드를 같이 오버라이딩해야 합니다.

toString() 메서드 재정의하면 뭐가 좋을까?

객체의 상태를 쉽게 확인할 수 있어, 디버깅과 로깅에 유용하게 사용할 수 있다.

==과 .equals() 각각은 무엇을 비교하나?

  • ==은 값을 비교하는 게 아니라 주소를 비교하며,
  • equals() 는 비교하는 객체의 내용을 비교한다. 두 객체가 논리적으로 동등한지 비교한다. (단, 모든 객체의 부모인 Object.equals() 메소드는 주소를 비교하며, 각 클래스에서 equals() 메소드는 오버라이딩해 줘야 함. equals() 구현시 hashCode() 까지 같이 오버라이딩)

primitive type casting과 reference type casting 차이에 대해 설명해보세요.

프리미티브 타입 캐스팅은 주로 값의 크기와 표현 방법을 바꾸는 것이고, 레퍼런스 타입 캐스팅은 상속 계층 구조 내에서 상위 클래스 타입을 하위 클래스 타입으로 바꾸어 객체의 타입을 변환합니다. 레퍼런스 타입 캐스팅은 다형성의 개념도 포함되어 있습니다.

다형성이란 무엇이고 어떤 장점을 가지고 있나요?

다형성이란 하나의 기능이 다양한 형태를 띄는 것을 의미합니다. 자바에서는 하나의 자료형에 여러 타입의 데이터를 대입하여 다양한 결과를 얻어낼 수 있는 성질입니다. 다형성을 통해 코드의 유지보수성과 유연성, 확장성이 높은 코드를 작성할 수 있습니다.
(+ 다형성을 구현하기 위한 방법)

자바에서 다형성을 구현하는 방법 중 하나인 오버라이딩(Overriding)과 오버로딩(Overloading)의 차이점은 무엇인가요?

오버라이딩은 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것을 말하고, 오버로딩은 같은 클래스 내에서 메소드의 이름은 같지만 매개변수의 개수나 타입이 다른 메소드를 여러개 정의하는 것을 말합니다. 오버라이딩은 부모 클래스의 내용을 무시하고 덮어 쓴다면 오버라이딩은 기존 메소드의 기능을 확장한다는 점에서 차이가 있습니다.

오버라이딩시 반드시 지켜야 하는 규칙?

메서드 반환타입, 시그니처 일치해야 하며, 부모 클래스보다 더 제한적인 접근 제어자를 가질 수 없습니다. + 예외까지

자바에서 오버라이딩을 할 때 예외(throws)를 선언하는 규칙은 무엇인가요?

상위 클래스 메서드가 던지는 예외와 동일하거나 하위 타입의 예외를 던져야 합니다.

'언어, 프레임워크 > TIL' 카테고리의 다른 글

7/5 TIL  (0) 2024.07.05

+ Recent posts