[Effective Java 뽀개기] 서론



image-20220904212556629

미루고 미루고 미뤄왔던 이펙티브 자바를 이번 Develop 이라는 스터디 플랫폼을 통해서 진행하고 있다.

사실 이펙티브 자바 공부할 생각은 없었다… ‘디자인 패턴’ 스터디에 들려고 했더니 이미 마감이 되어서 어쩔수 없이 남은 스터디중 이펙티브 자바로 왔던 것이다… 후후..


이펙티브 자바와의 첫만남

2020년 쯤 미루고 미루다 그래도 자바 개발자인데 한번 봐야지 싶어서 한번 쓱 펼쳐봤더니…

image-20220904212802197

바로 덮었다.

2년이 지난 2022년.. 코드를 짜다가 이펙티브 자바의 몇몇 아이템을 활용하게 되어서 한번 읽어봐야겠는데 싶었지만 미루고 미루다가… 우연찮은 기회에 읽게 되었다.

이왕 읽게 된 것 마무리를 잘 해보려고 한다. 그리고 2년전에 비해 책도 좀 읽히는 것을 느끼게 되어서 그래도 성장하긴 했구나 느끼고 있다.

또한 돈으로 의지를 샀기 때문에.. 화이팅..! 이번 글은 책 내의 서론으로 책을 간단하게 설명하는 글이다.




서론

해당 책은 총 90개의 아이템을 담고 있다.

각 아이템이 하나의 규칙을 다루며, 각 규칙은 유익하다고 생각되는 관례이다. 이러한 규칙을 주제별로 11개 장으로 묶었다.

아이템은 서로 독립적이라 순서대로 읽을 필요는 없다.

이 책은 입문자용이 아니며, 중급자 이상이 보아야한다.

이 책의 대부분은 핵심적인 기본 원칙 몇 개에서 파생되는데 핵심은 명료성(clarity)과 단순성(simplicity)이다.


이상적인 컴포넌트

  1. 예측할 수 있는 동작만 수행하여야 한다.
  2. 가능한 작되, 너무 작지 않게 구성한다.
  3. 코드는 재사용되어야 한다.
  4. 컴포넌트 사이의 의존성은 최소로 유지한다.
  5. 오류는 만들어지자마자 가능한 빨리 (되도록 컴파일 타임에) 잡아야 한다.

여기서 제시하는 규칙들이 100% 옳을 순 없지만 최고의 모범사례일 것이다. 그렇다고 생각 없이 맹종하지 않아야 하나 어겨야 할 땐 합당한 이유가 있어야한다.

이 책은 성능에 집중하기 보다는 프로그램을 유지보수하기 쉽게 짜는데 집중한다. 유지보수가 쉽다면 성능을 올리는 부분은 어렵지 않을 것이다.


언어 명세


자바 명세를 따르는 부분

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


자료형(type)

  • 인터페이스 (interface)
  • 클래스 (class)
  • 배열 (array)
  • 기본타입 (primitive)

네가지 타입중 기본타입을 제외한 타입은 참조타입(reference type)이라고 한다.

즉, 클래스의 인스턴스와 배열은 객체(object)인 반면 기본 타입값은 그렇지 않다.


클래스의 멤버

  • 필드 (field)
  • 메서드 (method)
    • 메서드 시그니처는 메서드 이름과 입력 매개변수(parameter)의 타입들로 이뤄진다. (반환값의 타입은 시그니처에 포함 X)
  • 멤버 클래스
  • 멤버 인터페이스


기타

  • 애너테이션(annotation)
    • 인터페이스의 일종
  • 열거타입 (enum)
    • 클래스의 일종


자바 명세와 다르게 사용하는 부분

  1. 상속(inheritance) == 서브클래싱(subclassing)
    1. 이 책은 상속과 서브클래싱을 동의어로 사용한다. (엥.. 똑같은거같은데)
      1. ‘인터페이스 상속’ → ‘클래스가 인터페이스를 구현한다(implement)’ or ‘인터페이스가 다른 인터페이스를 확장한다(extend)’
  2. 아무것도 명시하지 않은 접근 수준(access level)을 이야기 할땐 패키지 접근(package access) 대신 package-private를 사용한다.


공개 API

흔히 쓰는 언어 구성 요소중 하나인 인터페이스와 헷갈리지 않도록 프로그래머가 접근할 수 있는 모든 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태(serialized form)을 뜻하는 단어를 API라고 칭한다.

또한 이런 형태를 총칭해 API 요소(API element) 라고 한다.

  • 프로그램 작성자 → 사용자(user)
  • API를 사용하는 클래스(코드) → 클라이언트(client)



© 2019. by mintheon

Powered by mintheon