Java
-
Java 9~17 까지의 변화 정리Java 2024. 7. 3. 20:35
Java 9컬렉션 팩토리 메서드(불변 컬렉션)List.of()Map.of()Set.of()기존의 방식List before = Arrays.asList(1, 2, 3);orList nums = new ArrayList();nums.add(1);nums.add(2);nums.add(3); 위 방식은 내부적으로 불필요한 객체 할당으로 인한 성능 문제,혹은 코드가 길어지는 문제가 있었다.of() 메서드를 통해 간편한 컬렉션 생성이 가능해졌다.이렇게 생성된 객체는 불변 값을 가진다. Arrayscompare(a, b) : 두 배열의 논리적인 순서 비교mismatch(a, b) : 두 배열의 원소가 맞지 않는 첫 index 반환Java 10var 로컬 변수 타입 추론컴파일러가 변수를 초기화하는 시점에 변수의 타입을..
-
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..