JAVA
-
Concurrent 프로그래밍 소개JAVA/JAVA8 관련 2022. 5. 20. 16:48
Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 예) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있음. 예) 녹화를 하면서 인텔리J로 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있음. 자바에서 지원하는 컨커런트 프로그래밍 멀티프로세싱 (ProcessBuilder) 멀티쓰레드 자바 멀티쓰레드 프로그래밍 Thread / Runnable - 실행 순서가 보장되지 않음. public class Thread1 { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); System.out.println("main Thread : " + Thread...
-
Date와 TimeJAVA/JAVA8 관련 2022. 5. 15. 17:12
기계적인 시간과 인류용 시간 표현방법 1. 기계적인 시간 Instant.now(): 현재 UTC (GMT)를 리턴한다. Universal Time Coordinated == Greenwich Mean Time public class MachineTime { public static void main(String[] args) { Instant instant = Instant.now();//기준 시 UTC (GMT) System.out.println("Instant :: " + instant); ZoneId zone = ZoneId.systemDefault(); System.out.println("Zone :: " + zone); ZonedDateTime zonedDateTime = instant.atZo..
-
Date 와 Time 소개JAVA/JAVA8 관련 2022. 5. 15. 14:56
자바 8에 새로운 날짜와 시간 API가 생긴 이유 Date 클래스의 문제 1. 그전까지 사용하던 java.util.Date 클래스는 mutable 하기 때문에 thead safe하지 않다. 2. 클래스 이름이 명확하지 않다. Date인데 시간까지 다룬다. 3. 버그 발생할 여지가 많다. (타입 안정성이 없고, 월이 0부터 시작한다거나..) 4. 날짜 시간 처리가 복잡한 애플리케이션에서는 보통 Joda Time을 쓰곤했다. 1. Mutable하여 Thread Safe하지 않은 부분 public class DateThread { public static void main(String[] args) { Date date = new Date(); long time = date.getTime(); System.o..
-
Optional API 사용JAVA/JAVA8 관련 2022. 4. 17. 16:38
Optional API를 주로 어떻게 사용하는지 살펴보았다. 1. NULL 체크 List springClasses = new ArrayList(); springClasses.add(new OnlineClass(1, "spring boot", true)); springClasses.add(new OnlineClass(5, "rest api development", false)); Optional spring = springClasses.stream() .filter(oc-> oc.getTitle().startsWith("spring")) .findFirst(); // 1. spring이 값이 있는지 체크 true이면 값이 있음. (null 체크) boolean present = spring.isPresen..
-
[더 자바8] Opitonal 소개JAVA/JAVA8 관련 2022. 4. 5. 22:24
Optional 소개 자바 프로그래밍에서 NullPointerException을 많이 보게 됨. -> null을 리턴하거나 Null 체크를 빼먹었기 때문임. 메소드에서 작업 중 특별한 상황에서 값을 제대로 리턴할 수 없는 경우 선택할 수 있는 방법 1. 예외(throw)를 던진다. 단점 : 리소스 소모가 많이 됨. 2. null을 리턴한다. 단점 : 비용 문제가 없지만, 그 코드를 사용하는 Client 코드가 주의해야 한다. 3. (자바 8 ~) Optional을 리턴한다. (클라이언트에 코드에게 명시적으로 빈 값일 수도 있다는 걸 알려주고, 빈 값인 경우에 대한 처리를 강제한다.) Optional : 오직 값 한 개가 들어있을 수도 없을 수도 있는 컨네이너. 주의할 것 리턴값으로만 쓰기를 권장 (메소드..
-
[더 자바8] STREAM APIJAVA/JAVA8 관련 2022. 3. 20. 16:49
Stream 자바 8에서 추가된 스트림(Stream)은 람다를 활용할 수 있는 기술중 하나이다. 스트림은 '데이터의 흐름'으로, 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. public class App { public static void main(String[] args) { List names = new ArrayList(); names.add("jump"); names.add("jumplope"); names.add("ff"); names.add("gg"); Stream stringStream = names.stream().map(String::toUpperCase); stringStream.forEach(System.out::pri..
-
[더 자바8] 인터페이스 기본 메소드와 스태틱 메소드JAVA/JAVA8 관련 2022. 2. 13. 16:05
기본적으로 인터페이스에서는 추상메서드만 선언이 가능하였다. JAVA8에서는 인터페이스에서 기본메소드와 스태틱 메소드를 선언할 수 있도록 변경되었다. 기본 메소드 - 인터페이스에 메소드 선인이 아니라 구현체를 제공하는 방식 - 기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 존재함. -> 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있는 위험이 존재 -> 반드시 문서화 필요(@implSpec 자바독 태그 사용) - Object가 제공하는 기능 (equals, hasCode)는 기본 메소드로 제공할 수 없다. (구현체가 재정의해야 함.) - 본인이 수정할 수 있는 인터페이스에만 기본 메소드를 제공할 수 있다. - 인터페이스를 상속받는 인터페이스에서 다시 추상 메소드로 변경할 ..
-
[더 자바 8] 메소드 레퍼런스JAVA/JAVA8 관련 2022. 2. 13. 14:32
메소드 레퍼런스 : 람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다. 메소드 참조하는 방법 스태틱 메소드 참조 타입::스태틱 메소드 ex:) UnaryOperator hi = Greeting::hi; 특정 객체의 인스턴스 메소드 참조 개체 레퍼런스::인스턴스 메소드 ex:) Greeting greeting = new Greeting(); UnaryOperator hello2 = greeting::hello; 임의 객체의 인스턴스 메소드 참조 타입::인스턴스 메소드 생성자 참조 타입::new ex:) Supplier newGreeting = Greeting::new; public class App { public static void ..