본문 바로가기

이펙티브 자바

1장 들어가기

이 책의 핵심적인 기본 원칙

  1. 명료성(clarity)
  2. 단순성(simplicity)

컴포넌트

컴포넌트: 개별 메서드부터 여러 패키지로 이뤄진 복잡한 프레임워크까지 재사용 가능한 모든 소프트웨어 요소

컴포넌트는 정해진 동작이나 예측할 수 있는 동작만 수행해야 한다. 

컴포넌트는 가능한 작되, 그렇다고 너무 작아서는 안된다.

컴포넌트 사이의 의존성은 최소로 유지해야 한다.

오류는 만들어지자마자 가능한 빨리 (되도록 컴파일타임에) 잡아야 한다.

 

위 규칙이 100% 옳을 순 없지만, 대부분의 적용되는 모범 사례일 것이다.

이 규칙을 생각없이 맹종하지 말고, 합당한 이유가 존재하면 어길 것

정석이 되는 규칙들을 마스터 한 후에 규칙을 어겨도 되는 경우를 다뤄야 한다.

 

기술 용어

위 책에서 기술 용어는 대부분 자바8용 언어 명세를 따른다.

 

자바가 지원하는 타입

  1. 인터페이스(interface)
  2. 클래스(class)
  3. 배열(array)
  4. 기본 타입(primitive type)
  • 애너테이션(annotation)은 인터페이스의 일종
  • 열거 타입(enum)은 클래스의 일종
  • 1,2,3은 참조 타입(reference type)

클래스 멤버

  • 필드(field)
  • 메서드(method)
  • 멤버 클래스
  • 멤버 인터페이스

메서드 시그니처: 메서드 이름 + 입력 매개변수(parameter) -> 반환값의 타입은 시그니처에 포함 X

 

일부 용어는 자바 언어 명세와 다르게 사용

  • 상속(inheritance) <- 동의어 -> 서브클래싱(subclassing)
  • 인터페이스 상속 -> 클래스가 인터페이스 구현(implement)
  • 인터페이스가 다른 인터페이스를 확장(extend)
  • 접근 수준(access level): 패키지 접근(pacakge access) -> 패키지-프라이빗(package-private) 사용

 

자바 언어 명세가 정의하지 않는 기술 용어

  • 공개 API(exported API -> 줄여서 API(Application Programming Interface)
  • API: 프로그래머가 클래스, 인터페이스, 패키지를 통해 접근할 수 있는 모든 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태(serialized form)를 칭함
  • 사용자(user): API를 사용하는 프로그램 작성자(사람)
  • 클라이언트(client): API를 사용하는 클래스(코드)
  • API 요소(API element): 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태를 총칭함
  • 공개 API: 그 API를 정의한 패키지의 밖에서 접근할 수 있는 API요소로 이루어짐
    - 모든 클라이언트가 접근할 수 있고, API 작성자가 지원하기로 약속한 API 요소

 

자바 9의 모듈 시스템

  • 모듈 개념 적용하면 -> 공개 API는 ‘해당 라이브러리의 모듈 선언(module declaration)에서 공개하겠다고 한’ 패키지들의 공개 API만으로 이뤄짐
  • , 공개할 패키지를 선택 가능

'이펙티브 자바' 카테고리의 다른 글

계기  (0) 2022.03.02