분류 전체보기

    classpath와 자바 옵션들

    클래스패스란 말 그대로 클래스를 찾기위한 경로이다. 자바에서 클래스패스의 의미도 똑같다. 즉, JVM이 프로그램을 실행할 때, 클래스파일을 찾는 데 기준이 되는 파일 경로를 말하는 것이다. 소스 코드(.java로 끝나는 파일)를 컴파일하면 소스 코드가 “바이트 코드”(바이너리 형태의 .class 파일)로 변환된다. java runtime(java 또는 jre)으로 이 .class 파일에 포함된 명령을 실행하려면, 먼저 이 파일을 찾을 수 있어야 한다. 이때 .class 파일을 찾을 때 classpath에 지정된 경로를 사용한다. classpath는 .class 파일이 포함된 디렉토리와 파일을 콜론으로 구분한 목록이다. java runtime은 이 classpath에 지정된 경로를 모두 검색해서 특정 클래..

    자바 Jar란

    - 일종의 자바 프로젝트 압축 파일 - ZIP 파일 압축 알고리즘을 기반으로 만들어짐 >> 반디집, 알집과 같은 zip 프로그램과 호환 가능 - JAR 파일은 웹브라우저에서 빠르게 다운로드할 수 있도록, 자바 애플릿을 위한 클래스, 이미지 및 사운드 파일들을 하나의 파일에 압축하여 담고 있는 파일이다. - 사용자의 요청에 의해 웹페이지의 일부로 들어오는 애플릿에는 여러개의 파일들이 담겨 있을 수 있는데, 각각은 웹페이지와 함께 다운로드 되어야 한다. 이 때 그 파일들을 하나의 파일에 압축하면 다운로드에 소요되는 시간이 절약된다. - 자바로 개발한 여러 클래스 파일들 또는 패키지 파일이 있을 때, 이를 하나로 묶으면 그 클래스들을 참조하기도 편하고, 다운 받기도 쉽다. - 자바 어플리케이션 프로그램을 개발..

    자바8의 날짜 관련 클래스

    Date나 SimpleDateFormmater는 스레드 안전하지 않다. 그리고 immutable 객체도 아니라서 지속적으로 값을 변경할 수 있었다. 게다가 API구성도 복잡하여 연도는 1990년부터 시작하고, 달은 1부터이지만 일은 0부터 시작한다;; 그래서 1990년 1월 1일은 1990, 1, 0 이렇게 값을 넘겨줘야만 했다. 그래서 자바8에서 java.time 이라는 패키지를 만들었다.

    함수형 인터페이스, java.util.function 패키지

    함수형 인터페이스 : 1개의 추상 메서드를 갖고 있는 인터페이스를 말한다. SAM라고도 불린다. 함수형 인터페이스는 자바의 람다식은 함수형 인터페이스로만 접근이 되기 때문이다. public interface FunctionalInterface { public abstract void doSomething(String text); } FunctionalInterface func = text -> System.out.println(text); // 이와 같이 재정의하고 func.doSomething("do something"); // 이와 같이 함수를 호출한다. 즉 함수형 인터페이스는 람다식으로 만든 객체에 접근하기 위해서이다. 익명클래스를 사용하면 아래와 같다. FunctionalInterface func..

    Parallel array sorting 병렬 배열 정렬

    Arrays 클래스에는 다음과 같은 static 메소드들이 있다. public static int binarySearch // 배열 내에서의 검색 public static T[] copyOf // 배열의 복제 public static boolean equals // 배열의 비교 public static void fill // 배열 채우기 public static int hashCode // 배열 해시코드 제공 public static void sort // 정렬 public static String toString // 배열 내용을 출력 javadocs에는 아래와 같이 기술되어 있다. 의역해보면, 다양한 arrays 연산을 위한 메서드들을 포함하고 있다. lists처럼 다루기 위한 static facto..

    StringBuilder, StringBuffer

    String과 StringBuffer/StringBuilder의 차이점은 String은 immutable 하다는 점이다. 즉 새로운 문자열을 할당하면, 그 전의 객체를 삭제한다. String은 불변성을 가져 변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용하면 좋은 성능 기대할 수 있음. 하지만 문자열 추가, 수정,삭제가 빈번하게 일어나면 mutable하게 할당하는게 유리할 수 있다. StringBuffer/StringBuilder는 가변성 가지기 때문에, .append(), .delete() 등의 API를 이용하여 동일 객체내에서 문자열 변경이 가능함. StringBuilder public final class StringBuilder extends AbstractStringBuilder ..

    StringJoiner

    문자열을 예쁘게 처리하기 위한 java.util 에 포함되어 있고, 순차적으로 나열되는 문자열을 처리할 때 사용됨. * {@code StringJoiner} is used to construct a sequence of characters separated * by a delimiter and optionally starting with a supplied prefix * and ending with a supplied suffix. * * Prior to adding something to the {@code StringJoiner}, its * {@code sj.toString()} method will, by default, return {@code prefix + suffix}. * However..

    자바 Optional 이란

    java.util에 속하고, 1.8부터 제공됨. Null 처리를 간편하게 하기 위해서 등장. T 객체를 포장해주는 래퍼 클래스이고, NullPointerException 예외를 예방할 수 있다. public final class Optional final 로 정의되어 있어 더 이상 확장이 불가능하다. Optional의 특이한 점은 아래와 같이 객체를 생성하지 않는다. new Optional(); 아래의 3개의 메소드를 통해 Optional 클래스의 객체를 생성할 수 있다. 데이터가 없는 Optional 객체를 생성하려면 이와 같이 empty() 메소드를 이용한다. javadoc에는 아래와 같이 기술되어 있다. * Returns an empty {@code Optional} instance. No valu..

    NIO2

    NIO와 이름은 비슷하지만 크게 관련은 없는 NIO2가 7버전 부터 제공된다. 지금까지 파일을 다루기 위해서 제공한 io 패키지와 File 클래으세 미흡한 부분이 많았다. 그래서 이를 보완하는 내용이 많이 포함되어 있다. 파일의 속성을 다룰 수 있고, 심볼릭 링크까지 다룰 수 있는 기능 제공하고, 어떤 파일이 변경되었는지 쉽게 확인할 수 있는 WatchService 라는 클래스도 제공된다. 그리고 며가지 채널들도 추가됨. File의 변경점 기존의 단점 심볼릭 링크, 속성, 파일의 원한 등에 대한 기능이 없음 파일을 삭제하는 delete() 메소드는 실패시 아무런 예외를 발생시키지 않고, boolean 타입의 결과만 제공해줌 파일이 변경되었는지 확인하는 방법은 lastModified()라는 메소드를 제공해..

    ThreadLocal이란?

    오직 한 스레드에서만 읽을 수 있고 쓸 수 있는 변수를 생성할 수 있도록 함. javadoc에는 아래와 같이 기술되어 있다. * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread that accesses one (via its * {@code get} or {@code set} method) has its own, independently initialized * copy of the variable. {@code ThreadLocal} instances are typically private * static fields in classes ..