# Effective Java

475개의 포스트

가변인수는 사용 시 유의할 점

가변인수(varargs) 메서드는 명시한 타입의 인수를 0개 이상 받을 수 있다. 위의 함수에서는 입력받은 int 인수의 합을 반환한다. 위에서는 특별한 오류가 없겠지만, 인수가 하나 이상이어야 할 때에는 좀 코드가 더러워진다. 위의 코드에는 몇가지 문제점이 있다. 인수를 0개 넣어 호출하면 컴파일타임이 아닌 런타임에 오류가 발생한다. args 유효성 ...

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

이펙티브 자바 item 내 코드에 적용해보기

이펙티브 자바의 `Item 69: 예외는 진짜 예외 상황에서만 사용하라`의 발표를 맡아 해당 아이템을 정리하고 이전에 잘못 작성한 코드에 해당 아이템의 내용을 적용해보았습니다.

6일 전
·
1개의 댓글
·

effective java_1. 생성자 대신 static factory method를 고려하라

자바의 네 가지 자료형(타입) interface annotation class member: field, method, member class, member interface enum(열거타입) array primitive(기본타입) interface

2023년 3월 22일
·
0개의 댓글
·

메서드 시그니처를 신중히 설계하라

1. 메서드 이름을 시중히 짓자. 표준 명명 규칙을 따라야 한다(아이템 68) 같은 패키지에 속한 다른 이름들과 일관되게 짓는다. 개발자들이 흔히 많이들 사용하는 이름들을 사용하자. 2. 편의 메서드를 너무 많이 만들지 말자. 한 클래스에 메서드가 너무 많으면 익숙해지는데 너무 오래걸리고, 문서화, 유지보수가 힘들다. 3. 매개변수 목록은 짧게 유지하자...

2023년 3월 18일
·
0개의 댓글
·
post-thumbnail

[Effective Java] Item47 - 반환 타입으로는 스트림보다 컬렉션이 낫다

Java8에서 추가된 기능으로 컬렉션 데이터를 선언형으로 쉽게 처리할 수 있고 병렬처리를 별도의 멀티 스레드 없이 쉽게 구현할 수 있게 도와준다.Stream은 반복을 지원하지 않는다.Iterable의 추상 메소드를 모두 구현하고 있지만 정작 extand는 하고 있지 않

2023년 3월 18일
·
0개의 댓글
·
post-thumbnail

[Effective Java] Item42 - 익명 클래스보다는 람다를 사용하라

💡 람다 : 익명 메소드만 전달하여, 인터페이스르 구현한 익명 클래스의 인스턴스를 생성하는 방법, 메소드만 전달하지만, 결과적으로 익명 구현 객체를 만듬💡 익명 클래스 : 추상 클래스를 상속하거나 인터페이스를 구현한 이름 없는 클래스, 재사용이 필요없는 인스턴스를

2023년 3월 18일
·
0개의 댓글
·
post-thumbnail

[Effective Java] Item37 - ordinal 인덱싱 대신 EnumMap을 사용하라

💡 해당 상수가 그 열거 타입에서 몇 번째 위치하는지 반환하는 메소드배열은 제네릭과 호환되지 않기 때문에 비검사 형변환이 수행되고, 컴파일이 안된다.초기화를 할 때, 정수 값을 잘못 입력하면 ArrayIndexOutOfBoundException이 발생한다.orinal

2023년 3월 12일
·
0개의 댓글
·
post-thumbnail

[Effective Java] Item33 - 타입 안전 이종 컨테이너를 고려하라

💡 타입 안전 이종 컨테이너 (Type Safe Heterogeneous Container) : 여러 다른 종류들로 이루어진 값을 저장하는 타입에 안전한 객체컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공\-> 이렇게

2023년 3월 12일
·
0개의 댓글
·

stream 을 사용할 때 주의할 점

1. stream 의 특징 스트림 API는 다량의 데이터 처리 작업을 돕고자 자바 8에 추가되었다. 스트림 API 의 추상개념 스트림은 데이터 원소의 유한, 무한 시퀀스를 뜻한다. 스트림 파이프라인은 이 원소들로 수행하는 연산단계를 표현하는 개념이다. 스트림 파이프라인은 소스 스트림에서 시작해 종단연산으로 끝나며, 그 사이에 하나 이상의 중간연산이 있을...

2023년 3월 12일
·
0개의 댓글
·
post-thumbnail

[Effective Java] Item28 - 배열보다는 리스트를 사용하라

배열공변 (conariant)Sub가 Super의 하위 타입이라면 배열은 Sub\[] 은 배열 Super\[]의 하위 타입이 된다.즉, 함께 변한다.배열은 런타임에도 자신이 담기로 한 원소의 타입을 인지하고 있다.컴파일에는 아무런 영향을 끼치지 않지만 런타임시 Arra

