Java

Java

Java - 스트림의 최종연산

🌱 오늘의 주제 : 스트림의 최종연산 🌱 스트림의 최종연산 🌱 스트림의 최종연산 - forEach() 최종 연산은 스트림의 요소를 소모해서 결과를 만들어낸다. 최종 연산후에 스트림은 닫히게 되고 더이상 사용 할 수 없다. forEach()는 스트림의 요소를 소모하는 최종연산이다. 반환 타입이 void이므로 스트림의 요소를 출력하는 용도로 사용 된다. void forEach(Consumer

Java

Java - Optional<T>

🌱 오늘의 주제 : Optional 🌱 Optional Optional는 T타입의 객체를 감싸는 래퍼 클래스이다. 그래서 Optional타입의 객체에는 모든 타입의 객체를 담을 수 있다. Optional를 이용하면, null 체커를 위한 if문 없이도 NullPointerException이 발생하지 않는 보다 간결하고 안전한 코드를 작성하는 것이 가능하다. public final class Optional { private final T value; // T타입의 참조변수 } 🌱 Optional 객체 생성하기 Optional 객체를 생성할 때는 of() 또는 ofNullable()을 사용한다. 참조변수 값이 null일 가능성이 있으면, of()대신, ofNullable()을 사용해야 한다. 참조변수를 기..

Java

Java - 스트림의 특징과 스트림의 중간연산

🌱 오늘의 주제 : 스트림의 특징과 스트림의 중간연산 🌱 스트림 for문과 Iterator를 이용해서 코드를 작성할때 너무 길고 알아보기 어려우며 재사용성이 떨어지는 단점과 데이터 소스마다 다른 방식으로 다뤄야하는 단점을 해결하기 위해 만든 것이 스트림(Stream)이다. 스트림은 데이터 소스를 추상화하고 자주 사용되는 메서드들을 정의해 놓았다. Stream str = strList.stream(); // 스트림 생성 str.sorted().forEach(System.out::println); // 스트림 출력 🌱 스트림의 특징 스트림은 데이터를 읽기만 할 뿐, 데이터 소스를 변경하지 않는다. 스트림은 일회용이다. 스트림은 작업을 내부 반복으로 처리한다. 예를 들어, 반복문을 메서드의 내부에 숨겼다는 것..

Java

Java - 람다식

🌱 오늘의 주제 : 람다식 🌱 람다식 람다식은 메서드를 하나의 식으로 표현한 것이다. 메서드의 이름과 반환값이 없어진다. 클래스 혹은 객체를 생성할 필요 없이, 오직 람다식 자체만으로 메서드의 역할을 대신할 수 있다. 람다식은 메서드의 매개변수로 전달되어지는 것이 가능하고, 메서드의 결과로 반환도 될 수 있다. 메서드를 변수처럼 다루는 것이 가능해진 것이다. Arrays.setAll(arr, (i) -> (int)(Math.random() * 5) + 1); int method(i) { return (int)(Math.random() * 5 ) + 1; 🌱 람다식 작성하기 🌱 람다식은 익명 함수? 익명 객체! 람다식은 익명 클래스의 객체와 동일하다. 🌱 함수형 인터페이스 (Functional Inter..

Java

Java - BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

🌱 오늘의 주제 : BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 🌱정의 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 먼저 가장 안쪽에 있는 System.in은 콘솔에서 데이터를 입력받을 때 사용하고, inputStream 타입의 필드인 System클래스의 in 정적필드입니다. System.in으로 받은 Inputstream 객체에 read함수를 실행하면 1byte밖에 읽지 못해 2byte인 한글은 읽을 수 없습니다. 그래서 InputStreamReader을 사용하게 됩니다. InputStreamReader는 InputStream객체..

Java

Java - 쓰레드의 동기화 & wait()과 notify()

🌱 오늘의 주제 : 쓰레드의 동기화 & wait()과 notify() 🌱 쓰레드의 동기화 (synchronization) 멀티쓰레드 프로스세의 경우, 쓰레드 A가 작업하던 도중에 다른 쓰레드 B가 임의로 변경하였다면, 다시 쓰레드 A가 제어권을 받아서 나머지 작업을 마쳤을 때 원래 의도했던 것과는 다른 결과를 얻을 수 있다. 이러한 일을 방지하기 위해서 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 필요한데, 이 개념이 바로 '임계 영역'과 '잠금'이다. 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것을 쓰레드의 동기화라고 한다. 1. 메서드 전체를 임계 영역으로 지정 public synchronized void calcSum() { .. } ..

Java

Java - 쓰레드의 상태

🌱 오늘의 주제 : 쓰레드의 상태 🌱 쓰레드의 상태 🌱 쓰레드의 실행제어 🌱 sleep() sleep()은 지정된 시간동안 쓰레드를 멈추게 한다. static void sleep(long millis) static void sleep(long millis, int nanos) sleep()에 의해 일시정지 상태가 된 쓰레드는 지정된 시간이 다 되거나 interrupt()가 호출되면, InterruptedException이 발생되어 잠에서 깨어나 실행대기 상태가 된다. 그래서 항상 sleep()을 호출할 때는 try - catch문으로 예외처리를 해줘야 한다. try { Thread.sleep(1, 500000); // 쓰레드를 0.0015초 동안 멈추게 한다. } catch(InterruptedExcep..

Java

Java - 쓰레드의 우선순위 & 데몬 쓰레드

🌱 오늘의 주제 : 쓰레드의 우선순위 & 데몬 쓰레드 🌱 쓰레드의 우선순위 쓰레드는 우선순위라는 속성을 가지고 있는데, 이 우선순위의 값에 따라 쓰레드가 얻는 실행시간이 달라진다. 예를 들어, 파일전송기능이 있는 메신저의 경우, 파일 다운로드를 처리하는 쓰레드보다 채팅 내용을 전송하는 쓰레드의 우선순위가 더 높아야 사용자가 채팅하는데 불편함이 없을 것 이다. 우선순위 범위는 1~ 10이며, 숫자가 높을수록 우선순위가 높다. 쓰레드의 우선순위는 쓰레드를 생성한 쓰레드로부터 상속받는다. 예를 들어, main메서드를 수행하는 쓰레드는 우선순위가 5이므로, main메서드 내에서 생성하는 쓰레드의 우선순위는 자동적으로 5가 된다. 쓰레드를 실행하기 전에만 우선순위를 변경할 수 있다. void setPriority..

Java

Java - 싱글쓰레드와 멀티쓰레드 & 쓰레드의 I/O 블락킹(blocking)

🌱 오늘의 주제 : 싱글쓰레드와 멀티쓰레드 🌱 싱글쓰레드와 멀티쓰레드 하나의 쓰레드로 두 작업을 처리하는 경우는 한 작업을 마친 후에 다른 작업을 시작한다. 두개의 쓰레드를 작업 하는 경우에는 짧은 시간동안 2개의 쓰레드가 번갈아 가면서 작업을 수행해서 동시에 두 작업이 처리되는 것과 같이 느낀다. 하나의 쓰레드로 두개의 작업을 수행한 시간과 두개의 쓰레드로 두 개의 작업을 수행한 시간은 거의 같다. 오히려 두 개의 쓰레드로 작업한 시간이 싱글쓰레드로 작업한 시간보다 더 걸린다. 이유는 쓰레드간의 작업 전환에 시간이 걸리기 때문이다. 싱글 코어에서 단순히 CPU만을 사용하는 계산작업이라면 오히려 멀티쓰레드보다 싱글쓰레드로 프로그래밍하는 것이 더 효율적이다. 🌱 싱글쓰레드와 멀티쓰레드 예제 싱글 코어인 ..

Java

Java - 쓰레드란?

🌱 오늘의 주제 : 쓰레드란? 🌱 쓰레드란? 프로세스란 간단히 말해서 '실행 중인 프로그램'이다. 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며, 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다. 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스라고 한다. 메신저로 채팅하면서 파일을 다운로드 받거나 음성대화를 나눌 수 있는 것이 가능한 이유가 멀티쓰레드로 작성되어 있기 때문이다. 🌱 멀티쓰레딩의 장단점 CPU의 사용률을 향상시킨다. 자원을 보다 효율적으로 사용할 수 있다. 사용자에 대한 응답성이 향상된다. 작업이 분리되어 코드가 간결해진다. 🌱 쓰레드의 구현과 실행 ..

요가하는 개발자
'Java' 카테고리의 글 목록 (3 Page)