프로그램 개발/미분류

[코딩 인터뷰]지식 기반 문제 - Java 문제

(ㅇㅅㅎ) 2023. 1. 11. 23:16
728x90
반응형

 

[ private 생성자 ]

상속 관점에서 생성자를 private로 선언하면 어떤 효과가 있나?

 생성자가 private으로 선언된 class A는 A의 private 메서드에 접근이 가능해야만 생성자를 호출할 수 있다는 것을 의미합니다.

 

 

[ finally에서의 반환 ]

자바의 finally 블록은 try-catch-finally의 try 블록 안에 return 문을 넣어도 실행되는가?

 finally 블록은 try 블록이 종료되는 순간 실행되기 때문에 실행이 됩니다.

⭐ continue, break와 exception을 사용해도 마찬가지로 실행됩니다.

👀 finally 블록이 실행되지 않는 경우

  • try/catch 수행 중에 가상 머신이 종료됨
  • try/catch를 수행하고 있던 스레드가 죽음

 

 

[ final과 그 외 ]

final, finally, finalize의 차이는?

final : 변수나 메서드 또는 클래스가 '변경 불가능'하도록 만듭니다.

finally : 키워드로 try/catch 블록이 종료될 때 항상 실행될 코드 블록을 정의하기 위해 사용됩니다.

finalize() : 메서드로 가비지 콜렉터(garbage collector)가 더 이상의 참조가 존재하지 않는 객체를 메모리에서 삭제하겠다고 결정하는 순간 호출됩니다.

 

 

[ Generic vs Template ]

자바 제네릭(generic)과 C++ 템플릿(template)의 차이를 설명하라.

 제네릭은 타입제거라는 개념에 근거하여 컴파일 시 코드가 크게 달라지는 것은 없습니다. 하지만 템플릿은 컴파일 시 컴파일러는 인자로 주어진 각각의 타입에 대해 별도의 코드를 생성합니다.

⭐ 타입제거 : 소스 코드를 자바 가상 머신(JVM)이 인식하는 바이트 코드로 변환할 때 인자로 주어진 타입을 제거하는 기술

 

 

[ TreeMap, HashMap, LinkedHashMap ]

1. TreeMap, HashMap, LinkedHashMap의 차이를 설명하라.
2. 언제 무엇을 사용하는 것이 좋은지 설명하라.

1. 큰 차이점은 시간 복잡도와 키가 놓이는 순서에 있습니다.

  TreeMap HashMap LinkedHashMap
검색과 삽입 시간 O(logN) O(1) O(1)
키의 순서 무작위 정렬
(키는 반드시 Comparable 인터페이스를 구현하고 있어야  함)
삽입 순서로 정렬
구현 연결리스트로 이루어진 배열 레드-블랙 트리로 구현 양방향 연결 버킷으로 구현

 

2.  만약 순서대로 키 정보를 얻고 싶으면 LinkedHashMap, 자연스러운 순서대로 키 정보를 얻고 싶으면 TreeMap을 사용하면 됩니다. 이외의 별 다른 이유가 없으면 HashMap을 사용하는 것이 좋습니다.(HashMap이 일반적으로 빠르고 오버헤드가 적습니다.)

 

 

[ Object reflection ]

자바의 객체 릭플렉션(object reflection)을 설명하고 이것이 유용한 이유를 나열하라.

 객체 리플렉션은 자바 클래스와 객체에 대한 정보를 프로그램 내에서 동적으로 알아낼 수 있도록 하는 기능입니다.

👀 기능

  • 프로그램 실행 시간에 클래스 내부의 메서드와 필드에 대한 정보를 얻을 수 있습니다.
  • 클래스의 객체를 생성할 수 있습니다.
  • 객체 필드의 접근 제어자에 관계없이, 그 필드에 대한 참조를 얻어내어 값을 가져오거나 설정할 수 있습니다.

👀 유용한 이유

  • 프로그램이 어떻게 동작하는지 실행 시간에 관측하고 조정할 수 있도록 해줍니다.
  • 메서드나 생성자, 필드에 직접 접근할 수 있기 때문에 프로그램을 디버깅하거나 테스트할 때 유용합니다.
  • 호출할 메서드를 미리 알고 있지 않더라도 그 이름을 사용해서 호출할 수 있습니다.
반응형