3. Optional ClassNPE(NullPointerException) 때문에 고생한 경험이 한 두 번이 아닐거라 생각한다. 그래서 Java8 에서는 하스켈, 스칼라 등의 함수형 언어에서 사용되고 있는 ‘선택형 값’ 개념의 영향을 받아 Optional 라는 새로운 클래스를 제공한다. 값이 없는 상황을 모델링하는 것이다. Optional은 선택형 값을 캡슐화하는 클래스이다. 값이 존재하면 그 값을 감싼다. 값이 없는 경우에는 Optional.empty 메서드로 Optional을 반환한다. empty 메서드는 Optional의 특별한 싱글턴 인스턴스를 반환하는 정적 팩토리 메서드이다. null 레퍼런스와 Optional.empty()는 의미상으로 비슷하지만 실제로 차이점이 많다. null을 참조하려 하..
[JAVA 8] 1. 동작을 파라미터로 전달하기 메소드 내부에서 실행되는 동작이 유동적인 경우가 있다. 이러한 경우 오버로딩을 사용하여 해결할 수 있지만, 전달되는 파라미터가 동일한 경우 그럴 수 없다. 때문에 메소드 내부에서 if 문을 통해 해당하는 동작에 따라 실행되도록 해야 한다. 이것에는 실제 수행되어야 하는 비즈니스 로직과 상관없는 코드들을 생성하고, 실행해야 한다는 문제점이 있다. 더욱이 가독성은 지극히 떨어지며 그 메소드는 더이상 한 가지 일만 수행하지 않게 된다. 코드를 살펴보자. private List filter(List list) { List result = new ArrayList(); for (Apple apple : list) { if (apple.getColor().equals..
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주소와 포트를 가지고 있으며 양방향 네트워크 통신이 가능한 객체다. 이 ..
StringBuffer vs StringBuilder String 의 정체두 클래스의 차이를 알기 위해서 일단 String 객체의 정체를 짚어보고 가자. String 객체는 기본적으로 immutable 이다. 내부적으로 char[] 배열을 사용하고 있고 이 배열은 변경이 불가능하다는 뜻이다. 즉, Constant Pool에 문자열이 특정 상수로 저장되어 더 이상 변하지 않는, 변할 수 없는 값이 되는 것이다. (물론 참조 변수인 String 객체는 Heap 영역에 생성된다! String 객체 자체가 Constant Pool에 생성된다는 것이 아니다.) 이 String 객체에 문자열을 저장하고, + 연산자 또는 concat 메소드를 통해 새로운 문자열을 덧붙이려고 할 때는, 기존의 String 객체가 가리..
#JAVA의 기본적인 이슈들 5가지 1. 다시 자바의 기본으로 JDK(Java Development Kit) : 자바 개발 도구 - JVM용 소프트웨어 개발 도구 JRE(Java Runtime Environment) : 자바 실행 환경 - JVM용 OS JVM(Java Virtual Machine) : 자바 가상 머신 - 가상의 컴퓨터 JDK를 이용해 개발된 프로그램은 JRE에 의해 가상의 컴퓨터인 JVM 상에서 구동된다. JDK가 JRE를 포함하고 JRE는 JVM을 포함하는 형태로 배포된다. JDK는 자바 소스 컴파일러인 javac.exe를 포함하고 있고,JRE는 자바 프로그램 실행기인 java.exe를 포함하고 있다. 2. 메모리는 어떻게 사용되는가 일반적인 프로그램은 이 프로그램에게 할당된 메모리 ..
- Total
- 1,569,016
- Today
- 222
- Yesterday
- 366