상세 컨텐츠

본문 제목

JAVA

Interview/Tech

by 카페코더 2021. 3. 22. 19:02

본문

반응형

1. java 8을 사용하는 이유

JAVA 8은 이전 버전들에 비해 가장 큰 변화가 있던 버전입니다. 이전 버전과 비교한 주요 변경사항으로는 람다 표현식, 스트림 API, time 패키지가 있습니다. 또, 현업에서 가장 많이 사용하는 JAVA 버전이 8이기에 사용한 이유도 있습니다. 개발자는 대개 혼자보단 협업을 하는 경우가 많은데, 이 때 많이 사용하는 버전을 통해 공부하면, 협업에 도움이 될 거라 생각했습니다.

2. 람다 표현식이란?

람다 표현식은 이름이 없는 익명의 함수를 의미합니다. 객체지향 언어인 자바에서 함수형 프로그래밍을 위해 사용됩니다. 특징으로 크게 익명, 함수, 전달, 간결성이 있습니다.

  1. 익명 - 익명은 기존의 메서드와는 다르게 이름이 없이 표현이 가능한 특징입니다. 코드가 간결해질 수 있는 특징이 있지만, 남용시 오히려 코드가 복잡해지는 경우가 발생합니다.
  2. 함수 - 함수는 특정 클래스에 종속되지 않는 특징을 말합니다. 다만 일부 예외 리스트를 포함합니다. 
  3. 전달 - 람다 표현식을 통해 메서드가 요구하는 매개변수로 전달하거나 변수로 저장하는것이 불가능한 특징입니다.
  4. 간결성 - 익명 클래스와 같은 코드를 계속해서 구현할 필요가 없는 특징입니다.

추가로, 람다의 구성으론 메서드의 파라미터를 위한 괄호, 람다의 반환값에 해당하는 바디, 파라미터와 바디를 구분하기 위한 화살표가 있습니다.

3. 스트림 이란?

스트림은 하나의 소스로부터 제공받은 요소들의 연속체를 말합니다. 가장 큰 특징으로 집계 연산을 지원합니다. java 8 이전에는 for, while과 같은 루프문을 통해 요소를 순회하며 데이터를 다뤄 로직이 복잡해지면 코드가 복잡해지고, 불필요한 루프가 생기는 문제점이 있었습니다. 반면 스트림은 배열과 컬렉션을 함수형으로 처리할 수 있어 간결한 로직으로 데이터 활용을 가능하게 합니다. 하지만 재사용이 불가능하다는 특징이 있습니다.

4. Java.Time 패키지

이전 버전에서는 날짜 및 시간을 다루기 위해 Date 클래스를 사용해 연산을 진행했고, 개선을 위해 Joda-Time이란 라이브러리를 사용 하기도 했습니다. Java의 time 패키지는 Joda-Time 라이브러리를 발전시켜 개발자의 불편함을 해소했습니다. 해소 된 불편함으로는 캘린더 인스턴스의 불변 객체화, 윤초와 같은 특수 상황 고려가 있습니다.

5. interface란 무엇인가?

인터페이스는 자바의 다형성을 극대화 하기 위한 기능입니다. 동일한 목적을 갖고 동일한 기능을 수행하도록 강제성을 갖게 하는것이 주 역할입니다. 개발 코드의 수정을 줄이고, 유지보수 효율을 극대화 하기 위해 사용합니다. 자바에서 제공하는 인터페이스의 대표적인 예시로 리스트를 들 수 있습니다. 

6. interface와 abstract의 차이점

먼저 추상 클래스는 클래스들의 공통적인 부분을 추상 메서드로 선언한 클래스를 말합니다. 추상 클래스 내부에 추상 메서드와 일반 메서드 모두 선언할 수 있습니다. 이 때문에 추상 클래스를 통해 객체를 생성할 수 없습니다. 차이점으론 인터페이스의 경우 모두 추상 메서드로 이루어진 반면, 추상 클래스는 일반 메서드를 선언할 수 있습니다. 인터페이스는 구현체를 필요로 하며, 추상 클래스는 상속 받는 클래스를 필요로 합니다. 인터페이스는 객체를 선언할 수 있지만, 추상 클래스는 상속 받는 클래스를 통해 객체를 생성해야 합니다.

7. 어노테이션 이란?

주로 메타 데이터를 위해 사용됩니다. 기본적으로 인터페이스의 형태를 취하고 있으며, 참조형 및 기본형 자료형과 배열을 사용할 수 있습니다. 자바에서 지원하는 어노테이션 외 사용자가 직접 커스텀 어노테이션 선언이 가능합니다.

8. GC란?

가비지 컬렉터를 말합니다. JVM에서 작동하며, 쓰이지 않는 메모리 혹은 쓰임이 다한 메모리를 자동으로 수집 및 처리하여 메모리 활용을 높입니다. 단점으로는 GC가 작동하는 동안 프로그램의 퍼포먼스가 저하되는 점이 있습니다.

9. JAVA의 실행 방법

개발자가 소스코드를 작성한 후, 자바 컴파일러를 통해 소스코드를 바이트 코드로 변환합니다. 그 후 자바 클래스로더를 통해 JVM으로 바이트코드를 적재 후 바이트 코드 베리파이어로 바이트 코드를 검증합니다. 검증이 끝난 바이트 코드는 익스큐션 엔진을 통해 해석 및 실행됩니다.

10. 익스큐션 엔진

인터프리터와 JIT 컴파일러가 있습니다. 인터프리터는 자바 바이트 코드를 한 줄씩 실행하며, JIT는 인터프리터의 느린 속도를 보완하기 위해 전체 바이트 코드를 해석 후 캐시 메모리에 저장하여 실행합니다. JIT는 컴파일 속도는 느리지만, 이 후 실행은 빠른 장점이 있습니다.

반응형

'Interview > Tech' 카테고리의 다른 글

기술 면접시 요구된 질문을 정리합니다.  (0) 2021.03.23
ORM  (0) 2021.03.23
DB  (0) 2021.03.23
Spring  (0) 2021.03.23

관련글 더보기

GitHub 댓글

댓글 영역