Java29 [Java] 스레드(Thread)와 동기화(Synchronization) 스레드(Thread) 스레드는 실행 중인 프로그램/프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다. 보통 스레드 하나에 CPU의 코어 하나가 할당되어 동시에 실행이된다. 스레드는 동시에 독립적으로 실행이 되므로 동일한 실행결과를 보장할 수 없다. public Thread(Runnable target) { ... } Thread의 생성자는 매개변수 타입으로 java.lang.Runnable 인터페이스를 가진다. Runnable 인터페이스는 하나의 추상메서드인 void run() 을 가지는 함수형 인터페이스이다. Runnab.. 2022. 10. 11. [Java] NIO 와 NIO.2 Path 클래스 Path pt1 = Paths.get("C:\\JavaStudy\\PathDemo.java"); Path pt2 = pt1.getRoot(); Path pt3 = pt1.getParent(); Path pt4 = pt1.getFileName(); Path 인터페이스는 경로를 표현하기 위한 인터페이스다. java.io.File 클래스를 대체하기 위해 정의된 인터페이스로 java.nio.file 패키지에 정의되어 있다. 인스턴스의 생성은 해당 파일/디렉토리의 존재 유무와 상관이 없고 실행한다고 하여 파일/디렉토리가 생성되는 것도 아니다. Path 인스턴스를 사용하여 파일이나 디렉토리의 정보를 담은 인스턴스를 생성할 수 있다. 파일 및 디렉토리 생성 public static Path creat.. 2022. 10. 2. [Java] I/O 스트림 I/O 스트림 데이터의 흐름을 스트림(Stream)이라고 한다. 자바에서 입출력 대상에 상관없이 동일한 방법으로 입출력을 할 수 있도록 I/O 스트림 모델이라는 것을 정의했다. 자바 I/O 모델의 스트림을 I/O 스트림이라고 한다. 스트림 관련 클래스들은 java.io 패키지에 정의되어 있다. I/O 스트림은 크게 입력 스트림(Input Stream)과 출력 스트림(Output Stream)으로 나뉜다. 입력 스트림은 실행 중인 자바 프로그램으로 데이터를 읽어 들이는 스트림이고, 출력 스트림은 실행 중인 자바 프로그램으로부터 데이터를 내보내는 스트림이다. /** try-catch-finally **/ OutputStream out = null; try { out = new FileOutputStream(.. 2022. 9. 29. [Java] 시각과 날짜의 처리 Instant 클래스 Instant now = Instant.now(); now.getEpochSecond(); Instant 클래스는 타임 라인의 특정 시점을 표현하는 클래스이다. 위의 코드 처럼 now 메서드를 사용하면 현재 시각 정보를 담은 인스턴스를 생성할 수 있다. '1970-01-01 00:00:00' 을 표준 자바 epcoh 이라고 한다. getEpcohSecond 메서드를 사용하면 표준 자바 epoch 을 기준으로 지나온 시간을 초 단위로 계산한 결과를 반환한다. Duration 클래스 Instant start = Instant.now(); ... Instant end = Instant.now(); Duration between = Duration.between(start, end); Sy.. 2022. 9. 24. [Java] Stream 스트림(Stream) int[] arr = {1, 2, 3, 4, 5} /* example1 */ IntStream stm1 = Arrays.stream(arr); // 스트림 생성 IntStream stm2 = stm1.filter(n -> n%2 == 1);// 중간 연산 int sum = stm2.sum(); // 최종 연산 /* example2 */ int sum = Arrays.stream(arr) // 스트림 생성 .filter(n -> n%2 == 1) // 중간 연산 .sum(); // 최종 연산 Java 에서 데이터의 흐름을 생성할 수 있는데, 이러한 흐름을 스트림(Stream)이라고 한다. 배열이나 컬렉션 인스턴스를 다룰 때 for문이나 iterator를 사용하여 접근하였다. Java .. 2022. 9. 23. [Java] Optional 클래스 null 과 NPE(NullPointerException) null은 참조형 타입의 기본 값이다. 어떠한 데이터 타입으로 구분되지 않는 모든 참조값에 할당될 수 있는 특수한 값이다. null이 저장된 참조변수를 대상으로 메서드 호출 등의 코드를 수행할 경우 예외가 발생하는데 그 예외를 NPE(NullPointerException)이라고 한다. NPE가 문제가 되는 이유는 컴파일 시점에는 예외가 발생하지 않다가 런타임 때 발생하기 때문이다. 기존에 NPE를 막기위해서는 null 여부를 체크하는 코드를 추가했다. String test = null; int len = test.length(); // NPE 발생 if (String != null) {// null check int len = test.lengt.. 2022. 9. 15. [Java] 메서드 참조(Method Reference) 메서드 참조란 이미 정의되어 있는 메서드를 사용해 람다식을 대신하는 것을 의미한다. 메서드 참조의 유형은 정적 메서드 참조, 인스턴스 메서드 참조, 생성자 참조로 크게 3가지가 있다. 인스턴스 메서드 참조는 참조를 통한 인스턴스 메서드 참조와 클래스 이름을 통한 인스턴스 메서드 참조로 구분할 수 있다. 정적(static) 메서드 참조 List list = new ArrayList(Arrays.asList(1, 3, 5, 7, 9)); // public static void reverse(List list) Consumer c = l -> Collections.reverse(l);// 람다식 c.accept(list) Consumer c = Collections::reverse;// 메서드 참조 c.acc.. 2022. 9. 15. [Java] 기본 함수형 인터페이스(Functional Interface) Java8에서 미리 정의해 놓은 함수형 인터페이스들을 알아보자. 다음 인터페이스들은 java.util.function에 정의되어있다. Predicate Predicate 인터페이스 내에는 boolean test(T t) 라는 추상 메서드가 존재한다. boolean test(T t)는 전달된 인자를 판단해 true 또는 false를 반환해야 하는 상황에서 사용한다. public static int sum(Predicate p, List lst) { int s = 0; for(int n : lst) { if(p.test(n)) s += n; } return s; } public static void main(String[] args) { List list = Arrays.asList(1, 5, 7, 9, 1.. 2022. 9. 13. [Java] 익명 클래스(Anonymous Class)와 람다식(Lambda Expression) 익명클래스(Anonymous Class) interface Printable { void print(); } class Printer implements Printable { public void print(String s) { System.out.println(s); } } class Example { public static void main(String[] args) { Printable prn = new Printer(); prn.print("hi"); } } 위 코드에서 Printer 클래스를 보자. Printer 클래스의 정의와 Printer 인스턴스의 생성이 분리되어 있다. 하지만 '익명 클래스'의 형태를 사용하면 클래스의 정의와 인스턴스 생성을 하나로 묶을 수 있다. class Exampl.. 2022. 9. 13. 이전 1 2 3 4 다음