본문 바로가기

TIL

[TIL] 🌱 2023.03.21 - 함수적 인터페이스

🛹 목표

목표 난이도 달성 여부
이펙티브 자바 ITEM 3, 4, 5, 6
- private 생성자나 열거 타입으로 싱글턴임을 보증하라
- 인스턴스를 막으려거든 private 생성자를 사용하라
- 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
- 불필요한 객체 생성을 피하라
😖 ✔️
알고리즘 문제풀이<MST 관련> 🥺 ✔️

📋 공부 내용 & 기록

표준 API의 함수적 인터페이스

 

[Java/자바] - Supplier<T> interface

Supplier<T> interface 안녕하세요, 이번시간에 알아볼 함수형 인터페이스는 Supplier<T>...

blog.naver.com

함수형 인터페이스 중 Supplier를 쓰면 미리 만들지 않고, 필요할 때 만들어 제공할 수 있다.

종류 추상 메소드 특징 메소드
Consumer 매개값 O, 리턴 값 X accept() 메소드
Supplier 매개값 X, 리턴 값 O getXXX() 메소드
Function 매개값 O, 리턴 값 O
주로 매개값을 리턴값으로 매핑(타입 변환)
applyXXX() 메소드
Operator 매개값 O, 리턴 값 O
주로 매개값을 연산하고 결과를 리턴
applyXXX() 메소드
Predicate 매개값 O, 리턴타입은 Boolean
매개값을 조사해서 true/false를 리턴
testXXX() 메소드

함수형 인터페이스를 왜 사용할까?[참조]

 

Java8 Supplier을 활용하여 Lazy Evaluation 사용하기

모던 자바 (자바8) 못다한 이야기 - 05 Supplier, The Master of Lazy Evaluation를 보고 Lazy Evaluation에 대해서 정리를 한번 해본다.

leoheo.github.io

-> 함수형 인터페이스는 1개의 추상 메서드를 가지고 있는 인터페이스를 의미한다. 자바의 람다 표현식이 이 함수 인터페이스로만 사용가능하다. 즉, 함수를 변수화할 수 있다는 의미이다. 변수로 다룰 경우 직접 계산하지 않아도 된다는 장점이 있는데 이를 Lazy Evaluation이라고 한다.

 

직렬화와 역직렬화[참조]

직렬화 : 메모리를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것

역직렬화 : 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것

 

[Java] 직렬화와 역직렬화

java-study에서 스터디를 진행하고 있습니다. 데이터 직렬화와 역직렬화 데이터 직렬화 메모리를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것이다. 데이터 역직렬

steady-coding.tistory.com

직렬화 사용 이유 : 사용하고 있는 데이터를 파일 저장 혹은 데이터 통신에서 파싱할 수 있는 유의미한 데이터를 만들기 위함

직렬화가 필요한 이유 : int, float, char 등 값 형식 데이터들은 스택에 저장이 되고 직접 접근이 되지만, 객체와 같은 참조 형식 데이터는 힙에 메모리가 할당되고, 스택에서 해당 힙 메모리를 참조하는 형식이다. 즉, 주소값이 저장이 되게 되는데, 외부에서는 이 주소값으로 아무것도 할 수 없다. 따라서 주소값이 가지는 데이터를 유의미한 데이터를 변환하여 저장하기 위해 직렬화를 한다.

 

ITEM5 핵심정리

클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 싱글턴과 정적 유틸리티 클래스는 사용하지 않는 것이 좋다. 이 자원들을 클래스가 직접 만들게 해서도 안된다. 대신 필요한 자원을(혹은 그 자원을 만들어주는 팩토리를) 생성자에 (혹은 정적 팩토리나 빌더에) 넘겨주자. 의존 객체 주입이라 하는 이 기법은 클래스의 유연성, 재사용성, 테스트 용이성을 개선해준다.