Java/Java 문법 종합반 강의 정리
-
null은 실수? Optional의 등장Java/Java 문법 종합반 강의 정리 2024. 1. 9. 19:44
Null은 10억 달러 짜리 실수다? - null은 Tony Hoare가 만든 개념이다. - 기본적으로 아무것도 참조하지 않는다는 것을 의미한다. - 2009년에 Tony Hoare는 null이라는 개념을 만든것이 1조원짜리 실수라고 이야기 했다 자세한 이야기는 아래의 링크에 있지만 간략하게 요약하자면, - null이라는 "개념"이 존재하기 때문에, 거의 모든 상황에 null이 발생할 수 있음을 경계해야 한다. - 이상적이라면 모두가 메서드 이름을 "findWhateverAndifnoExistReturnNull()"처럼 작성하고 해당 메서드를 사용하는 모두는 null 체크를 해줘야 한다. - 하지만 그런일은 일어나지 않았고, 이것을 가리켜 10억 달러짜리 실수라고 밝혔다. https://zorba91.t..
-
stream(스트림) 개념, 예제Java/Java 문법 종합반 강의 정리 2024. 1. 9. 12:52
스트림은 Java8 부터 제공되는, 한번 더 추상화된 자료구조와 자주 사용하는 프로그래밍 API를 제공한 것이다. 자료구조를 한번 더 추상화 했기 때문에, 자료구조의 종류에 상관 없이 같은 방식으로 다룰 수 있다. ( + 병렬 처리에 유리한 구조로 조건부로 성능도 챙길 수 있다.) 조금 더 쉽게 비유하자면, 자료구조의 "흐름"을 객체로 제공해주고, 그 흐름동안 사용할 수 있는 메서드들을 api로 제공해 주는 것이다. 스트림의 특징 1. 원본의 데이터를 변경하지 않는다. - 자바 컬렉션으로부터 스트림(해당 컬렉션의 흐름)을 받아서 한 번 사용한다. 2. 일회용이다. - 한 번 사용한 스트림은 어디에도 남지 않는다. 위는 java.collection 내부의 stream() 메서드 이다. 모든 컬렉션을 상속하..
-
함수형 프로그래밍 실전 예제(함수형 인터페이스, 람다 함수)Java/Java 문법 종합반 강의 정리 2024. 1. 9. 12:08
기존에 사용하던 문법으로 예제를 만들고, 그것을 함수형 문법으로 리팩토링 해보자 // 주차장 예제 // 티켓, 파킹머니 -> 주차하게 가능 public class LambdaAndStream { public static void main(String[] args) { // 주차대상 차량 ArrayList carsWantToPart = new ArrayList(); // 주차장 ArrayList parkingLot = new ArrayList(); Car car1 = new Car("Benz", "Class E", true, 0); Car car2 = new Car("BMW", "Series 7", false, 100); Car car3 = new Car("BMW", "X9", false, 0); Car ..
-
Java8 에서의 변경점Java/Java 문법 종합반 강의 정리 2024. 1. 9. 10:24
자바는 시장의 요구에 맞게 진화하고 있다. 그 중에 가장 큰 변화가 일어났던 것이 Java8 버전이다. 시장은 자바에게 어떤 요구를 했을까? 1. 병렬처리 - 간단하게 말하자면, 빅데이터를 처리할 필요성이 늘어났고, 멀티코어 컴퓨터와 같은 병렬 프로세싱이 가능한 장비들이 보급되면서 새로운 요구사항들이 생겨나게 됐다. - 당장은 병렬 처리 라는 개념이 있다, 정도로만 알아 두면 된다. 당장 다루는 영역은 람다와 스트림의 기능을 사용하거나 문법을 이해하는 정도이다. - 병렬 처리에 관한 관심이 생긴다면 아래의 링크를 참고하자. https://medium.com/naver-cloud-platform/%EC%9E%AC%EB%AF%B8%EB%A1%9C-%EC%9D%BD%EC%96%B4%EB%B3%B4%EB%8A%..
-
Lock, ConditonJava/Java 문법 종합반 강의 정리 2024. 1. 3. 20:37
!- 코드 예시는 가장 마지막에 -! Lock - synchronized 블럭으로 동기화하면 자동적으로 Lock이 걸리고 풀리지만 같은 메서드 내에서만 Lock을 걸 수 있다는 제약 이 있다. - 이런 제약을 해결하기 위해 Lock 클래스를 사용한다. ReentrantLock - 재진입 가능한 Lock, 가장 일반적인 베타 Lock - 특정 조건에서 Lock을 풀고, 나중에 다시 Lock을 얻어 임계영역으로 진입이 가능하다. public class MyClass { private Object lock1 = new Object(); private Object lock2 = new Object(); public void methodA() { synchronized (lock1) { methodB(); } }..
-
wait(), notify()Java/Java 문법 종합반 강의 정리 2024. 1. 3. 19:57
침범을 막은 코드(synchronized)를 수행하다가 작업을 더 이상 진행할 상황이 아니면, wait()을 호출하여 쓰레드가 Lock을 반납하고 기다리게 할 수 있다. - 그럼 다른 쓰레드가 락을 얻어 해당 객체에 대한 작업을 수행할 수 있게 되고, - 추후에 작업을 진행할 수 있는 상황이 되면 notify()를 호출해서, - 작업을 중단했던 쓰레드가 다시 Lock을 얻어 진행할 수 있게 된다. 1. wait() : 실행 중이던 쓰레드는 해당 객체의 대기실(waiting pool)에서 통지(notify)를 기다린다 2. notify() : 해당 객체의 대기실(waiting pool)에 있는 모든 쓰레드 중에서 임의의 쓰레드만 통지를 받는다. 예제를 통해 두 메서드의 활용법을 알아보자 public cla..
-
join, yield, synchronizedJava/Java 문법 종합반 강의 정리 2024. 1. 3. 17:42
join() : 정해진 시간동안 지정한 쓰레드가 작업하는 것을 기다린다. - 시간을 지정하지 않았을 때는 지정한 쓰레드의 작업이 끝날 때 까지 기다린다. join 사용방법 Thread thread = new Thread(task, "thread"); thread.start(); try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } - Thread.sleep(ms), ms(밀리초) 단위로 설정된다. - 예외처리를 해야한다. - interrupt() 를 만나면 기다리는 것을 멈추기 때문에 InterruptedException 이 발생할 수 있다. - 시간이 지정하지 않았기 때문에 thread가 작업을 끝낼 때 까지 mai..
-
쓰레드의 상태와 제어Java/Java 문법 종합반 강의 정리 2024. 1. 3. 16:31
쓰레드 상태 - 이처럼 쓰레드는 실행과 대기를 반복하며 run() 메서드를 수행한다. - run() 메서드가 종료되면 실행이 멈추게 된다. - 음악을 듣다 일시정지 하는 것과 마찬가지로, 쓰레드도 일시정지 상태를 만들 수 있다.(2) - 일시정지 상태에서는 쓰레드가 실행을 할 수 없는 상태가 된다. - 쓰레드가 다시 실행 상태로 넘어가기 위해서는 우선 일시정지 상태에서 실행대기상태로 넘어가야 한다.(3) 아래는 쓰레드의 상태를 정리한 표이다. 상태 Enum 설명 객체생성 NEW 쓰레드 객체 생성, 아직 start() 메서드 호출 전의 상태 실행대기 RUNNABLE 실행 상태로 언제든지 갈 수 있는 상태 일시정지 WAITING 다른 쓰레드가 통지(notify) 할 때 까지 기다리는 상태 일시정지 TIMED..