자바는 하위 호환성(backward compatible)이 매우 높다. java 8 프로그램이 java 8~ 이상에서 실행되도록 보장한다. LTS(Long Term Support) 장기 지원 버전인 8, 11, 17에 대해 조사해보았다. java 8 Lambda Expression 메소드를 하나의 식으로 표현한 것으로, 메소드를 하나의 변수 처럼 사용이 가능하다 인스턴스::메소드명 으로 메소드 참조가 가능 새로운 날짜/시간 API (LocalDateTime, …) Interface Default Method 추가 인터페이스에 default / static 메소드 정의 가능 default는 오버라이딩이 가능하지만 static은 불가능하다 PermGen 영역 삭제 ->Metaspace로 대체되었다 런타임 시..

위와 같이 RGB 코드 배열을 갖는 Color라는 객체가 있을 때, Color 객체 리스트의 각 RGB 코드를 순차적으로 모두 출력해보자! 1. .map()은 단일 스트림 안의 원소를 원하는 특정 형태로 매핑시킨 후 스트림으로 변환하는 중간 연산을 담당한다. 따라서, map을 사용하게되면 2중 Stream의 형태로 각 코드에 접근하게 된다. 2. .flatMap()은 스트림의 형태가 배열과 같을 때, 모든 원소를 단일 원소 스트림으로 반환할 수 있다. 따라서 1차원 배열의 스트림으로 차원을 낮춰서 접근할 수 있다. 그림으로 표현하면 아래와 같이 이해할 수 있다. 스트림의 형태가 배열인 경우나 입력된 값을 또 다시 스트림의 형태로 반환하고자 할 때는 flatMap을 유용하게 사용할 수 있다! 참고 링크

HashMap Map 인터페이스를 구현한 클래스 중 성능이 제일 좋음 key, value에 null을 입력할 수 있음 Multi-Thread 환경에서 동시에 수정을 시도하는 경우 예상치 못한 결과가 발생할 수 있음 resize() 함수를 통해 새로운 배열(newTab)을 만들어 copy 하는 방식으로 리사이징 ConcurrentHashMap HashMap을 thread-safe 하도록 만든 클래스 key, value에 null을 허용하지 않음 Thread-safe 보장 HashTable과 synchorined map보다 더 나은 성능을 내는데, 이는 map의 일부에만 Lock을 걸기 때문! 읽기(검색) 작업에는 여러 Thread가 동시에 읽을 수 있지만, 쓰기 작업에는 특정 세그먼트 or 버킷에 대한 L..

Garbage Collector Java에서는 개발자가 프로그램 코드로 메모리를 명시적으로 해제하지 않기 때문에 Garbage Collector가 더 이상 필요 없는 Garbage 객체를 찾아 지우는 작업을 한다 수행 과정 Heap 내의 객체 중에서 Garbage(GC 대상 객체)를 찾아낸다 찾아낸 Garbage(GC 대상 객체)를 처리(finalization)해서 할당되었던 Heap의 메모리를 회수한다 전제 조건 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다 오래된 객체(Old Generation)에서 젊은 객체(Young Generation)로의 참조는 아주 적게 존재한다 Young 영역(Yong Generation 영역): 새롭게 생성한 객체의 대부분이 여기에 위치한다. 대부..

Builder 패턴이란? 생성 패턴(Creational Pattern) 중 하나 생성 패턴 → 인스턴스를 만드는 절차를 추상화하는 것 무엇이 생성되고, 어떻게 생성되며, 언제 생성할 것인지 결정하는 데 유연성을 확보하기 위함 생성과 표현 코드를 분리 복합 객체를 생성하는 절차를 세밀하게 나눌 수 있음 별도의 Builder 클래스를 만들어 필수 값에 대해서는 생성자를 통해, 선택적인 값들에 대해서는 메소드를 통해 step-by-step으로 값을 입력받은 후, build() 메소드를 통해 최종적으로 하나의 인스턴스를 리턴하는 방식 클라이언트 코드에서 필요한 객체를 직접 생성하는 대신, 그 전에 필수 인자들을 전달하여 빌더 객체를 만든 뒤, 빌더 객체에 정의된 설정 메서드들을 호출하여 인스턴스를 생성 장점 생..

Stateless Stateful state? 상태; 과거의 동작(데이터 송수신 및 처리) 결과로, 서버의 현재 상태에 따라 클라로부터의 요구(request)마다 취하는 응답(response)이 달라질 수 있음 연결 지속성이 가장 큰 이슈 (+) 상태 정보를 사용하면 현재의 상태에 따라 약속된 명령에 대해 신속히 응답할 수 있으며, 클라와 주고받을 메세지의 크기도 줄일 수 있음 (+) 상태 정보는 과거의 정보이므로 클라가 이전에 보낸 메세지에서 오류가 발생했다면, 틀린 상태로 가 있을 수 있음 정의 - 단방향 통신 - 통신의 동작 상태를 정의하지 않고 항상 클라로부터의 독립적인 request에 의해 서비스를 제공하는 서버 - 양방향 통신 - 서버가 클라와의 통신 상태(state)를 계속 추적하며 상태 정..

Memcached Redis 출생 2003년 2009년 지향점 새로운 기능 보다 안정성과 최적화에 중점 다양한 기능 제공. 더 강력하지만 좀 더 복잡함 유사점 - in-memory 위에서 동작하는 key-value 스토리지로 둘다 noSQL에 속하는 데이터 관리 솔루션 - key-value 데이터 모델을 기반으로 동작 - 모든 데이터는 메모리 안에 있으며 캐시 관점에서 매우 유용 - 정렬에서 성능에 극적으로 영향을 끼침(select문에서 가장 많은 비용을 차지하는 order를 메모리로 접근하기 때문에 매우 빠름) 차이점 - 키의 이름 250바이트로 제한 - 캐시 값의 용량은 1메가바이트로 제한 - 오로지 문자열만(string) 캐시 가능 - 멀티 스레드 - 최소 알고리즘(LRU)를 사용하여 새 데이터와 ..