Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4주차 모의 면접 질문 정리 (Java 13~22) #18

Open
kyeong-hyeok opened this issue Feb 2, 2024 · 0 comments
Open

4주차 모의 면접 질문 정리 (Java 13~22) #18

kyeong-hyeok opened this issue Feb 2, 2024 · 0 comments
Assignees
Labels

Comments

@kyeong-hyeok
Copy link
Contributor

java의 리플렉션이란

  • 자바에서 이미 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩(Dynamic Loading)하여 생성자(Constructor), 멤버 필드(Member Variables) 그리고 멤버 메서드(Member Method) 등을 사용할 수 있는 기법이다.
  • 클래스의 패키지 정보, 접근 지정자, 수퍼 클래스, 어노테이션(Annotation) 등을 얻을 수 있다.
  • 컴파일 시간(Compile Time)이 아니라 실행 시간(Run Time)에 동적으로 특정 클래스의 정보를 객체화를 통해 분석 및 추출해낼 수 있는 프로그래밍 기법이다.

Stream이란

  • 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다.
  • 선언형이란 데이터를 처리하는 구현 코드 대신, 질의로 표현하는 것이다.
  • 또한 멀티 스레드로 구현하지 않아도 데이터를 투명하게 병렬적으로 수행할 수 있다.

특징

  • 파이프라이닝
    • 대부분의 스트림 연산은 스트림 연산끼리 커다란 파이프라인을 구성하기 위해 자신을 반환한다.
    • 덕분에 laziness, short-circuiting 등과 같은 최적화를 얻을 수 있다.
  • 내부 반복
    • 반복자를 이용해서 명시적으로 반복하는 컬렉션과 달리 스트림은 내부 반복을 지원한다.

Java8의 특징

  • Java8에서는 Lambda식, Stream API, Optional, 날짜 시간 API, StringJoiner 등이 추가되었습니다.
  • lambda는 함수형 프로그래밍을 지원하기 위한 기능이고, Stream API는 고차함수를 지원합니다. Optional은 Null-safety를 제공하며, Stream과 사용법이 유사합니다. 날짜 시간 API는 Joda-time등의 라이브러리에서 영향을 받아 괜찮은 API가 되었으며, StringJoiner는 문자열을 간단하게 구분자로 합칠 수 있는 기능을 제공합니다.

HashMap과 HashTable의 차이

  • 가장 큰 차이는 Thread-safe
    • HashTable의 모든 데이터 변경 메소드는 sycronized로 선언되어있음. 메소드 호출 전 스레드 간 동기화 락을 통해 멀티 스레드 환경에서 데이터의 무결성을 보장.
    • HashMap은 Thread-safe 하지 않기때문에 멀티 스레드 환경에서 동시에 데이터를 조작하는 경우 데이터가 깨질 수 있음
    • 동기화가 필요하다면, ConcurrentHashMap 사용. HashTable은 구형버전이기에 HashMap에 비해 느림.

HashSet

  • 객체 그 자체를 저장
  • 중복된 값을 허용하지 않고, 저장한 순서가 보장되지 않음

컬렉션 프레임워크에 대해서 설명해주세요.

  • Java Collection은 널리 알려져 있는 자료구조를 바탕으로 객체, 데이터들을 효율적으로 관리 할 수 있는 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 합니다.
  • List, Set은 Collection 인터페이스을 상속받지만, Map 인터페이스는 구조상의 차이라 별도로 정의합니다.

List, Set, Map의 특징

  • List 인터페이스 (순서 O, 중복 O)
  • Set 인터페이스 (순서X, 중복X)
  • Map 인터페이스 (순서X, 중복 키 X / 중복 데이터 O)

Generic이란

  • 데이터의 타입을 클래스 내부에서 지정하지 않고 외부에서 사용자에 의해 지정되는 것이다.
  • 보통 하나하나의 타입에 따라 클래스를 생성하는 것이 비효율적일 때 사용한다.
  • 제네릭을 적용하고 잘못된 타입이 지정되면 컴파일 단계에서 방지할 수 있다.
  • 클래스 외부에서 타입을 지정하기 때문에 타입 관리가 편하다.
  • 비슷한 기능을 하는데 타입만 다른 경우 코드의 재사용성이 높아진다.

super와 extends의 차이와 와일드 카드

  • extends T는 상한 경계이고 ? super T는 하한 경계이다.
  • extends는 T와 T의 자손 타입만 가능
  • super는 T와 T의 조상 타입만 가능
  • 와일드카드 <?>은 Java 최상위 타입인 Object와 같으므로 어떤 타입이든 지정할 수 있다.

Default 메소드와 static 메소드

Interface

  • abstract method
    • 구현부가 없는 메소드
  • default method (Java 8 이후 추가)
    • 인터페이스를 상속한 구현체에 공통으로 들어갈 코드를 default method 에 작성해 반복을 줄임
    • equals(), hashCode() 같은 Object의 메소드 정의한건 디폴트 메소드로 제공 불가
    • 구현체에서 오버라이딩 가능
  • static method (Java 8 이후 추가)
    • default method 처럼 인터페이스에서 구현 가능
    • 구현체에서 오버라이딩 불가능
    • static 이니까 Class.method()로 호출 가능. 객체에서 호출도 가능

인터페이스와 추상클래스의 차이점에 대해 설명해주세요.

  • 추상클래스는 객체의 추상적인 상위 개념으로 공통된 개념을 표현할 때 사용합니다. 단일 상속만 가능합니다. 추상클래스를 상속하는 집합간에는 연관관계가 있습니다.
  • 인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용합니다. 다중 상속이 가능합니다. 인터페이스를 구현하는 집합간에는 관계가 없을 수 있습니다.

왜 클래스는 단일 상속만 가능한데, 인터페이스는 2개 이상 구현이 가능할까요?

  • 다중 상속 시 충돌 문제**,** 어느 부모의 메서드를 상속받아야할 지 파악할 수 없게 됨
  • 다이아몬드 문제 - 다중 상속을 지원하게 되면 하나의 클래스가 여러 상위 클래스를 상속받을 수 있다. 이런 특징 때문에 발생하게 되는 문제가 '다이아몬드 문제’
  • 즉 선언된 형태의 메서드만 가지는 인터페이스는, 동일 시그니처의 메서드를 얼마든 상속받아도 아무런 문제가 발생하지 않음

동기화 클래스

CountDownLatch

  • Latch의 사전적 의미는 걸쇠이다.
  • 원하는 지점에서 await() 메서드를 호출하고 코드의 진행을 중단시킨다.
  • 다른 스레드에서 설정한 횟수만큼 countDown() 메서드를 호출하면 다시 코드를 진행한다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants