Home
Youngho's Devlog
Cancel

[이펙티브자바] 아이템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

[이펙티브자바] 아이템14-Comparable을 구현할지 고려하라

Comparable 인터페이스란? Comparable 인터페이스는 객체를 정렬하는데 사용되는 메서드인 compareTo를 정의하고 있다. Comparable 인터페이스를 구현한 클래스는 반드시 compareTo를 정의해야 한다. Comparable 인터페이스 특징 자바에서 같은 타입의 인스턴스를 비교해야만 하는 클래스들은 모두 Com...

[이펙티브자바] 아이템13-clone 재정의는 주의해서 진행하라

Cloneable 인터페이스를 구현하는 모든 클래스는 clone을 재정의해야 한다 이때 접근 제한자는 public으로, 반환 타입은 클래스 자신으로 변경한다. 이 메서드는 가장 먼저 super.clone을 호출한 후 필요한 필드를 전부 적절히 수정한다. 일반적으로 이 말은 그 객체의 내부 깊은 구조에 숨어 있는 모든 가변 객체를 복사하고,...

[이펙티브자바] 아이템12-toString을 항상 재정의하라

toString의 일반 규약에 따르면서 ‘간결하면서 사람이 읽기 쉬운 형태의 유익한 정보’를 반환해야 한다. Object의 toString을 재정의하지 않고 사용할 경우 아래와 같이 클래스명@16진수로 표시한 해시코드로 나타나게 된다. 이는 해당 객체가 어떤 상태인지 어떤 정보를 담고 있는지를 전혀 알 수 없다. 또한 toStri...