Home
Youngho's Devlog
Cancel

[이펙티브자바] 아이템23-태그 달린 클래스보다는 클래스 계층구조를 활용하라

// 코드 23-1 태그 달린 클래스 - 클래스 계층구조보다 훨씬 나쁘다! (142-143쪽) class Figure { enum Shape { RECTANGLE, CIRCLE }; // 태그 필드 - 현재 모양을 나타낸다. final Shape shape; // 다음 필드들은 모양이 사각형(RECTANGLE)일 때만 ...

[이펙티브자바] 아이템22-인터페이스는 타입을 정의하는 용도로만 사용하라

인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 거이다. 인터페이스는 오직 이 용도로만 사용해야 한다. 상수 인터페이스 안티패턴은 인터페이스를 잘못 사용한 예다. // 코드 22-1 상수 인터페이스...

[이펙티브자바] 아이템21-인터페이스는 구현하는 쪽을 생각해 설계하라

자바 8전에는 기존 구현체를 깨드리지 않고는 인터페이스에 메서들르 추가할 방법이 없었다. 자바 8에 와서 기존 인터페이스에 메서드를 추가할 수 있도록 디폴트 메서드를 소개했지만 위험이 완전히 사라진 것은 아니다. 모든 기존 구현체들과 매끄럽게 연동되리라는 보장이 없다. 디폴트 메서드는 구현 클래스에 대해 아무것도...

[이펙티브자바] 아이템20-추상 클래스보다는 인터페이스를 우선하라

자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스, 이렇게 두 가지다. 자바8부터 인터페이스도 디폴트 메서드(default method)를 제공할 수 있다.(참고) 둘의 가장 큰 차이는 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다는 점이다. 자바는 단일 상속만 지원하기에, 추상...

[이펙티브자바] 아이템19-상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라

상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남겨야 한다. '재정의 가능' 이란 public과 protected 중 final이 아닌 모든 메서드를 뜻한다. 재정의 가능 메서드를 호출할 수 있는 모든 상황을 문서로 남겨야 한다. Implementation Requirements API 문...

[이펙티브자바] 아이템18-상속보다는 컴포지션을 사용하라

위 포스팅에서 언급하는 상속은 클래스가 인터페이스를 구현하거나 인터페이스가 다른 인터페이스를 확장하는 인터페이스 상속과는 무관하다. 상속은 코드를 재사용하는 강력한 수단이지만, 잘 못 사용하면 오류를 내기 쉽다. 같은 프로그래머가 통제하는 패키지 안에서라면 상속도 안전한 방법이다. 확장할 목적으로 설계되었고 문서화도 잘 된 클래스(아이템19...

[이펙티브자바] 아이템17-변경 가능성을 최소화하라

불변 클래스란? 인스턴스의 내부 값을 수정할 수 없는 클래스 String, 기본 타입의 박싱된 클래스들, BigInteger, BigDecimal이 여기 속한다. 클래스를 불변으로 만드는 다섯 가지 규칙 1) 객체의 상태를 변경하는 메서드(변경자, Setter)를 제공하지 않는다. 2) 클래스를 확장할 수 없도혹 해야 한다. 클래...

[이펙티브자바] 아이템16-public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

객체 지향 프로그래머는 필드를을 모두 private으로 바꾸고, public 접근 제어자(getter)를 추가한다. // 이처럼 툅환 클래스는 public이어선 안된다. class Point { public double x; public double y; } 위와 같은 클래스는 데이터 필드에 직접 접근할 수 있으니 캡슐화의 이점을 제공하지...

[이펙티브자바] 아이템15-클래스와 멤버의 접근 권한을 최소화하라

컴포넌트 설계 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스의 내부 데이터와 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐이다. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전혀 개의치 않는...

[Spring] Spring Data JPA 멀티 테넌시

출처 https://velog.io/@gaegulgaegul/Spring-Data-JPA-%EB%A9%80%ED%8B%B0-%ED%85%8C%EB%84%8C%EC%8B%9C