이전 게시물에서 중요한 Java SE 8 인터뷰 질문과 답변을 몇 가지 논의했습니다. 이 게시물에서는 Java SE 8 인터뷰 질문과 답변을 몇 가지 더 논의하겠습니다. 이 게시물을 읽기 전에 이전 게시물을 확인해주세요: “Java SE 8 Interview Questions (Part 1)“.
Java SE 8 Interview Questions
- Java SE 8에서 내부 반복이란 무엇입니까?
- 외부 반복과 내부 반복의 차이점은 무엇입니까?
- 외부 반복의 주요 단점은 무엇입니까?
- 내부 반복의 주요 장점은 외부 반복보다 무엇입니까?
- 내부 반복의 주요 단점은 외부 반복보다 무엇입니까?
- 외부 반복의 주요 장점은 내부 반복보다 무엇입니까?
- 내부 반복을 사용해야 하는 경우와 외부 반복을 사용해야 하는 경우는 언제입니까?
- Java 8의 Stream API의 중간 작업과 최종 작업의 차이점은 무엇입니까?
- Java 인터페이스에서 메서드 구현을 제공할 수 있습니까? 가능한 경우, 어떻게 제공합니까?
- 기본 메서드란 무엇입니까? Java 8 인터페이스에서 기본 메서드가 필요한 이유는 무엇입니까?
- 정적 메서드란 무엇입니까? Java 8 인터페이스에서 정적 메서드가 필요한 이유는 무엇입니까?
- 차이점 함수형 프로그래밍과 객체지향 프로그래밍 간의?
- 이전 자바 날짜 API의 문제점을 설명하세요. Java 8의 날짜와 시간 API의 장점은 이전 날짜 API와 Joda Time API에 비해 무엇입니까?
- Java SE 8에서 새로운 날짜 및 시간 API가 필요한 이유는 무엇입니까? Java SE 8 데이터 및 시간 API가 이전 자바 날짜 API의 문제를 어떻게 해결하는지 설명하세요.
- 자바의 이전 자바 날짜 API와 Java 8의 날짜 및 시간 API 간의 차이는 무엇입니까?
- 다중 상속이란 무엇입니까? Java 8은 다중 상속을 어떻게 지원합니까?
- 인터페이스에서 디폴트 메서드로 인한 다이아몬드 문제란 무엇입니까? Java 8은 이 문제를 어떻게 해결합니까?
Java SE 8 인터뷰 질문 및 답변
Java SE 8에서 내부 반복이란 무엇입니까?
Before Java 8, “내부 반복” 개념이 없었습니다. Java 8에서는 “내부 반복”이라는 새로운 기능을 소개했습니다. Java 8 이전에는 Java 언어가 컬렉션, 배열 등과 같은 집계된 객체의 요소를 반복하기 위해 외부 반복만 가능했습니다. 내부 반복은 “Java API에 의해 집계된 객체의 요소를 하나씩 내부적으로 반복”하는 것을 의미합니다. Java 애플리케이션이 외부적으로 반복하는 대신 Java API에게 내부적으로 이 작업을 수행하도록 요청합니다.
외부 반복과 내부 반복의 차이점은 무엇인가요?
S.No. | External Iteration | Internal Iteration |
---|---|---|
1. | Available before Java 8 too. | It is introduced in Java SE 8 |
2. | Iterating an Aggregated Object elements externally. | Iterating an Aggregated Object elements internally (background). |
3. | Iterate elements by using for-each loop and Iterators like Enumeration, Iterator, ListIterator. | Iterate elements by using Java API like “forEach” method. |
4. | Iterating elements in Sequential and In-Order only. | Not required to iterate elements in Sequential order. |
5. | It follows OOP approach that is Imperative Style. | It follows Functional Programming approach that is Declarative Style. |
6. | It does NOT separate responsibilities properly that is, it defines both “What is to be done” and “How it is to be done”. | It defines only “What is to be done”. No need to worry about “How it is to be done”. Java API takes care about “How to do”. |
7. | Less Readable Code. | More Readable code. |
외부 반복의 주요 단점은 무엇인가요?
외부 반복에는 다음과 같은 단점이 있습니다:
- 우리는 명령적인 스타일로 코드를 작성해야 합니다.
- 책임의 명확한 분리가 없습니다. “무엇을 해야 하는지”와 “어떻게 해야 하는지” 코드 간의 강력한 결합.
- 코드 가독성이 떨어집니다.
- 더 많은 쓸데없는 코드와 보일러플레이트 코드.
- 요소를 순차적으로만 반복해야 합니다.
- 동시성과 병렬성을 제대로 지원하지 않습니다.
내부 반복과 외부 반복의 주요 장점은 무엇인가요?
외부 반복에 비해 내부 반복은 다음과 같은 장점이 있습니다:
- 함수형 프로그래밍 스타일을 따르므로 선언적인 코드를 작성할 수 있습니다.
- 코드가 더 읽기 쉽고 간결합니다.
- 말이 많고 반복적인 코드 작성을 피할 수 있습니다.
- 요소를 순차적으로 반복할 필요가 없습니다.
- 동시성과 병렬성을 제대로 지원합니다.
- 응용 프로그램 성능을 향상시키기 위해 병렬 코드를 작성할 수 있습니다.
- 책임의 명확한 분리. “무엇을 해야 하는지”와 “어떻게 해야 하는지” 코드 사이의 느슨한 결합.
- 코드 작성은 “무엇을 해야 하는지”에 대해서만 작성하고, Java API가 “어떻게 해야 하는지” 코드를 처리합니다.
내부 반복과 외부 반복의 주요 단점은 무엇인가요?
외부 반복에 비해 내부 반복은 한 가지 주요 단점이 있습니다:
- Internal Iteration에서는 Java API가 요소를 내부적으로 반복 처리하므로 반복에 대한 제어권이 없습니다.
External Iteration이 Internal Iteration보다 주요 이점은 무엇인가요?
Internal Iteration과 비교하여 External Iteration의 주요 이점은 하나 있습니다:
- External Iteration에서는 Java API가 요소의 반복을 처리하지 않기 때문에 반복에 대한 제어권이 훨씬 큽니다.
언제 Internal Iteration을 사용해야 하며 언제 External Iteration을 사용해야 하나요?
Internal Iteration 또는 External Iteration을 사용해야 하는 상황을 이해해야 합니다.
- 반복에 대한 더 많은 제어가 필요할 때 External Iteration을 사용할 수 있습니다.
- 반복에 대한 더 많은 제어가 필요하지 않을 때 Internal Iteration을 사용할 수 있습니다.
- 높은 병렬성 및 병렬 응용 프로그램을 개발해야 할 때 Internal Iteration을 사용해야 합니다.
Java 8 스트림 API의 중간 작업과 최종 작업의 차이점?
S.No. | Stream Intermediate Operations | Stream Terminal Operations |
---|---|---|
1. | Stream Intermediate operations are not evaluated until we chain it with Stream Terminal Operation. | Stream Terminal Operations are evaluated on it’s own. No need other operations help. |
2. | The output of Intermediate Operations is another Stream. | The output of Intermediate Operations is Not a Stream. Something else other than a Stream. |
3. | Intermediate Operations are evaluated Lazily. | Terminal Operations are evaluated Eagerly. |
4. | We can chain any number of Stream Intermediate Operations. | We can NOT chain Stream Terminal Operations. |
5. | We can use any number of Stream Intermediate Operations per Statement. | We can use only one Stream Terminal Operation per Statement. |
Java 인터페이스에서 메소드 구현을 제공할 수 있습니까? 가능하다면, 어떻게 제공합니까?
Java 7 이전에는 인터페이스에서 메소드 구현을 제공할 수 없었습니다. Java 8 이후로는 가능합니다. Java SE 8에서는 다음 두 가지 새로운 개념을 사용하여 인터페이스에서 메소드 구현을 제공할 수 있습니다:
- 디폴트 메소드
- 정적 메소드
디폴트 메소드란 무엇인가요? Java 8 인터페이스에서 왜 디폴트 메소드가 필요한가요?
A Default Method is a method which is implemented in an interface with “default” keyword. It’s new featured introduced in Java SE 8. We need Default Methods because of the following reasons:
- 그것은 인터페이스에서 메서드의 구현을 제공할 수 있게 합니다.
- 그 인터페이스를 구현하는 클래스를 깨트리지 않고 인터페이스에 새로운 기능을 추가할 수 있습니다.
- 우아한 역호환 기능을 제공합니다.
- 기존 기능을 확장하기 쉽습니다.
- 기존 기능을 유지하기 쉽습니다.
정적 메서드란 무엇인가요? Java 8 인터페이스에서 정적 메서드가 필요한 이유는 무엇인가요?
A Static Method is an Utility method or Helper method, which is associated to a class (or interface). It is not associated to any object. We need Static Methods because of the following reasons:
- 특정 인터페이스에 대한 도우미 또는 유틸리티 메서드를 별도의 유틸리티 클래스가 아닌 동일한 인터페이스에 유지할 수 있습니다.
- 유틸리티 메서드를 유지하기 위해 별도의 유틸리티 클래스가 필요하지 않습니다.
- 책임의 명확한 분리. 즉, 우리는 컬렉션 API의 모든 유틸리티 메서드를 하나의 유틸리티 클래스에 유지할 필요가 없습니다. 예를 들어 Collections 등.
- API를 확장하기 쉽습니다.
- API를 유지하기 쉽습니다.
함수형 프로그래밍과 객체 지향 프로그래밍의 차이점은 무엇인가요?
Functional Programming | OOP |
---|---|
Does not exist State | Exists State |
Uses Immutable data | Uses Mutable data |
It follows Declarative Programming Model | It follows Imperative Programming Model |
Stateless Programming Model | Stateful Programming Model |
Main Fcous on: “What you are doing” | Main focus on “How you are doing” |
Good for Parallel (Concurrency) Programming | Poor for Parallel (Concurrency) Programming |
Good for BigData processing and analysis | NOT Good for BigData processing and analysis |
Supports pure Encapsulation | It breaks Encapsulation concept |
Functions with No-Side Effects | Methods with Side Effects |
Functions are first-class citizens | Objects are first-class citizens |
Primary Manipulation Unit is “Function” | Primary Manipulation Unit is Objects(Instances of Classes) |
Flow Controls: Function calls, Function Calls with Recursion | Flow Controls: Loops, Conditional Statements |
It uses “Recursion” concept to iterate Collection Data. | It uses “Loop” concept to iterate Collection Data. For example:-For-each loop in Java |
Order of execution is less importance. | Order of execution is must and very important. |
Supports both “Abstraction over Data” and “Abstraction over Behavior”. | Supports only “Abstraction over Data”. |
We use FP when we have few Things with more operations. | We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java. |
참고: FP, IP 및 OOP 비교에 대한 자세한 내용은 이전 게시물을 참조하십시오. “FP, OOP(IP) 비교“
Java의 오래된 Date API의 문제점을 설명해주세요. Java 8의 Date and Time API와 Joda Time API에 비해 Java 8의 Date and Time API의 장점은 무엇인가요?
Java의 오래된 Date API는 Java SE 8 이전에 사용 가능한 Date, Calendar, SimpleDateFormat 등의 Date API를 의미합니다. Java의 오래된 Date API는 다음과 같은 문제점이 있습니다. 이는 Java 8의 Date and Time API와 Joda Time API와 비교했을 때의 문제점입니다.
- 대부분의 API가 폐기되었습니다.
- 가독성이 낮습니다.
- java.util.Date는 가변이며 스레드 안전하지 않습니다.
- java.text.SimpleDateFormat은 스레드 안전하지 않습니다.
- 성능이 떨어집니다.
Java SE 8의 Date and Time API는 다음과 같은 장점이 있습니다. Java의 오래된 Date API와 비교했을 때의 장점입니다.
- 사용하기 매우 간단합니다.
- 인간이 읽기 쉬운 구문입니다. 즉, 가독성이 더 높습니다.
- 모든 API가 스레드 안전합니다.
- 성능이 향상되었습니다.
자바 SE 8에서 새로운 날짜 및 시간 API가 필요한 이유는 무엇인가요? 자바 SE 8의 날짜 및 시간 API가 이전 자바 날짜 API의 문제를 어떻게 해결하는지 설명해주세요.
우리는 고성능, 스레드 안전 및 높은 확장성을 갖춘 자바 애플리케이션을 개발하기 위해 자바 8의 날짜 및 시간 API가 필요합니다. 자바 8의 날짜 및 시간 API는 불변성과 스레드 안전성 원칙을 따르는 것으로 모든 이전 자바 날짜 API의 문제를 해결합니다.
자바의 이전 자바 날짜 API와 자바 8의 날짜 및 시간 API의 차이점은 무엇인가요?
자바의 이전 자바 날짜 API와 자바 8의 날짜 및 시간 API의 차이점:
S.No. | Java’s OLD Java Date API | Java 8’s Date and Time API |
---|---|---|
1. | Available before Java 8 too. | It is introduced in Java SE 8 |
2. | Not Thread Safe. | Thread Safe. |
3. | Mutable API. | Immutable API. |
4. | Less Performance. | Better Performance. |
5. | Less Readability. | More Readability. |
6. | It’s not recommended to use as its deprecated. | It’s always recommended to use. |
7. | Not Extendable. | Easy to Extend. |
8. | It defines months values from 0 to 11, that is January = 0. | It defines months values from 1 to 12, that is January = 1. |
9. | It’s an old API. | It’s a new API. |
다중 상속이란 무엇인가요? 자바 8은 다중 상속을 어떻게 지원하나요?
다중 상속이란 클래스가 두 개 이상의 부모 클래스로부터 특성과 기능을 상속하거나 확장할 수 있는 것을 의미합니다. 자바 7 이전에는 다중 상속이 불가능했습니다. 왜냐하면 자바는 “클래스는 하나의 클래스 또는 추상 클래스만 확장해야 한다”는 규칙을 따르기 때문입니다. 그러나 인터페이스를 사용하여 다중 구현 상속을 제공하는 것은 가능합니다. 왜냐하면 자바는 “클래스는 여러 인터페이스를 확장할 수 있다”는 규칙을 따르기 때문입니다. 그러나 자바 8은 인터페이스에서 메서드를 구현할 수 있는 새로운 기능인 기본 메서드를 도입함으로써 “인터페이스에서 메서드를 구현”할 수 있게 되었습니다. 이 기능 덕분에 자바 8은 일부 제한 사항이 있더라도 다중 상속을 지원합니다.
디폴트 메서드로 인한 인터페이스의 다이아몬드 문제는 무엇인가요? 자바 8은 이 문제를 어떻게 해결하나요?
Java 8 기본 메소드는 클래스가 동일한 메소드 구현(기본 메소드)을 가진 여러 인터페이스를 구현할 때 다이아몬드 문제를 일으킬 수 있습니다. 클래스가 같은 메소드 구현을 가진 둘 이상의 인터페이스를 확장할 때 발생합니다. Java SE 8 코드 샘플로 인터페이스 기본 메소드와 다이아몬드 문제를 보여줍니다.
interface A {
default void display() {
System.out.println("A");
}
}
interface B extends A {
default void display() {
System.out.println("B");
}
}
interface C extends A {
default void display() {
System.out.println("C");
}
}
class D implements B, C {
}
위 코드 스니펫에서, 클래스 D는 컴파일 시간 오류를 “타입 C와 B에서 상속된 매개변수 ()와 ()를 가진 이름이 display인 중복 기본 메소드”로 발생시킵니다. 이는 Java 컴파일러가 클래스 D에서 어떤 display()를 사용해야 할지 혼란스러워하기 때문입니다. 클래스 D는 인터페이스 B와 C 모두에서 display() 메소드를 상속받습니다. 이 문제를 해결하기 위해, Java 8은 다음 해결책을 제공했습니다.
class D implements B, C {
@Override
public void display() {
B.super.display();
}
}
이 B.super.display();는 이 다이아몬드 문제를 해결합니다. C 인터페이스 기본 메소드를 사용하고 싶다면, C.super.display();
를 사용하세요. Java 8 인터뷰 질문에 관한 모든 것입니다. 추후 게시물에서 더 많은 Java SE 8 인터뷰 질문을 논의할 예정입니다. 제 글이 마음에 드시거나 문제/제안이 있으시면 댓글을 남겨주세요.
Source:
https://www.digitalocean.com/community/tutorials/javase8-interview-questions-part2