[JSCODE] 모의면접으로 학습하는 자바 2주차 - 람다, 스트림, 어노테이션, 리플렉션 (11~17)

동춘·2024년 11월 5일

[면접스터디] 자바

목록 보기
5/15

람다, 스트림, 어노테이션, 리플렉션

11. 람다(Lambda)란 무엇인가요?

자바 8에 추가된 기능으로, 함수형 프로그래밍을 지원하기 위해 도입된 익명 함수의 표현 방식입니다.

  • 람다식 : 메서드 이름과 반환값을 생략하여 하나의 식으로 표현한 것.
    • 매개변수 목록 : 필요에 따라 타입을 명시하거나 생략할 수 있습니다.
    • -> : 매개변수와 함수의 바디를 구분하는 구문입니다.
    • 함수의 바디 : 단일 명령일 경우 {} 중괄호를 생략할 수 있습니다.
    • 익명함수 : 메서드명을 모르고 리턴타입을 몰라도 실행할수 있는 함수를 말합니다.

꼬리물기

  • 왜 간결하게 해야하나요 ? 컬렉션과같이 매개변수의 타입과 함수명등을 몰라도 구현할수 있게끔 만들어주는 ..?

12. 스트림(Stream)이란 무엇인가요?

모던자바에서 람다와 함께 도입되었습니다. 컬렉션(리스트, 배열 등)의 데이터를 함수형 프로그래밍 방식으로 다룰 수 있도록 해줍니다. 스트림은 데이터를 필터링, 변환, 집계 등의 일관된 작업을 수행하는 선언적 스타일의 API로, 데이터를 일관성 있게 처리하고, 코드를 간결하게 작성할 수 있는 장점을 제공합니다.

  • 선언형 코드 스타일 : 필터링, 매핑, 정렬, 집계등의 처리작업을 메서드 체이닝으로 표현이 가능합니다.
  • 불변성 : 스트림은 원본 데이터를 변경하지 않고 새로운 스트림을 반환합니다. 따라서 원본 데이터는 안전하게 유지됩니다.
  • 지연 연산 : 중간 연산은 직전의 연산이 끝날때까지 호출되지 않고 지연됩니다, 필요하지 않은 연산을 최소화 합니다.
  • 병렬 처리 : parallelStream()을 사용하면 멀티코어 프로세서에서 병렬로 작업을 처리하여 성능을 높일 수 있습니다.

13. 람다와 스트림은 왜 생겨났을까요?

  • 람다와 스트림은 자바에서 함수형 프로그래밍을 지원하고, 코드의 간결함과 가독성을 높이며, 병렬 처리를 쉽게 하기 위해 생겨났습니다. 특히 람다를 통해 코드를 재사용하고, 스트림으로 데이터를 선언적 방식으로 처리할 수 있습니다.
  • 또한 순수 함수로 구성되어 있어, 함수 내부의 로직이 외부 상태를 변경하지 않고 동일한 입력에 대해 항상 같은 결과를 반환하여 사이드 이펙트를 최소화합니다.

14. 자바에서 어노테이션이란 무엇일까요?

  • 어노테이션은 자바에서 메타데이터를 활용하여 특수한 기능은 수행하는 문법 요소로, 클래스, 메서드, 변수 등에 부가 정보를 제공하는 역할을 합니다. 컴파일러에게 특정 정보를 전달하거나, 실행 시 특정 동작을 지정하는 데 사용됩니다.
  • 예시: @Override, @Deprecated, @SuppressWarnings

    꼬리물기

    • 어노테이션의 역할이 각각 다른가요 ? 일관성 없는 역할...

15. 어노테이션을 왜 사용할까요?

  • 어노테이션을 사용하면 코드의 의미를 더욱 명확하게 할 수 있으며, 컴파일러가 특정 동작을 수행하도록 지시하거나, 런타임 시에 프레임워크나 라이브러리에서 특정 기능을 쉽게 인식할 수 있게 합니다. 예를 들어, @Autowired로 스프링에서 의존성 주입을 자동화할 수 있습니다.

    꼬리물기
    ? 메타데이터를 사용하여 함수나 클래스에 추가적인 기능을 제공하는 방식

16. 어노테이션은 리플렉션으로 동작한다고 말씀해 주셨는데, 리플렉션은 무엇인가요?

  • 리플렉션(Reflection)은 자바에서 런타임 시에 클래스, 메서드, 필드 등의 정보를 조사하고 조작할 수 있는 기능입니다. 리플렉션을 사용하면 클래스 타입을 알 수 없을 때도 객체의 메서드를 호출하거나, 필드에 접근하는 등의 작업이 가능합니다.

17. 리플렉션을 활용해 어노테이션의 메타 데이터를 가져오는 로직을 구현해본 경험이 있으신가요?

profile
건강하개

0개의 댓글