# Effective Java

319개의 포스트

[ Item 82 ] 스레드 안전성 수준을 문서화하라

한 메서드를 여러 스레드가 동시에 호출할 때 그 메서드가 어떻게 동작하느냐는 해당 클래스와 이를 사용하는 클라이언트 사이의 중요한 계약과 같다.synchronized 한정자가 보이는 메서드는 스레드 안전하다는 이야기\-> 몇 가지 면에서 틀림1\. 자바독이 기본 옵션에

약 2시간 전
·
0개의 댓글

[Effective Java 3/E] 1장. 들어가기

Java 언어를 더 잘 이해하고 Java 언어 기반의 프레임워크를 더 잘 활용하기 위해 Effective Java 3rd Edition 책을 읽고 모든 내용을 차근히 정리해보려고 한다.java.lang, java.util, java.io, java.util.concur

4일 전
·
0개의 댓글
post-thumbnail

[Effective Java] 아이템 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라

자바 8에서 부터 기존 인터페이스에 메서드를 추가할 수 있게 되었다.인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서 디폴트 구현이 쓰이게 된다.하지만 모든 기존 구현체들과 매끄럽게 연동되리라는 보장은 없다.구현 클래스에 대해 아무것도 모른채 합의

5일 전
·
0개의 댓글

[ Item 76 ] 가능한 한 실패 원자적으로 만들라

호출 된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다.이러한 특성을 실패 원자적 이라고 한다.불변 객체로 설계한다.불변 객체는 태생적으로 실패 원자적이다.메서드가 실패하면 새로운 객체가 만들어 지지 않을 수 있으나 기존 객체가 불안정한 상태에

2022년 6월 19일
·
0개의 댓글
post-thumbnail

[이펙티브 자바] Item37 - ordinal 인덱싱 대신 EnumMap을 사용하라

이펙티브 자바 5장. Item37 - "ordinal 인덱싱 대신 EnumMap을 사용하라"

2022년 6월 18일
·
0개의 댓글
post-thumbnail

[이펙티브 자바] Item36 - 비트 필드 대신 EnumSet을 사용하라

이펙티브 자바 5장. 제네릭 Item36 - "비트 필드 대신 EnumSet을 사용하라"

2022년 6월 18일
·
0개의 댓글

[ Item 70 ] 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라

자바의 문제 상황을 알리는 타입(throwable) 세 가지검사 예외런타임 예외에러언제 무엇을 사용해야 하는지 헷갈리는 경우가 있다.검사와 비검사 예외를 구분하는 기본 규칙이다.검사 예외를 던지면 호출자가 그 예외를 catch로 잡아 처리하거나 더 바깥으로 전파하도록

2022년 6월 12일
·
0개의 댓글

85. 자바 직렬화의 대안을 찾으라

직렬화는 안전하지 않다. 신뢰할 수 없는 스트림을 역직렬화하면 원격 코드 실행, 서비스 거부 등의 공격으로 이어질 수 있다. 역직렬화 과정에서 호출되어서 위험한 동작을 수행하도록 하는 메서드를 가젯이라고 하는데 이런 가젯을 여러개 사용하는 것을 가젯 체인이라고 한다.

2022년 6월 10일
·
0개의 댓글

84. 프로그램의 동작을 스레드 스케줄러에 기대지 말라

여러 스레드가 실행 중이면 OS의 스레드 스케줄러가 어떤 스레드를 얼마나 오래 실행할 지를 결정한다. 정상적인 OS라면 이 작업을 공정하게 수행하지만 구체적인 스케줄링 정책은 OS마다 다를 수 있다. 따라서 잘 작성된 프로그램이라면 이 정책에 좌지우지돼서는 안 된다.정

2022년 6월 10일
·
0개의 댓글

[Effective Java 3rd] 아이템10~12

Effective Java 스터디 equals 메서드를 재정의해야 할 때 논리적 동치성을 확인해야 할 때 (Integer, String 같은 값 클래스)equals가 논리적 동치성을 확인하도록 재정의해두면, 그 인스턴스는 값을비교하길 원하는 프로그래머의 기대에

2022년 6월 7일
·
0개의 댓글
post-thumbnail

내 멋대로 이펙티브 자바 정리 + 내 생각

객체들간의 의존관계는 적을수록 좋다. 물론 케바케이고 실제로 디자인 패턴 중에 의존관계를 한 곳에 몰아넣는 패턴도 있지만, 일반적으로 객체들간 의존관계가 많으면 많을수록 어플리케이션의 복잡도는 늘어나기 마련이다. 가장 좋은 설계는 아예 의존관계 없이 독립적으로 실행가

2022년 6월 5일
·
0개의 댓글

[ Item 64 ] 객체는 인터페이스를 사용해 참조하라

적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라.객체의 실제 클래스를 사용해야 할 상황은 '오직' 생성자로 생성할 때뿐이다.인터페이스를 타입으로 사용하는 습관을 길러두면 프로그램이 훨씬 유연해진다.원래의 클래스가 인

2022년 6월 5일
·
0개의 댓글

[이펙티브 자바]11. equals를 재정의하려거든 hashcode도 재정의하라

equals를 재정의한 클래스는 hashcode도 재정의해야한다. 재정의하지 않는 경우, hash를 사용하는 hashmap이나 hashset에서 문제가 발생한다.

2022년 6월 5일
·
0개의 댓글
post-thumbnail

[Effective Java] 아이템 17 - 변경 가능성을 최소화하라

[Effective Java] 아이템 17

2022년 6월 4일
·
0개의 댓글

ITME.5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 싱글턴과 정적 유틸리티 클래스는 사용하지 않는것이 좋다. 이 자원들을 클래스가 직접 만들게 해서도 안된다. 대신 자원을 혹은 그 자원을 만들어주는 팩터리를 생성자에 혹은 정적 팩

2022년 6월 3일
·
0개의 댓글

ITEM.4 인스턴스화를 막으려거든 private 생성자를 사용하라

public 생성자가 기본지원되므로 private 생성자를 하나 만들어주면 인스턴스화 되지 않고 정적으로 관리할 수 있다.

2022년 6월 3일
·
0개의 댓글

ITEM.3 private 생성자나 열거 타입으로 싱글턴임을 보증하라

위와같이 인스턴스를 생성하면 상수값이기떄문에 최초 1회만 생성되지만, 리플렉션 API로 뚫리기 때문에 생성자를 수정하여 두번쨰 객체가 생성되려할때 예외처리를 해주어야 한다.API를 바꾸지않고 싱글턴이 아니게 변경할 수 있다. (변수)정적팩터리를 제네릭 싱글턴 팩터리로

2022년 6월 3일
·
0개의 댓글