🛹 목표
목표 | 난이도 | 달성 여부 |
이펙티브 자바 ITEM 3, 4, 5, 6 - private 생성자나 열거 타입으로 싱글턴임을 보증하라 - 인스턴스를 막으려거든 private 생성자를 사용하라 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 - 불필요한 객체 생성을 피하라 |
😖 | ✔️ |
알고리즘 문제풀이<MST 관련> | 🥺 | ✔️ |
📋 공부 내용 & 기록
표준 API의 함수적 인터페이스
함수형 인터페이스 중 Supplier를 쓰면 미리 만들지 않고, 필요할 때 만들어 제공할 수 있다.
종류 | 추상 메소드 특징 | 메소드 |
Consumer | 매개값 O, 리턴 값 X | accept() 메소드 |
Supplier | 매개값 X, 리턴 값 O | getXXX() 메소드 |
Function | 매개값 O, 리턴 값 O 주로 매개값을 리턴값으로 매핑(타입 변환) |
applyXXX() 메소드 |
Operator | 매개값 O, 리턴 값 O 주로 매개값을 연산하고 결과를 리턴 |
applyXXX() 메소드 |
Predicate | 매개값 O, 리턴타입은 Boolean 매개값을 조사해서 true/false를 리턴 |
testXXX() 메소드 |
함수형 인터페이스를 왜 사용할까?[참조]
-> 함수형 인터페이스는 1개의 추상 메서드를 가지고 있는 인터페이스를 의미한다. 자바의 람다 표현식이 이 함수 인터페이스로만 사용가능하다. 즉, 함수를 변수화할 수 있다는 의미이다. 변수로 다룰 경우 직접 계산하지 않아도 된다는 장점이 있는데 이를 Lazy Evaluation이라고 한다.
직렬화와 역직렬화[참조]
직렬화 : 메모리를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것
역직렬화 : 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것
직렬화 사용 이유 : 사용하고 있는 데이터를 파일 저장 혹은 데이터 통신에서 파싱할 수 있는 유의미한 데이터를 만들기 위함
직렬화가 필요한 이유 : int, float, char 등 값 형식 데이터들은 스택에 저장이 되고 직접 접근이 되지만, 객체와 같은 참조 형식 데이터는 힙에 메모리가 할당되고, 스택에서 해당 힙 메모리를 참조하는 형식이다. 즉, 주소값이 저장이 되게 되는데, 외부에서는 이 주소값으로 아무것도 할 수 없다. 따라서 주소값이 가지는 데이터를 유의미한 데이터를 변환하여 저장하기 위해 직렬화를 한다.
ITEM5 핵심정리
클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 싱글턴과 정적 유틸리티 클래스는 사용하지 않는 것이 좋다. 이 자원들을 클래스가 직접 만들게 해서도 안된다. 대신 필요한 자원을(혹은 그 자원을 만들어주는 팩토리를) 생성자에 (혹은 정적 팩토리나 빌더에) 넘겨주자. 의존 객체 주입이라 하는 이 기법은 클래스의 유연성, 재사용성, 테스트 용이성을 개선해준다.
'TIL' 카테고리의 다른 글
[TIL] 🌱 2023.03.31 - Mock? MockBean? (0) | 2023.03.31 |
---|---|
[TIL] 🌱 2023.03.27 - Rest Client Test (0) | 2023.03.27 |
[TIL] 🌱 2023.03.20 - Objects.requireNonNull() (0) | 2023.03.20 |
[TIL] 🌱 2023.03.16 - 빌더 패턴 (0) | 2023.03.16 |
[TIL] 🌱 2023.03.15 - 뷰 엔드포인트 테스트 정의 (0) | 2023.03.15 |