기록이 힘이다.

아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라. 본문

JAVA

아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라.

dev22 2023. 1. 3. 17:35
728x90

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

 

Creating Extensible Applications (The Java™ Tutorials > The Extension Mechanism > Creating and Using Exten

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

 

완벽 공략 5. 리플렉션

reflection

 

-클래스로더를 통해 읽어온 클래스 정보(거울에 반사 된 정보)를 사용하는 기술

-리플렉션을 사용해 클래스를 읽어오거나, 인스턴스를 만들거나, 메소드를 실행하거나, 필드의 값을 가져오거나 변경하는 것이 가능하다. 

-언제 사용할까?

  -특정 애노테이션이 붙어있는 필드 또는 메소드 읽어오기(JUnit, Spring)

  -특정 이름 패턴에 해당하는 메소드 목록 가져와 호출하기 (getter, setter)

https://docs.oracle.com/javase/tutorial/reflect/

 

Trail: The Reflection API (The Java™ Tutorials)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com