JAVA
[JAVA] JVM 동작원리 및 기본개념(JVM Internal)
[JAVA] JVM 동작원리 및 기본개념(JVM Internal)
2022.12.07JAVA를 이용해서 프로그래밍을 하고 있는 사람으로서 JAVA의 간단한 탄생배경과 JAVA의 시작과 끝이라고 할 수 있는 JVM을 한번 짚고 넘어가려고 한다. 목차 1. JAVA 탄생 배경 2. 자바 코드(JAVA Code) 실행 과정 3. JVM 동작원리 및 기본개념 3-1. 클래스 로더 (Class Loader) 3-2. 런타임 데이터 영역(Runtime Data Area) 3-3. 실행 엔진(Execution Engine) JAVA 탄생배경 JAVA는 썬 마이크로시스템즈의 제임스 고슬링이라는 사람과 다른 연구원들이 개발한 프로그래밍 언어이다. 1991년 그린 프로젝트라는 이름으로 시작해 1995년에 발표가 되었다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했는데 아이러니하게도 현재..
스트림의 그룹화와 분할
스트림의 그룹화와 분할
2022.12.02스트림의 그룹화와 분할 partitioningBy()는 스트림을 2분할한다. Collectors에 있는paritioningBy() 메서드는 스트림을 2분할 한다. 이렇게 두가지 오버로드 된 메서드가 있다. groupingBy()는 스트림을 n분할한다. Collectors에 있는 groupBy() 메서드는 스트림을 n분할 한다. collect()는 partitioningBy()나 groupingBy()를 같이 사용해서 스트림을 분할해서 나눠놓고, 거기에 대한 통계정보라던가, 이런 것들을 적용할 수 있다. 이것이 바로 collect()의 장점이다. 스트림의 분할 - partitioningBy() 스트림의 요소를 2분할 stuStream을 .collect를 하고, partitioningBy()를 이용해서 성별..
collect()와 Collectors
collect()와 Collectors
2022.11.30collect()와 Collectors collect()는 Collector를 매개변수로 하는 스트림의 최종연산 collect()는 Collector라는 인터페이스를 매개변수로 하는 스트림의 최종 연산이다. reduce()와 collect()는 둘다 최종연산이다. 이 둘의 차이에 대해 궁굼할 수 있다. reduce()는 리듀싱, collect()는 그룹별리듀싱 이러한 차이가 있다. reduce의 리듀싱은 그냥 전체에 대한 리듀싱이고, collect()는 그룹별로 나눠서 리듀싱이 가능하다. 스트림 요소 전체에 대해 리듀싱을 할 때는 reduce()를 사용하면 되고, 스트림 요소를 그룹별로 나눠서 리듀싱 할 때는 collect()를 사용하면 된다. collect()는 2개가 있다. collect(Collec..
스트림의 최종연산
스트림의 최종연산
2022.11.25Stream의 연산에는 중간연산과 최종연산이 있다. 중간연산은 n번 가능하다. 중간연산은 스트림을 반환한다. limit(), skip(), filter(), distinct(), map(), faltMapt(), peek() 최종연산은 1번 가능하다. 최종연산은 스트림의 요소를 소모한다. 그래서 최종연산을 하고 나면 스트림이 닫힌다. 최종연산은 int, boolean, Optional 등을 반환한다. forEach(), allMatch(), anyMatch(), noneMatch(), reduce(), collect(), findFirst(), findAny() 스트림의 최종연산 - forEach() 스트림의 모든 요소에 지정된 작업을 수행 - forEach(), forEachOrdered() forEa..
Optional<T>
Optional<T>
2022.11.22Optional T 타입 객체의 래퍼클래스 - Optional Optional는 래퍼클래스다. 이렇게 T타입의 참조변수를 가지고 있다. Integer라든가, Long 같은것들이 래퍼클래스다.(기본형 타입을 객체로 사용해야 할 때 사용) 각각 Integer타입과 Long타입을 가지고 있는 클래스를 래퍼클래스라고 한다. Optional 도 지네릭 T 덕분에 어떤 타입이든지 저장할 수 있다. 클래스 안에 T타입의 참조변수를 가지고 있다. 그러니까, 모든 종류의 객체를 저장할 수 있다. 그리고 null도 저장할 수 있다. 이것이 왜 필요하냐면, 1. null을 직접 다루는 것은, 위험하다. (NullpointerException) 그래서 Optional에 담아서 간접적으로 null을 다루기 위함. 2. null..
스트림의 중간연산(2)
스트림의 중간연산(2)
2022.11.19스트림의 중간연산 저번시간에는 skip() - 건너뛰기 limit() - 자르기, dstinct() - 중복제거 filter() - 조건식에 맞지 않는 것을 제거 sorted() - 정렬 이러한 것들을 알아보았다. 이번시간에는 map(), peek(), flatmap() 에 대해서 알아볼 것이다. map() - 스트림 요소 변환 peek() - forEach() 와 비슷한데, forEach()는 최종연산이지만, peek()는 중간연산이다. flatmap() - map과 거의 비슷한 변환이다. 스트림의 스트림을 -> 스트림으로 바꿔준다. 자세히 알아보도록 하자. 스트림 요소 변환하기 - map() map() 메서드는 매개변수로 Function을 받는다. Function이란? 어떤 타입 T를 넣으면 그 결과..