Programming/Java

면접에서 진짜 자주 나오는 자바 질문 - 섹션 4. 자바 8 핵심 기능

마실개 2025. 4. 17. 15:19
반응형

 

1. 람다 표현식 (Lambda Expressions)

람다(Lambda)는 익명 함수(Anonymous Function)를 표현하는 방식으로, 간결한 코드 작성컬렉션 처리 간소화에 큰 기여를 했다.

// 기존 방식
Comparator<String> comp = new Comparator<>() {
    public int compare(String a, String b) {
        return a.compareTo(b);
    }
};

// 람다 표현식
Comparator<String> comp = (a, b) -> a.compareTo(b);
  • 장점: 익명 객체 작성의 번거로움 제거, 가독성 향상
  • 실무 활용: 정렬, 이벤트 처리, Stream 내부 처리 등

람다는 함수형 인터페이스를 구현하는 데 사용되며, 코드의 명확성과 유연성을 높여준다.


2. 함수형 인터페이스 (Functional Interface)

자바 8에서는 @FunctionalInterface를 도입하여, **단일 추상 메서드(SAM)**를 가지는 인터페이스를 명확히 표시했다.

대표적인 자바 내장 함수형 인터페이스:

인터페이스 설명
Function<T, R> T → R 형태의 변환
Predicate<T> boolean 반환 조건 검사
Consumer<T> T를 소비하고 반환 없음
Supplier<T> T를 반환, 매개변수 없음
Function<String, Integer> strLength = s -> s.length();
Predicate<Integer> isEven = x -> x % 2 == 0;

스트림, 람다, 메서드 참조와 밀접하게 연결되어 자바 8의 다른 기능들과 함께 자주 쓰인다.


3. Stream API

Stream API는 컬렉션에 대한 반복 처리, 필터링, 매핑, 집계 등을 선언형 방식으로 처리할 수 있게 해준다. 코드가 깔끔해지고, 병렬 처리도 쉽게 구현 가능하다.

List<String> names = Arrays.asList("Tom", "Jerry", "Alice");

List<String> filtered = names.stream()
    .filter(n -> n.startsWith("A"))
    .map(String::toUpperCase)
    .collect(Collectors.toList());
  • 중간 연산: filter, map, sorted, distinct 등
  • 최종 연산: collect, forEach, reduce, count

내부 반복을 통해 성능 최적화 가능하며, 특히 병렬 스트림(parallelStream())을 활용하면 대용량 데이터 처리 시 유리함.


4. Optional 클래스

Optional<T>는 null을 직접 다루지 않도록 도와주는 컨테이너 객체다. NullPointerException 방지에 유리하며, 값이 있을 수도 있고 없을 수도 있는 상황을 안전하게 처리할 수 있게 해준다.

Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(System.out::println);
  • 주요 메서드:
    • isPresent(), ifPresent()
    • orElse(), orElseGet(), orElseThrow()
    • map(), flatMap()

단순히 null 체크 대신, 함수형 방식으로 우아한 처리가 가능하다는 점에서 실무에서도 점점 사용이 늘고 있다.


5. 메서드 참조 및 디폴트 메서드

메서드 참조 (Method Reference)

람다 표현식에서 이미 존재하는 메서드나 생성자를 참조할 수 있는 문법

List<String> list = Arrays.asList("a", "b", "c");
list.forEach(System.out::println); // 람다: x -> System.out.println(x)

형태:

  • ClassName::staticMethod
  • object::instanceMethod
  • ClassName::instanceMethod

디폴트 메서드 (Default Method)

인터페이스에 구현부가 있는 메서드를 정의할 수 있게 해준다.

interface MyInterface {
    default void log() {
        System.out.println("기본 로그");
    }
}

자바 8부터는 다중 상속 문제 해결과 인터페이스 확장성 강화를 위해 디폴트 메서드를 지원함.


마무리

자바 8은 함수형 프로그래밍의 강력한 도입과 함께, 코드의 생산성과 가독성 모두를 끌어올렸다. 면접에서는 다음과 같은 포인트에 주목해야한다.

  • 람다/스트림을 이용한 실용 코드 작성 능력
  • Optional 사용에 대한 철학적 이해 (null-safe 프로그래밍)
  • 함수형 인터페이스와 고차 함수 설계

 

섹션5. 예외 처리, 로깅, 설계 패턴 ↓

https://biesil.tistory.com/74

 

면접에서 진짜 자주 나오는 자바 질문 - 섹션 5. 예외 처리, 로깅, 설계 패턴

1. 자바에서 예외(Exception)와 오류(Error)의 차이점Exception: 개발자가 처리 가능한 문제 (예: 파일 누락, 네트워크 오류)Error: JVM 레벨의 심각한 문제로 일반적으로 복구 불가 (예: OutOfMemoryError)Exception

biesil.tistory.com

 

 

 

반응형