분류 전체보기
-
Item 5: Prefer dependency injection to hardwiring resources독서/Effective Java 2021. 12. 4. 19:48
맞춤법 검사기는 사전을 사용해 해당 맞춤법이 올바른지를 체크한다. 정적 유틸리티 클래스(Item 4)로 생성한다면 다음과 같다. // Inappropriate use of static utility - inflexible & untestable! public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} // Noninstantiable public static boolean isValid(String word) { ... } public static List suggestions(String typo) { ... } } 싱글턴으로 구현한다면?(Item 3) // Inappropria..
-
Item 4: Enforce noninstantiability with a private constructor독서/Effective Java 2021. 12. 4. 19:48
Private 생성자로 비인스턴스화를 강제하자. 정적 메서드와 정적 필드만을 담은 유틸리티 클래스는 객체 지향과 거리도 멀지만 유효성 체크, 패턴 매칭, UUID 검증 등 쓰임새가 있다. 정적 메서드와 정적 필드만을 담은 클래스의 예시 java.lang.Math, java.util.Arrays java.util.Collections 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리) 모음 final 클래스와 관련한 메서드들의 모음 (final 클래스를 상속해 하위 클래스에 메서드를 넣는 건 불가능하기 때문) 이와 같이 정적 멤버, 메소드만 존재하는 클래스의 경우 인스턴스화해서 사용하는 것이 아닌, 변하지 않고 사용되는 공용 클래스로 사용된다. 하지만, 생성자를 명시하지 않으면 컴파일러..
-
Item 3: Enforce the singleton property with a private constructor or an enum type독서/Effective Java 2021. 12. 4. 19:48
private 생성자나 열거 타입으로 싱글턴임을 보증하자 싱글톤? 정확히 한 번 인스턴스화되는 클래스 일반적으로 함수(Item 24)와 같은 상태 비저장 개체, 본질적으로 고유한 시스템 구성 요소를 의미함. 단점 클래스를 싱글톤으로 만들면 해당 유형의 역할을 하는 인터페이스를 구현하지 않는 한 싱글톤에 대한 Mocking을 대체하는 것이 불가능하고, 이 때문에 클라이언트를 테스트하기 어렵다. 싱글톤을 구현하는 두 가지 일반적인 방법 1. public static final 필드 변수 제공 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public void leaveTheBuildin..
-
Item 2: Consider a builder when faced with many constructor parameters독서/Effective Java 2021. 12. 4. 18:36
시작 영양 성분 표시를 자동으로 저장하는 서비스를 제공한다고 가정해보자. 먼저, 영양 성분 표시를 위한 데이터 클래스를 만들 것이다. 기획자가 샘플을 보여줬는데 샘플에는 다음과 같은 필드들이 존재했다. 1회 제공량, 용기당 1회 제공량, 1회 제공량당 칼로리 - 필수 필드 총 지방, 포화 지방, 트랜스 지방, 콜레스테롤, 나트륨 + 20개 이상의 필드 - 선택적(Optional) 필드, 기본값은 0 이제 기본적인 클래스를 만들었다. public class NutritionFacts { private final int servingSize; // (mL) required private final int servings; // (per container) required private final int ca..
-
Item 1. Consider static factory methods instead of constructors독서/Effective Java 2021. 12. 4. 18:21
인스턴스를 생성하는 다양한 방법들 생성자 사용 빌더 사용(추후 아이템에 나온다.) 정적 팩토리 메서드 사용 정적 팩토리 메서드란? 해당 클래스의 인스턴스를 반환하는 메소드라고 보면 된다. Ex) boolean(primitive) 타입 -> Boolean(Object) 타입으로 변환 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 정적 팩토리 메소드 != 팩토리 메소드 패턴 정적 팩토리 메서드는 디자인 패턴에 직접적으로 대응되는 것이 없다. 정적 팩토리 메소드를 사용했을 때 생성자보다 나은 장점들 (1) 이름을 가질 수 있다. 생성자에 대한 parameter가 그 자체로 반환되는 객체를 설명하지 않는 ..
-
[Spark Source code 훑어보기] 소스 코드 ImportDev/Spark 2021. 1. 25. 02:02
* 평어체로 작성되었습니다. Spark? Java, Scala, Python, R에서 사용할 수 있는 고 수준의 API를 제공하는 대규모 데이터 처리를 위한 통합 분석 엔진이다. spark.apache.org/docs/latest/ Overview - Spark 3.0.1 Documentation Spark Overview Apache Spark is a unified analytics engine for large-scale data processing. It provides high-level APIs in Java, Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a..
-
[Head First Java] Chapter 4 - 객체의 행동Dev 2021. 1. 24. 02:33
* 해당 포스트는 "Head First Java" 책을 읽고 난 이후의 정리 내용입니다. 자세한 내용은 "Head First Java" 책을 통해 확인해주세요. * 평어체로 작성되었습니다. 상태는 행동에 영향을, 행동은 상태에 영향을 지난 챕터들에서 Object에는 각각 인스턴스 변수(상태), 메소드(행동)이 있다는 것을 코드로 확인했다. 이를 다시 한 번 보자. 해당 클래스들에서 상태/행동을 찾아보자. class Item { // 상태들을 나타냄 private final long seq; private String name; private int sellCnt; // 최초 생성 당시의 상태, 행동을 설정하는 생성자 public Item(long seq, String name){ this.seq = se..
-
[Head First Java] Chapter 2 - 객체 마을로의 여행Dev 2021. 1. 20. 17:20
* 해당 포스트는 "Head First Java" 책을 읽고 난 이후의 정리 내용입니다. 자세한 내용은 "Head First Java" 책을 통해 확인해주세요. 객체(Object)에 대해 다루는 챕터 절차적으로 실행했을 때 조건으로 행동을 분기해서 사용하는 방식에서 벗어나 더보기 절차적 관점에서의 행동 매핑 public static void rotate(String shapeType){ switch(shapeType){ case "AMOEBA": System.out.println("아메바 회전!"); // HIF 소리 출력 break; case "CIRCLE": System.out.println("원형 회전!"); // AIF 소리 출력 break; case "SQUARE": System.out.prin..