Java/Java

    Lambda 표현식

    람다식(Lambda Expression) JDK1.8부터 추가된 람다식의 도입으로 인해서 이제 자바는 객체지향언어인 동시에 함수형 언어가 됐다. 객체지향언어가 함수형 언어의 기능까지 갖추게 하는 일은 쉬운 일이 아니었을텐데도 기존의 자바를 거의 변경하지 않고도 함수형 언어의 장점을 잘 접목시키는데 성공했다 람다식이란, 메서드를 하나의 식(expression)으로 표현한 것. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로 람다식을 익명함수(anonymous function)라고도 한다. 람다식은 메서드의 매개변수로 전달될 수 있고, 메서드의 결과로 반환될 수 있다. 즉, 메서드를 변수처럼 다루는 것이 가능하다. 함수와 메서드의 차이 근본적으로 동일하다. 함수는 수학에서 따온 일반적 용어,..

    Java Annotation

    Java Annotation (애노테이션, 주석) Annotation이란 애노테이션은 소스코드에 붙여서 특별한 의미를 부여하는 기능이다. 주석(comment)처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다. 다음은 모든 Annotation의 조상인 Annotation인터페이스의 소스코드의 일부이다. package java.lang.annotation; /** * The common interface extended by all annotation interfaces. Note that an * interface that manually extends this one does not define * an annotation interface. Also not..

    Java Generics

    Java Generics 1. 제네릭스(Generics) 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능 데이터 타입(data type)을 일반화(generalize)하는 것을 의미한다 컴파일 시 타입을 체크해 주는 기능(compile-time type check) - JDK1.5에서 도입 제네릭의 장점 타입 안전성을 제공한다. 타입 체크와 형 변환을 생략할 수 있으므로 코드가 간결해진다. 객체의 타입 안전성을 높이고 형 변환의 번거로움을 줄여준다 - 타입 안정성, 유연성 향상 제네릭 타입은 클래스와 메서드에 선언할 수 있다. class Box { // 지네릭 타입 T를 선언. T는 타입변수 T item; void setItem(T item) { t..

    Java Collection Framework (컬렉션 프레임워크)

    컬렉션 : ‘데이터 그룹을 다루고 표현하기 위한 단일화된 구조’ - Java API문서 JDK1.2 이전까지는 Vector, Hashtable, Properties와 같은 컬렉션 클래스들을 각자의 방식으로 처리 데이터를 저장하는 클래스들을 표준화한 설계 - 컬렉션 프레임워크 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있어 편리하고 재사용성이 높은 코드를 제공한다. 컬렉션 프레임웍은 컬렉션 데이터 그룹을 크게 List, Set, Map으로 나눠 3개의 인터페이스를 정의하였다. 그리고 List와 Set의 공통된 부분으로 Collection 인터페이스를 추가로 정의하였다. 인터페이스 List와 Set을 구현한 컬렉션 클래스들은 서로 많은 공통부분이 있어서, 공통된 부분을 다시 뽑아 Coll..

    ThreadLocal 의 사용법과 활용, 주의사항

    ThreadLocal https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html ThreadLocal은 JDK 1.2부터 제공된 오래된 클래스다. 이 클래스를 활용하면 스레드 단위로 로컬 변수를 사용할 수 있기 때문에(쓰레드 단위로 로컬 변수를 할당) 마치 전역변수처럼 여러 메서드에서 활용할 수 있다. 다만 잘못 사용하는 경우 큰 부작용(side-effect)이 발생할 수 있기 때문에 다른 스레드와 변수가 공유되지 않도록 주의해야 한다. 이 기능은 ThreadLocal 클래스를 통해서 제공한다. TheadLocal을 사용 하면 특정 스레드 에서만 액세스할 수 있는 데이터를 저장할 수 있다 . 같은 Thread 범위를 갖는 변수들의 모임이며 ..

    Java 형식화 클래스 - Format, DecimalFormat, SimpleDateFormat

    형식화 클래스 DecimalFormat DecimalFormat을 이용하면 숫자 데이터를 정수, 부동소수점, 금액 등의 다양한 형식으로 표현할 수 있다. 반대로 일정한 형식의 텍스트 데이터를 숫자로 쉽게 변환도 가능하다. 형식화 클래스는 패턴을 정의하는 것이 전부다. DecimalFormat 사용법 double number = 1234567.89; // 1.원하는 출력형식의 패턴을 작성하여 DecimalFormat 인스턴스를 생성 DecimalFormat df = new DecimalFormat("#.#E0"); // 2.출력하고자 하는 문자열로 format 메소드를 호출 String result = df.format(number); docs : https://docs.oracle.com/javase/7..

    Java UUID (+ IN MySQL )

    UUID란 UUID(Universally Unique Identifier)는 온라인 대전 시스템이나 랭킹 시스템 등에서 전 세계에서 유일한 값으로 서버에 연결하지 않고 만들 경우 활용하는 식별자다. UUID는 전 세계에 중복 없는 독특한 값이 되도록 설계되어 있으며 고유성이 중앙 서버 등 요소에 의존하지 않도록 되어 있다. 이런 특징을 가진 UUID를 데이터베이스 기본키에 이용하면 타인 데이터베이스와 결합하거나 데이터를 다른 데이터베이스로 이동하는 걸 자유롭게 할 수 있게 된다. 반면 누구나 UUID를 생성할 수 있기 때문에 현재 전 세계에 존재하는 UUID를 추적할 수 없다는 단점도 함께 갖고 있다. 전 세계에 중복이 없는 독특한 가치를 실현하는 방법은 다수 존재한다. 하지만 UUID 구현은 IETF의..

    예외 처리 방법(Exception Handling) - 복구, 회피, 전환

    예외 처리 방법(Exception Handling) 예외를 처리하는 방법에는 예외 복구, 예외 처리 회피, 예외 전환 방법이 있다. 예외 복구 예외 상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 방법 예외를 잡아서 일정 시간, 조건만큼 대기하고 다시 재시도를 반복한다. 최대 재시도 횟수를 넘기게 되는 경우 예외를 발생시킨다. final int MAX_RETRY = 100; public Object someMethod() { int maxRetry = MAX_RETRY; while(maxRetry > 0) { try { ... } catch(SomeException e) { // 로그 출력. 정해진 시간만큼 대기한다. } finally { // 리소스 반납 및 정리 작업 } } // 최대 재시도 횟..

    예외 처리란

    예외 처리(Exception Handling) 프로그램 실행도중에 발생하는 에러는 어쩔 수 없지만, 예외(Exception)은 프로그래머가 미리 대처를 할 수 있다. 사용자의 원인으로 발생하는 예외는 개발자가 미리 대처를 해줄 수 있다. ​ 예외 처리(exception handling)란, 프로그래머가 예기치못한 예외의 발생에 미리 대처하는 코드를 작성하는 것으로, 실행중인 프로그램의 비정상적인 종료를 막고, 상태를 정상상태로 유지하는 것이 목적이다. 예외처리의 목적 정의 - 프로그램 실행 시 발생할 수 있는 발생할 수 있는 예외에 대비한 코드를 작성하는것 목적 - 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는것 Error(에러클래스) 와 예외(Exception)은 모두 runtime 시에 ..

    자바가 제공하는 기본 예외들과 자주 사용하는 예외들

    자바가 제공하는 기본예외들 Arithmetic Exception 산술연산에서 예외 조건이 발생했을 때 발생 대표적인 / by zero ArrayIndexOutOfBounds Exception 잘못된 인덱스로 Array에 엑세스 했을 경우 발생. 인덱스가 음수이거나 배열 크기보다 크거나 같을 때 발생 ClassNotFoundException 정의한 클래스를 찾을 수 없을 때 발생하는 예외 FileNotFoundException 파일에 엑세수 할 수 없거나 열리지 않을 경우 발생 IOException 입출력 작업이 실패하거나 중단될 때 발생 InterruptedException Thread가 waiting, sleeping 또는 어던 처리를 하고 있을 떄 interrupt가 되면 발생하는 예외 NoSuchM..