[이펙티브 자바]

2020. 8. 8. 14:14기술 서적/Effective Java 3∕E

Effective Java 3/E

회사 선배에게 추천을 받아 이펙티브 자바 3판 공부를 시작하게 되었다.

난이도가 높아 이해하기 어려울 수 있다고 하셔서 다른 분들이 올린 강의와 요약 내용을 참조하려한다.

또한 입사 후 자바스크립트 위주로 개발을 해서 자바 개념을 거의 잊어버린 상태라,

개념들도 다시 정리할 겸 블로그에 올리면서 공부하려고 한다.

 

 


1장. 들어가기

 

자바 새로운 기능과 해당 기능이 도입된 자바 버전

기능 도입된 자바 버전
람다 자바 8
스트림 자바 8
옵셔널 자바 8
인터페이스의 디폴트 메서드 자바 8
try-with-resources 자바 7
@SafeVarargs 자바 7
모듈 자바 9

 

 

 

프로그래밍 기본 원칙

명료성(Clarity)과 단순성(Simplicity)

  • 컴포넌트는 사용자를 놀라게 하는 동작을 해서는 절대 안된다.
    (정해진 동작이나 예측할 수 있는 동작만 수행해야 한다.)
  • 컴포넌트는 가능한 한 작되, 그럭다고 너무 작아서는 안된다.
    (컴포넌트란 개별 메서드부터 여러 패키지로 이뤄진 복잡한 프레임워크까지 / 재사용 가능한 모든 소프트웨어 요소를 뜻함)
  • 코드는 복사되는게 아니라 재사용되어야 한다.
  • 컴포넌트 사이의 의존성최소로 유지해아 한다.
  • 오류는 만들어지자마자 가능한 한 빨리 (되도록 컴파일타임에) 잡아야 한다.

 

 

 

자바가 지원하는 타입

타입 (type; 자료형)
참조 타입
(reference type)
인터페이스 (interface)
클래스 (class)
배열 (array)
기본 타입 (primitive)

참조 타입

  • 기본 타입을 제외한 모든 타입
String str = new String("hello word")
  • str이라는 변수 앞에 기본 타입이 아닌 String 클래스가 써있다.
  • new라는 키워드는 객체를 메모리에 올려준다. 메모리에 올라간 객체를 인스턴스라 한다.
  • new 뒤에 오는 String(...)는 생성자이다.
  • str 변수가 인스턴스를 가지고 있는 게 아니라 말 그대로 가리킨다. (= 참조한다, 레퍼런스한다)
  • str 변수에는 "hello word" 문자열이 아니라, 문자열이 올라간 메모리의 위치 값 (인스턴스의 주소 값)이 저장된다.

 

인터페이스

  • 애너테이션(annotation)도 인터페이스의 일종이다.

 

클래스

  • 클래스의 멤버로는 필드(field), 메서드(method), 멤버 클래스, 멤버 인터페이스가 있다.
  • 열거 타입(enum)도 클래스의 일종이다.
  • 메서드 시그니처는 메서드 이름, 입력 매개변수parameter)의 타입들로 이뤄진다.
  • 반환값의 타입은 메서드 시그니처에 포함되지 않는다.

 

 

 

API(application programming interface)

  • 프로그래머가 / 클래스, 인터페이스, 패키지를 통해 / 접근할 수 있는 /
    모든 API 요소 (API element: 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태(serialized form))
  • 사용자(user): API를 사용하는 프로그램 작성자(사람)
  • 클라이언트(client): API를 사용하는 클래스(코드)
  • 공개 API는 그 API를 정의한 패키지의 밖에서 접근할 수 있는 API 요소로 이뤄진다.
    공개 API는 모든 클라이언트가 접근할 수 있고, API 작성자가 지원하기로 약속한 API 요소들이다.
  • 패키지의 공개 API는 그 패키지의 /
    모든 public 클래스와 / 인터페이스의 / public 혹은 protected 멤버와 / 생성자로 구성된다.
  • 자바 9의 모듈 시스템
    자바 라이브러리에 모듈 개념을 적용하면 /
    공개 API는  / 해당 라이브러리의 / 모듈 선언(module declaration)에서 공개하겠다고 한 패키지들의  /
    공개 API만으로 이뤄진다.
    즉, 공개할 패키지를 선택할 수 있다.