일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- SQL쿡북
- 알고리즘분석
- DDD
- MariaDB
- jpa
- 이펙티브자바
- 자료구조
- java
- CleanCode
- 자바스터디
- aop
- 스프링부트와AWS로혼자구현하는웹서비스
- 알고리즘
- AWS RDS
- 자바
- 인프런김영한
- 네트워크
- 자바예외
- mysql
- AWS
- 기술면접
- 인덱스
- 이팩티브 자바
- 클린코드
- react
- 혼공SQL
- 인프런백기선
- 이펙티브 자바
- 도메인 주도 개발 시작하기
- vue.js
- Today
- Total
기록이 힘이다.
아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라. 본문
p9, 열거 타입은 인스턴트가 하나만 만들어짐을 보장한다.
p9, 같은 객체가 자주 요청되는 상황이라면 플라이웨이트 패턴을 사용할 수 있다.
p10, 자바 8부터는 인터페이스가 정적 메서드를 가질 수 없다는 제한이 풀렸기 때문에 인스턴스화 불가 동반 클래스를 둘 이유가 별로 없다.
p11, 서비스 제공자 프레임워크를 만드는 근간이 된다.
p12, 서비스 제공자 인터페이스가 없다면 각 구현체를 인스턴스로 만들 때 리플렉션을 사용해야 한다.
p12, 브리지 패턴
p12, 의존 객체 주입 프레임워크
완벽 공략 1. 열거 타입
Enumeration
-상수 목록을 담을 수 있는 데이터 타입.
-특정한 변수가 가질 수 있는 값을 제한할 수 있다. 타입-세이프티(Type-Safety)를 보장할 수 있다.
-싱글톤 패턴을 구현할 때 사용하기도 한다.
-질문1) 특정 enum 타입이 가질 수 있는 모든 값을 순회하며 출력하라.
-질문2) enum은 자바의 클래스처럼 생성자, 메소드, 필드를 가질 수 있는가? 가질 수 있다.
-질문3) enum의 값은 == 연산자로 동일성을 비교할 수 있는가? 비교할 수 있다.
-과제) enum을 key로 사용하는 Map을 정의하세요. 또는 enum을 담고 있는 Set을 만들어 보세요. EnumSet, EnumMap
완벽 공략 2. 플라이웨이트 패턴
Flyweight(가벼운 패턴)
-객체를 가볍게 만들어 메모리 사용을 줄이는 패턴.
-자주 변하는 속성(또는 외적인 속성, extrinsit)과 변하지 않는 속성(또는 내적인 속성, intrinsit)을 분리하고 재사용하여 메모리 사용을 줄일 수 있다.
완벽 공략 3. 인터페이스에 정적 메소드
자바 8과 9에서 주요 인터페이스의 변화
-기본 메소드(default method)와 정적 메소드를 가질 수 있다.
-기본 메소드
-인터페이스에서 메소드 선언 뿐 아니라, 기본적인 구현체까지 제공할 수 있다.
-기존의 인터페이스를 구현하는 클래스에 새로운 기능을 추가할 수 있다.
-정적 메소드
-자바 9부터 private static 메소드도 가질 수 있다.
-단, private 필드는 아직도 선언할 수 없다.
질문1) 내림차순으로 정렬하는 Comparator를 만들고 List<Integer>를 정렬하라.
질문2) 질문1에서 만든 Comparator를 사용해서 오름차순으로 정렬하라.
완벽 공략 4. 서비스 제공자 프레임워크
확장 가능한 애플리케이션을 만드는 방법
-주요 구성 요소
-서비스 제공자 인터페이스 (SPI)와 서비스 제공자( 서비스 구현체)
-서비스 제공자 등록 API(서비스 인터페이스의 구현체를 등록하는 방법)
-서비스 접근 API(서비스의 클라이언트가 서비스 인터페이스의 인스턴스를 가져올 때 사용하는 API)
-다양한 변형
-브릿지 패턴
-의존 객체 주입 프레임워크
-java.util.ServiceLoader
-https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html
-https://docs.oracle.com/javase/tutorial/ext/basics/spi.html
완벽 공략 5. 리플렉션
reflection
-클래스로더를 통해 읽어온 클래스 정보(거울에 반사 된 정보)를 사용하는 기술
-리플렉션을 사용해 클래스를 읽어오거나, 인스턴스를 만들거나, 메소드를 실행하거나, 필드의 값을 가져오거나 변경하는 것이 가능하다.
-언제 사용할까?
-특정 애노테이션이 붙어있는 필드 또는 메소드 읽어오기(JUnit, Spring)
-특정 이름 패턴에 해당하는 메소드 목록 가져와 호출하기 (getter, setter)
https://docs.oracle.com/javase/tutorial/reflect/
'JAVA' 카테고리의 다른 글
아이템3. 생성자나 열거 타입으로 싱글턴임을 보증하라. (0) | 2023.01.25 |
---|---|
Unchecked Exceptions RuntimeException (0) | 2023.01.19 |
Process 'command 'npm.cmd'' finished with non-zero exit value 1 (0) | 2023.01.17 |
Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.1. (0) | 2023.01.12 |
아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라. (0) | 2022.12.29 |