2023년 3월 4일
·
0개의 댓글
·
post-thumbnail

[Effective Java] Item26 - 로타입은 사용하지 말라

💡 제네릭(Generic) : 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 뜻제네리은 java

2023년 3월 4일
·
0개의 댓글
·
post-thumbnail

[이펙티브 자바] 2. 모든 객체의 공통 메서드(1)

Object 는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다. 여기서 final이 아닌 메서드 (hashCode, toString...)는 모두 재정의를 염두해 두고 설계된 것이라 지켜야 하는 일반 규약이 정해져 있다. 이전 장에선

2023년 3월 4일
·
0개의 댓글
·
post-thumbnail

[이펙티브 자바] 1. 객체 생성과 파괴 (3)

자바는 두 가지 객체 소멸자를 제공한다. 그중 finalizer는 예측할 수 없고 상황에 따라 위험할 수 있어서 일반적으로 불필요하다. 그래서 자바는 대안으로 cleaner를 소개했지만, 여전히 예측하기 힘들고 느리고 일반적으로 불필요하다. finalizer 와 cle

2023년 3월 2일
·
0개의 댓글
·
post-thumbnail

[이펙티브 자바] 1. 객체 생성과 파괴 (2)

스프링을 공부 했다면, DI 에 대해서 들어 봤을 것이다. 스프링이 제공하는 DI 컨테이너를 이용하면 IoC와 DIP를 지킬수 있게 된다. 두가지를 간단히 요약하자면, IoC(제어의 역전)는 객체가 필요한 의존관계를 내부에서 결정하는 것이 아니라 외부에 맡기는 것이고

2023년 3월 1일
·
0개의 댓글
·
post-thumbnail

[이펙티브 자바] 1. 객체 생성과 파괴 (1)

아이템 1 - 생성자보단 정적 팩토리 메서드를 고려하라 > 클래스를 클라이언트에 public 생성자 대신 정적 팩토리 메서드를 제공할 수 있다. 이 방식에는 장단점이 모두 존재한다. 먼저 다섯가지 장점을 알아보자. 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변

2023년 2월 28일
·
0개의 댓글
·
post-thumbnail

[Effective Java] Item20 - 추상 클래스보다는 인터페이스를 우선하라

추상 클래스와 인터페이스 추상 클래스와 인터페이스를 한 번 알아보자! > 💡 추상 클래스 : 일부 메소드가 구현되어있지 않고 선언만 되어있는 클래스, 상속을 통해서 클래스를 완성하도록 유도하는 클래스 > 💡 인터페이스 : 동일한 목적하에 동일한 기능을 수행하게끔

2023년 2월 25일
·
0개의 댓글
·
post-thumbnail

[Effective Java] Item18 - 상속보다는 컴포지션을 사용하라

💡 상속 : 하위 클래스가 상위 클래스의 특성을 재정의 한 것 (IS-A 관계)💡 컴포지션 : 기존 클래스가 새로운 클래스의 구성요소가 되는 것 (HAS-A 관계) 상속은 캡슐화를 위반한다.상속은 설계에 유연하지 못하다.상속은 다중 상속이 불가능하다.상위 클래스가

2023년 2월 25일
·
0개의 댓글
·

12. toString을 항상 재정의하라

Effective Java 아이템 12. 모든 클래스에서 Object의 toString을 재정의하자. 재정의한 toString은 객체에 대해 사람이 읽기 쉬운 짧지만 유익한 정보를 String 형태로 반환해야 한다.

2023년 2월 22일
·
0개의 댓글
·
post-thumbnail

[Effective Java] Item6 - 불필요한 객체 생성을 피하라

Item6 시작해보자~! 불필요한 객체 생성을 피하라! 요리조리똑같은 기능의 객체를 매번 생성하기 보단 객체 하나를 재사용하는 편이 좋다.위의 코드는 실행될 때마다 String 인스턴스를 새로 생로 생성한다. 수 백만개 인스턴스 생성될 가능성 있다.위 코드는 매번 인스

2023년 2월 12일
·
0개의 댓글
·

enum 을 확장할 때는 interface 를 사용하라

타입안전 열거패턴과는 다르게 열거 타입은 확장이 불가능하다. 확장은 보통 기존의 값들에 추가적인 값을 추가하여 다른 목적으로 쓸 때 사용하지만, 열거타입은 이렇게 하지 못한다는 점이 타입안전 열거타입과 다른 점이다. 사실 대부분의 상황에서 열거타입을 확장하는 건 좋은 방법이 아니다. 그 이유는 확장한 타입의 원소는 기반타입의 원소로 취급하지만 그 반대는 ...

2023년 2월 12일
·
0개의 댓글
·