DEV ℧ Developer Diary

[Java] 상속 (Is-A)과 컴포지션 (Has-A)

상속 (IS-A)과 컴포지션 (Has-A)

이펙티브 자바 item18에 들어가기 앞서, 상속과 컴포지션의 각각의 관계에 대한 개념을 정리하고자 한다. 상속과 컴포지션은 얼핏보면 비슷하지만, 관계에 따른 차이가 있습니다.

상속

IS-A 관계 (상속) : 하위 클래스가 상위 클래스의 특성을 재정의 한 것

  • A is a B...

[EffectiveJava] item17 - 변경 가능성을 최소화하라

변경 가능성을 최소화하라

불변 클래스

불변 클래스란 간단히 말해 그 인스턴스의 내부 값을 수정할 수 없는 클래스다.

자바 플랫폼 라이브러리에도 다양한 불변 클래스가 있다.

  1. String
  2. 기본 타입의 박싱된 클래스들
  3. BigInteger, BigDecimal

등등이 있으며, 불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며,...

[EffectiveJava] item16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라.

public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라.

이번 4장의 클래스와 인터페이스의 경우, 캡슐화를 강조하는 듯하다. 이렇게 접근제어자와 외부에서의 내부 로직에 대한 접근 관련 항목이 많이 작성되어있다.

public 클래스의 필드

class Point { public <span...

[EffectiveJava] item15 - 클래스와 멤버의 접근 권한을 최소화 하라.

클래스와 멤버의 접근 권한을 최소화 하라.

어설프게 설계된 컴포넌트와 잘 성계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼냐 이다. 이는 객체지향 4대 특징중 하나라고 불리는 정보 은닉, 혹은 캡슐화 라고 불리며, 소프트웨어 설계의 근간이 되는...

[EffectiveJava] item14 - Comparable을 구현할지 고려하라.

Comparable을 구현할지 고려하라.

Comparable 개요

이번에는 Comparable 인터페이스의 유일무이한 메서드인 compareTo를 알아보자.

compareTo의 성격은 두 가지만 제외하면 Object의 equals와 같다.

  1. 단순 동치성 비교에 더해 순서까지 비교 할 수 있다.
  2. 제네릭 하다.

배열의 정렬에 사용하는 Arrays.sort() 또한 Comparable 인터페이스를 구현한...