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 범위를 갖는 변수들의 모임이며 ..

    10주차 멀티쓰레드 프로그래밍

    목표 자바의 멀티쓰레드 프로그래밍에 대해 학습하세요. 학습할 것 (필수) Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 Process vs Thread 프로세스(Process) 사전적 의미 : 일의 과정이나 공정 프로그램의 인스턴스, 실행된 프로그램 이미 메모리에 적재되어 있음 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 됨 쓰레드(Thread) 한 프로세스 내에서 동시에 실행 가능한 단위 Java 에서는 JVM 이 모든 thread 관리 프로세스라는 작업공간에서 실제로 작업을 처리하는 일꾼 프로세스의 자원을 이용해서 작업을 수행함 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재 쓰레드가 하나(싱글 쓰..

    9주차 예외 처리

    목표 자바의 예외 처리에 대해 학습하세요. 학습할 것 (필수) 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 아닌 것의 차이는? 커스텀한 예외 만드는 방법 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 프로그램 실행도중에 발생하는 에러는 어쩔 수 없지만, 예외(Exception)은 프로그래머가 미리 대처를 할 수 있다. 그러나 사용자의 원인으로 발생하는 예외는 개발자가 미리 대처를 해줄 수 있다. ​ 예외 처리(exception handling)란, 프로그래머가 예기치못한 예외의 발생에 미리 대처하는 코드..

    Java time - LocalDateTime 파싱과 포맷

    파싱과 포맷 날짜와 시간을 원하는 형식으로 출력하고 해석(파싱, parsing)하는 방법 형식화(formatting)와 관련된 클래스들은java.time.format패키지에 들어있음 이 중 DateTimeFormatter가 핵심 LocalDate date = LocalDate.of(2016, 1, 2); String yyyymmdd = DateTimeFormatter.ISO_LOCAL_DATE.format(date); // "2016-01-02" String yyyymmdd = date.format(DateTimeFormatter.ISO_LOCAL_DATE); // "2016-01-02" DateTimeFormatter 자주 쓰이는 다양한 형식들을 기본적으로 정의 그 외의 형식이 필요하다면 직접 정의해서..

    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 time 패키지 - TemporalAdjusters 클래스

    TemporalAdjusters 자주 쓰일만한 날짜 계산들을 대신 해주는 메서드를 정의해 놓은 클래스 예시 : 다음 주 월요일의 날짜를 계산할 때 TemporalAdjusters에 정의된 next()를 사용한 예 LocalDate today = LocalDate.now(); LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); 메서드 종류 메서드 설명 firstDayOfNextYear() 다음 해의 첫 날 firstDayOfNextMonth() 다음 달의 첫 날 firstDayOfYear() 올 해의 첫 날 firstDayOfMonth() 이번 달의 첫 날 lastDayOfYear() 올 해의 마지막 날 lastDayOf..