3. Optional ClassNPE(NullPointerException) 때문에 고생한 경험이 한 두 번이 아닐거라 생각한다. 그래서 Java8 에서는 하스켈, 스칼라 등의 함수형 언어에서 사용되고 있는 ‘선택형 값’ 개념의 영향을 받아 Optional 라는 새로운 클래스를 제공한다. 값이 없는 상황을 모델링하는 것이다. Optional은 선택형 값을 캡슐화하는 클래스이다. 값이 존재하면 그 값을 감싼다. 값이 없는 경우에는 Optional.empty 메서드로 Optional을 반환한다. empty 메서드는 Optional의 특별한 싱글턴 인스턴스를 반환하는 정적 팩토리 메서드이다. null 레퍼런스와 Optional.empty()는 의미상으로 비슷하지만 실제로 차이점이 많다. null을 참조하려 하..
2. 디폴트 메서드Java 8에서는 디폴트 메서드라는 것을 사용하여 메서드 구현을 포함하는 인터페이스를 정의할 수 있다. 인터페이스에서 이미 구현을 했으니 해당 인터페이스를 구현하는 클래스에서는 추가된 메서드의 구현을 추가적으로 할 필요가 없다. 결과적으로 기존 인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. 디폴트 메서드를 활용하면 자바 API의 호환성을 유지하면서 라이브러리를 변경할 수 있다. 기존에는 이미 공개된 라이브러리를 수정할 때 인터페이스에 메서드를 추가하게 되면 해당 인터페이스를 구현하고 있는 클래스에 모두 메서드를 구현해줘야 했지만 디폴트 메서드를 통해 구현하면 그렇게 하지 않아도 된다. 훨씬 더 유연해진 것이다. 이와 같은 방식..
[JAVA 8] 1. 동작을 파라미터로 전달하기 메소드 내부에서 실행되는 동작이 유동적인 경우가 있다. 이러한 경우 오버로딩을 사용하여 해결할 수 있지만, 전달되는 파라미터가 동일한 경우 그럴 수 없다. 때문에 메소드 내부에서 if 문을 통해 해당하는 동작에 따라 실행되도록 해야 한다. 이것에는 실제 수행되어야 하는 비즈니스 로직과 상관없는 코드들을 생성하고, 실행해야 한다는 문제점이 있다. 더욱이 가독성은 지극히 떨어지며 그 메소드는 더이상 한 가지 일만 수행하지 않게 된다. 코드를 살펴보자. private List filter(List list) { List result = new ArrayList(); for (Apple apple : list) { if (apple.getColor().equals..
#2. 빌더 패턴(Builder pattern)인스턴스를 생성할 때, 생성자(Constructor)만을 통해서 생성하는데는 어려움이 있다. 빌더 패턴은 이 문제를 기반으로 고안된 패턴 중 하나이다. 예를 들면, 생성자 인자로 너무 많은 인자가 넘겨지는 경우 어떠한 인자가 어떠한 값을 나타내는지 확인하기 힘들다. 또 어떠한 인스턴스의 경우에는 특정 인자만으로 생성해야 하는 경우가 발생한다. 이럴 경우, 특정 인자에 해당하는 값을 null로 전달해줘야 하는데, 이는 코드의 가독성 측면에서 매우 좋지 않다는 것을 직감적으로 알 수 있다.코드를 통해 확인해보자.public Student(long id, String name, String major, int age, String address) { this.id..
Blocking I/O, ServerSocket, Socket 그리고 Thread Pool성능에 영향을 미치는 결정적인 요인으로서의 I/O에는 크게 두 가지 I/O가 존재한다. 디스크에서 데이터를 읽어오는 I/O와 네트워크 통신에서 발생하는 I/O이다. 이 두 I/O 작업이 처리되는 속도는 CPU의 작업 처리 속도에 비해 매우 느리다. 그렇기 때문에 애플리케이션의 성능은 이 I/O 작업을 어떻게 처리하느냐에 달려있다고 할 수 있다. 그 중 네트워크 통신에 사용하는 Socket을 중심으로 I/O 방식을 알아보자. Socket소켓(Socket)의 정의를 다시 한 번 짚고 가자면, 소켓이란 데이터 송수신을 위한 네트워크 추상화 단위로 IP주소와 포트를 가지고 있으며 양방향 네트워크 통신이 가능한 객체다. 이 ..
- Total
- 1,373,458
- Today
- 37
- Yesterday
- 529