들어가기에 앞서, 중첩 클래스란 다른 클래스안에 정의된 클래스를 말한다. 중첩 클래스의 종류로는, 정적 멤버 클래스, 멤버 클래스, 익명 클래스, 지역 클래스 로 총 네 가지가 있다. 이번 아이템에서는 각각의 중첩 클래스의 특징을 살펴보자. 먼저 중첩 클래스를 왜 사용하는가를 보자. 내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할 수 있다. 서로 관련 있는 클래스들을 논리적으로 묶어, 코드의 캡슐화를 증가시킬 수 있다. 외부에서 내부 클래스에 접근할 수 없으므로 코드의 복잡성을 줄일 수 있다. 또한, 외부 클래스의 복잡한 코드를 내부 클래스로 옮겨 코드 복잡성을 줄일 수 있다. 정적 멤버 클래스 해당 클래스는 다른 클래스 안에 선언되고, 바깥 클래스의 private 멤버에도 접근할 수 있다는 점을 제..
개발을 하다보면 인스턴스 필드들만 모아놓는 목적만 가진 아래와 같은 클래스를 구성하는 경우가 있다. public class Point{ public double x; public double y; } 이유는, 이러한 클래스 형태로 구현했을 때는 클라이언트에서 필드에 직접 접근할 수 있으므로 캡슐화의 이점을 제공하지 못한다는 단점이 있다. 또한 좀 더 알아보면, API를 수정하지 않고는 내부 표현을 바꿀 수 없다. public 필드로만 구성되어 있기 때문에 내부 표현을 변경하기 위해서는 API의 필드를 변경해야 한다. (메소드가 존재할 땐 파라미터에 따라 내부 표현이 변경 가능) 불변식을 보장할 수 없다. 클라이언트에서 직접적으로 필드에 접근하고 있으므로 클라이언트에 의해 언제든지 변경이 가능하다. 외부에..
Cloneable은 어떤 클래스를 복제해도 된다는 사실을 알리기 위해서 만들어진 믹스인 인터페이스(아이템20)이다. Java의 Cloneable 인터페이스를 보면 아무런 메소드가 보이지 않지만 사실 Object의 clone() 메소드의 동작방식을 결정하고 있다. By convention, classes that implement this interface should override Object.clone (which is protetected) with a pulibc method. See {@link java.lang.Object#clone()} for details on overriding this method. 그럼 Cloneable의 목적을 자세히 살펴보자. 다시 말해, Cloneable의 인터..
어떤 시스템을 개발하다면 보면 정적 메서드와 정적 필드만을 담는 클래스를 만들어야 하거나 만들고 싶을 때가 있다. 예를 들면, java.lang.Math와 java.util.Arrays 클래스처럼 기본 타입 값이나 배열에 관련된 메서드들만 모아 둘수도 있다. 아래 코드는 Math 클래스의 일부분이다. public final class Math { private Math() {} public static final double E = 2.7182818284590452354; public static final double PI = 3.14159265358979323846; private static final double DEGREES_TO_RADIANS = 0.017453292519943295; priv..
싱글턴이란 모두가 알고 있듯이, 오직 하나의 인스턴스만을 생성할 수 있는 클래스를 말한다. 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 그 이유는 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 mock 구현으로 대체할 수 없기 때문이다. (이유는? https://bottom-to-top.tistory.com/30 참고) [아이템3] private 생성자나 열거 타입으로 싱글턴임을 보증하라 아이템 3 private 생성자나 열거타입으로 싱글턴임을 보증하라 p.23 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 타입을 인터페이스로 정의한 다음 �� bottom-to-to..
정적 팩터리와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기가 어렵다는 점이 있다. 그럼 이런 선택적 매개변수가 많을 때 클래스는 어떤 식으로 대응을 할까? 점층적 생성자 패턴 사용 점층적 생성자 패턴은 필수 매개변수만 받는 생성자와 선택 매개변수를 받는 생성자 여러개를 모두 두어 클라이언트가 요구하는 사항에 따라 객체를 생성하는 패턴 방식이다. public class NutritionFacts { private final int servingSize; // (mL, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1회 제공량당) 선택 private final int fat; // (g..
- Total
- Today
- Yesterday
- jdk버전
- 자바8
- Effective Java
- 정적팩터리메서드
- java
- Spring
- 이펙티브 자바
- 이펙티브자바
- package-private
- @Lazy
- 생성자
- 빌더 패턴
- ifPresent
- java8
- effectivejava
- 빈 순환 참조
- 팩토리 메소드 패턴
- 연관관계
- junit
- try catch finally
- 점층적 생성 패턴
- 복사 팩토리
- springboot
- 스프링부트
- flatMap
- 인프런
- JPA
- mustache
- try with resources
- 김영한
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |