[CS 스터디] Stream,Lamda 등..

한주영·2023년 3월 8일
0

스터디

목록 보기
2/6

Stream

스트림은 데이터를 추상화하여 다루므로 다양한 방식으로 저장된
데이터를 읽고 쓰기위한 다양한 방법을 제공

배열이나 컬렉션뿐만아니라 파일에 저장된 데이터도 모두 같은방법으로 다룰수있게됨

스트림 API의 특징

1.내부반복자를 통한 작업을 수행함
2. 재사용할수없고 한번만 사용가능
3.원본데이터를 변경하지않음
4.필터-맵 기반의 API를 사용하여 지연 연산을 통해 성능을 최적화함

스트림 API의 동작 흐름

1.스트림의 생성
2.스트림의 중간연산(변환)
-필터링
filter(), distinct()
-변환
map(), flatMap()
-제한
limit(), skip()
-정렬
sorted()
-연산결과확인
peek()
3.스트림의 최종 연산(사용)
-출력
forEach()
-소모
reduce()
-검색
findFirst(), findAny()
-검사
anyMatch(), allMatch(), noneMatch()
-통계
count(), min(), max()
-연산
sum(), average()
-수집
collect()

Lambda

람다표현식 이란?
간단히 말해 메소드를 하나의 식으로 표현한것

--기존 메소드

int min(int x, int y){
    return x<y ? x:y
}

람다 표현식

(x,y)-> x<y ? x:y

``

람다표현식 작성

(매개변수 목록)-{함수 몸체}

함수형 인터페이스

참조 변수의 타입을 함수형 인터페이스라고 함
추상클래스와는 달리 단 하나의 추상 메서드만 가져야한다

메소드 참조

람다 표현식이 단 하나의 메서드만 호출하는 경우에 해당 람다 표현식에서
불필요한 매개변수를 제거하고 사용할수있도록 해준다

클래스이름:::메소드이름
또는
참조변수이름:: 메소드이름

Reflection

자바코드 자체를 추상화아여 구체적인 객체정보를 알지 못하더라도
클래스 정보들을 접근할수있도록 하는 자바API

이를 통해 동적 객체선언, 동적 메서드 호출 기능 사용이 가능하다

Dynamic Proxy

Runtime(애플리케이션이 실행되는중)에 Interface를 구현하는
클래스 혹은 인스턴스를 만들어내는것

JAVA 컬렉션

hashcode()

hashcode는 일반적으로 각 객체의 주소값을 변환하여 생성한
객체의 고유한 정수값
두 객체가 동일한 객체인지 비교할때 사용할수있다

사용하는 이유?
객체를 비교할때 드는 비용을 낮추기 위해서
자바에서 2개의 객체가 같은지 비교할때 equals를 사용하는데
여러 객체를 비교할때 해당 메서드를 사용하면 많은 시간이 소요된다
자바에서 hashCode는 Integer 이므로
hashCode를 이용하여 객체를 비교하면 equals를 이용하는것보다
시간이 단축된다

equals()

2개의 객체가 동일한지 검사하기 위해 사용
2개의 객체가 참조하는것이 동일한지를 확인하는것
이는 동일성을 비교하는 것임
2개의 객체가 가리키는 곳이 동일한 메모리 주소일 경우에만
동일한 객체가 된다

Thread Safe & Syncronized

스레드란?
프로세스 내에서 실제로 작업을 수행하는 주체를 의미
모든 프로세스는 한개 이상의 스레드가 존재
두개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스

Thread Safe

스레드 프로그래밍에서 여러 스레드로부터 동시에 접근이 이루어져도
프로그램의 실행에 문제가 없는 것을 의미
이를 위한 방법으로 한쓰레드가 특정 작업을 끝마치기 전까지
다른쓰레드에 의해 방해받지 않도록 임계영역과 잠금의 개념이 도입

Syncronized(스레드의 동기화)

한 스레드가 진행중은 작업을 다른 스레드가 간섭하지 못하도록
막는것

Syncronized키워드를 이용하면 해당 메소드나 블록을
한번에 한 스레드씩 수행하도록 보장

profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글