2021년 10월 14일 TIL
Map.merge
-
putAll
- putAll은 겹치는 키값이 있으면 파라미터로 전달된 map의 값으로 value가 바뀐다.
-
put
- Map에 삽입하는 메서드
-
putIfAbsent / computIfAbsent
-
공통점
- putIfAbsent와 computeIfAbsent는 둘 다 Map에 key가 없을 때만 적용되는 메소드이다.
차이점
- putIfAbsent는 value를 바로 가지지만 computeIfAbsent는 Function을 통한 계산된 value를 가진다.
- putIfAbsent의 value에 메소드호출이 온다면 Map에 key값이 중복됐을 때, 값은 저장되지 않아도 메소드는 호출된다. -> 메소드 호출 비용이 비싸다면 성능이 저하된다.
- computeIfAbsent의 Function은 key값이 중복됐을 때 실행되지 않고, key 값이 발견되지 않았을 때만 실행된다.
-
-
computeIfPresent
- 키가 존재하는 경우에만 실행 BiFunction<T, U, R>
-
compute
- 키 존재 유무에 관계없이 무조건 실행 BiFunction<T, U, R>
-
merge
- 인자를 세개 받으며,
- 첫번째는 key
- 두번째는 key가 없을 경우 초기값
- 세번째는 key 존재 시 remapping할 BiFunction<T, U, R>
- 리턴값이 null이면 삭제
- 인자를 세개 받으며,
-
getOrDefault
- key가 존재하면 value 반환, 없으면 지정한 default 반환
Comparable Comparator (익명클래스)
둘 다 비교를 위한 인터페이스이나, Comparable은 비교의 주체가 자신이며, Comparator는 비교의 주체가 입력받는 매개변수 두개라는 차이점이 있다.(compare와 compareTo 메서드를 오버라이딩한다.)
익명 클래스
한번만 객체로 사용하는데에 사용되는 클래스를 굳이 정의하지 않고 사용하는 것.
함수형 프로그래밍
대입문이 없는 프로그래밍 - Clean Code
Side Effect가 없는 순수 함수를 1급 객체로 간주하여, 파라미터로 넘기거나 반환값으로 사용할 수 있으며 참조 투명성을 지킬 수 있다.
순수 함수란?
Side Effect를 제거한 함수들을 의미한다.
Memory or I/O의 관점에서 Side Effect가 없는 함수
함수의 실행이 외부에 영향을 끼치지 않는 함수
Side Effect란?
변수의 값이 변경됨
자료 구조를 제자리에서 수정함
객체의 필드값을 설정함
예외나 오류가 발생하며 실행이 중단됨
콘솔 또는 파일 I/O가 발생함
순수 함수를 사용했을 때의 장점?
- 함수 자체가 독립적이며, 부수 효과가 없기 때문에 Thread에 안전성을 보장받는다.
- 병렬처리를 동기화 없이 진행 가능
1급 객체란?
- 변수나 데이터 구조 안에 담을 수 있다.
- 파라미터로 전달할 수 있다.
- 반환값으로 사용될 수 있다.
- 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다.