Skip to content

320Hwany/effective-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

이펙티브 자바

이펙티브 자바를 읽고 정리하며 예제 코드와 학습 테스트를 만들어보았습니다.

객체 생성과 파괴

'객체 생성과 파괴' 챕터에서는 객체를 만들어야 할 때와 만들지 말아야할 때를 구분하는 방법
객체 생성 방법과 불필요한 생성을 피하는 방법, 제때 파괴됨을 보장하고 파괴 전에 수행해야 할 정리 작업을
관리하는 방법에 대해 정리해보았습니다.

아이템 1
아이템 2
아이템 3
아이템 4
아이템 5
아이템 6
아이템 7
아이템 8
아이템 9

모든 객체의 공통 메소드

Object에서 final이 아닌 메소드(equals, hashCode, toString, clone, finalize)는 모두 재정의를
염두에 두고 설계된 것이라 재정의시 지켜야 하는 일반 규약이 명확이 정의되어 있습니다.
Object를 상속하는 클래스, 즉 모든 클래스는 이 메소드들을 일반 규약에 맞게 재정의해야 합니다.
일반 규약을 지키지 않으면 HashMap, HashSet과 같은 클래스가 제대로 동작하지 않을 수 있습니다.
이번 챕터에서는 이러한 메소드들을 어떻게 재정의해야 하는 지에 대해 정리해보았습니다.

아이템 10
아이템 11
아이템 12
아이템 13
아이템 14

클래스와 인터페이스

추상화의 기본 단위인 클래스와 인터페이스는 자바 언어의 핵심입니다. 그래서 자바 언어에는 클래스와 인터페이스 설계에
사용하는 강력한 요소가 많이 있습니다. 이번 챕터에서는 이런 요소들을 적절히 활용하여 클래스와 인터페이스를
쓰기 편하고, 견고하며, 유연하게 만드는 방법에 대해 정리해보았습니다.

아이템 15
아이템 16
아이템 17
아이템 18
아이템 19
아이템 20
아이템 21
아이템 22
아이템 23
아이템 24
아이템 25

제네릭

제네릭은 자바 5부터 사용할 수 있습니다. 제네릭을 지원하기 전에는 컬렉션에 객체를 꺼낼 때마다 형변환을 해야 했습니다.
이때 실수로 엉뚱한 타입의 객체를 넣어두면 런타임에 형변환 오류가 발생합니다.
제네릭을 사용하면 컬렉션이 담을 수 있는 타입을 컴파일러에 알려주고 엉뚱한 타입의 객체를 넣으려는 시도를 컴파일 과정에서
차단하여 더 안전하고 명확한 프로그램을 만들 수 있게 해줍니다.
꼭 컬렉션이 아니더라도 이러한 이점을 누릴 수 있지만 코드가 복잡해질 수 있습니다.
이번 챕터에서는 제네릭의 이점을 최대로 하고 단점을 최소화하는 방법을 정리해보았습니다.

아이템 26
아이템 27
아이템 28
아이템 29
아이템 30
아이템 31
아이템 32
아이템 33

열거 타입과 애너테이션

자바에는 특수한 목적의 참조 타입이 2가지가 있습니다. 하나는 클래스의 일종인 열거 타입(enum)이고
다른 하나는 인터페이스의 일종인 애너테이션(annotation)입니다.
이번 챕터에서는 이 타입들을 올바르게 사용하는 방법에 대해 정리해보았습니다.

아이템 34
아이템 35
아이템 36
아이템 37
아이템 38
아이템 39
아이템 40
아이템 41

람다와 스트림

자바 8에서 함수형 인터페이스, 람다, 메소드 참조라는 개념이 추가되면서 함수 객체를 더 쉽게 만들 수 있게 되었습니다.
이와 함께 스트림 API까지 추가되어 데이터 원소의 시퀀스 처리를 라이브러리 차원에서 지원하기 시작했습니다.
이번 챕터에서는 이 기능들을 효과적으로 사용하는 방법에 대해 정리해보았습니다.

아이템 42
아이템 43
아이템 44
아이템 45
아이템 46
아이템 47
아이템 48

메소드

이번 챕터에서는 메소드를 설계할 때 주의할 점들을 살펴보겠습니다. 구체적으로는 매개변수와 반환값을 어떻게 처리해야 하는지,
메소드 시그니처는 어떻게 설계해야 하는지, 문서화는 어떻게 해야 하는지를 다룹니다.
이번 챕터의 내용 중 상당 부분은 메소드뿐 아니라 생성자에도 적용됩니다.
챕터 4의 '클래스와 인터페이스'와 마찬가지로 이번 챕터도 사용성, 견고성, 유연성에 집중해서 정리해보았습니다.

아이템 49
아이템 50
아이템 51
아이템 52
아이템 53
아이템 54
아이템 55

일반적인 프로그래밍 원칙

이번 챕터에서는 자바 언어의 핵심 요소에 집중해보았습니다.
지역변수, 제어구조, 라이브러리, 데이터 타입, 그리고 언어 경계를 넘나드는 기능인 리플렉션과 네이티브 메소드에 대해
다루었습니다. 마지막으로는 최적화와 명명 규칙에 대해 알아보겠습니다.

아이템 57
아이템 58
아이템 59
아이템 60
아이템 61
아이템 62
아이템 63
아이템 64
아이템 65
아이템 66
아이템 67
아이템 68

예외

예외를 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성이 높아지지만, 잘못 사용하면 반대의 효과만 나타납니다.
이번 챕터에서는 예외를 효과적으로 활용하는 지침에 대해 정리해보았습니다.

아이템 69
아이템 70
아이템 71
아이템 72
아이템 73
아이템 74
아이템 75
아이템 76
아이템 77

동시성

스레드는 여러 활동을 동시에 수행할 수 있게 해줍니다. 하지만 동시성 프로그래밍은 단일 스레드 프로그래밍보다 어렵습니다.
잘못될 수 있는 일이 늘어나고 문제를 재현하기도 어려워지기 때문입니다.
하지만 동시성 프로그래밍은 자바 플랫폼 자체에 내재되어 있을 뿐 아니라 오늘날 어디서나 쓰이는 멀티코어 프로세서의 힘을
제대로 활용하려면 반드시 필요한 기술입니다.
이번 챕터에서는 동시성 프로그램을 명확하고 정확하게 만들고 잘 문서화하는 데 도움이 되는 조언들을 정리해보았습니다.

아이템 78
아이템 79
아이템 80
아이템 81
아이템 82
아이템 83
아이템 84

직렬화

객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화)
매커니즘입니다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있습니다.
이번 챕터에서는 직렬화가 품고 있는 위험과 그 위험을 최소화하는 방법에 대해 정리해보았습니다.

아이템 85
아이템 86
아이템 87
아이템 88
아이템 89
아이템 90

About

이펙티브 자바를 읽고 예제, 학습 테스트 만들기

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages