# 이펙티브 자바

247개의 포스트
post-thumbnail

이펙티브 자바 #item31 한정적 와일드 카드를 사용해 API의 유연성을 높여라

item 30 에서 잠깐 한정적 와일드 카드를 쓴 경우가 있다. 바로 상속을 고려해서 제네릭을 짜야 할 때이다. 제네릭은 기본적을 불공변이다. List<Object>와 List<String>은 서로 아무런 관계가 없는 타입이라는 뜻이다. 그러나 경우에 불공변

약 3시간 전
·
0개의 댓글
·

10장 예외

예외를 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성이 높아지지만, 잘못 사용하면 반대의 효과만 나타난다.운이 없다면 언젠가 다음과 같은 코드와 마주칠지도 모른다.무슨 일을 하는 코드인지 알겠는가? 전혀 직관적이지 않다는 사실 하나만으로도 코드를 이렇게 작성

약 23시간 전
·
0개의 댓글
·

9장 일반적인 프로그래밍 원칙

이번 아이템은 기본적으로 ‘클래스와 멤버의 접근 권한을 최소하하라’고 한 아이템 15와 취지가 비슷하다.지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다.지역변수의 범위를 줄이는 가장 강력한 기법은 역시 ‘가장 처음 쓰일

약 23시간 전
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item30 이왕이면 제네릭 메서드로 만들라

Collections에서 제공하는 정적 메서드는 대부분 제네릭 메서드이다. 제네릭 메서드에 장점은 타입에 유연하다는 점이다. 물론 제네릭을 사용한다면 유의해야 할 점이 있다.이전에도 나온 내용이지만 로 타입을 사용하지 말것, 타입 경고를 반드시 해결해야 한다.아주 간단

어제
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item29 이왕이면 제네릭 타입으로 만들어라

형변환은 잠재적으로 런타임 예외를 일으킬 가능성이 있다. item28에서 공변인 배열보다 리스트를 활용하라고 하는데 그런 예가 적절한 예라고 할 수 있다. 제네릭을 활용하면 타입에 대한 안정성을 높이고 컴파일 단계에서 걸러낼 수 있기 때문에 훨씬 안정적인 코드라 할 수

어제
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item28 배열보다는 리스트를 사용해라

배열은 공변, 제네릭은 불공변이라 한다. 공변이란 무엇인가?공변은 Sub가 Super의 하위 타입이라면 해당 타입 즉 배열에서도 Sub\[]가 Super\[]의 하위 타입이 된다. 즉, 이전 특성이 타입이 변해도 공변이라면 동일하게 특징을 가져온다는 특성이 있다.제네릭

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

[이펙티브 자바] 14. Comparable을 구현할지 고려하라

compareTo 메서드란? Comparable 인터페이스의 유일무이한 메서드 equals와 비슷하지만 단순 동치성 비교에 더해 순서까지 비교할 수 있고 제네릭하다. Comparable을 구현했다는 건 객체 간의 순서가 있다는 것이다. 순서를 고려해야 하는 값 클래스를

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

[이펙티브 자바] 13. clone 재정의는 주의해서 진행하라

원본 객체의 필드 값과 동일한 값을 가지는 새로운 객체를 생성해주는 메서드clone 메서드는 Cloneable이라는 인터페이스를 implements 해야 쓸 수 있다.하지만 아이러니하게도 clone 메서드는 Cloneable에 선언되어 있지 않고 Object에 선언되어

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

이펙티브 자바 #item 27 비검사 경고를 제거하라

제네릭을 사용하면 비검사 형변환 경고비검사 메서드 호출 경고비검사 매개변수화 가변인수 타입 경고비검사 변환 경고과 같은 경고를 마주칠 수 있다. 대부분은 컴파일러가 알려준대로 처리하면 더 이상 해당 경고는 나타나지 않는다. 즉, 런타임에 ClassCastExceptio

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

이펙티브 자바 #item26 로 타입은 사용하지 마라

우리가 제네릭 타입을 정의할 때와 같이 List<E>로 정의한다. 읽을 때는 List of E 로 읽는다. 그러나 꺽쇠 없이, 매개변수 타입을 정하지 않고 List 타입만을 사용하면 이를 로 타입이라 한다.로 타입을 사용하면 제네릭을 사용한다고 할 수 없다. 그리

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

이펙티브 자바 #item 25 톱레벨 클래스는 한 파일에 하나만 담으라

보통 클래스는 하나의 책임을 가지고 정의한다. 한 파일에 하나의 클래스가 있다면 클래스를 파악하기 쉽고 이해하기 쉽다.실수로 클래스를 중복 정의하게 되면, 컴파일 순서에 따라 에러가 발생하거나 다른 동작을 수행하게 된다.예를 들어보자만약 javac Main.java D

2023년 1월 30일
·
0개의 댓글
·

이펙티브 자바 #item24 멤버 클래스는 되도록 static 으로 만들라

중첩 클래스란 nested class로 불리고 클래스 내부에 선언한 클래스이다. 해당 클래스는 바깥 클래스가 활용하며, 그 외에 활용도가 있다면 다른 톱 클래스로 만들어야 한다.클래스의 종류는 멤버 클래스, 지역 클래스, 정적 멤버 클래스, 익명 클래스 이렇게 4가지이

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

[이펙티브 자바] 12. toString을 항상 재정의하라

toString을 재정의하지 않으면 Object의 기본 toString 메서드를 사용하게 된다. Object의 기본 toString은 클래스이름@16진수로\_표시한\_해시코드가 출력된다. PhoneNumber클래스의 toString은 다음과 같이 재정의 해주면 된다.7

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

이펙티브 자바 #item23 태그 달린 클래스보다 계층 구조를 활용하라

enum 을 이용해 클래스의 Shape을 표현하고 Shape에 따라 area의 분기문이 생긴다. 이 코드의 문제점은 너무 장황하고 메모리가 낭비된다. 타입에 따라 전혀 사용하지 않는 변수가 생기고 area의 코드는 shape 분기마다 계산이 달라지므로 코드가 길어졌다.

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

이펙티브 자바 #item22 인터페이스는 타입을 정의하는 용도로만 사용하라

객체지향의 사실과 오해 라는 책에서 의미를 빌리면 타입은 개념이다. 개념이란 우리가 표현하고자 하는 물체의 본질이라 할 수 있다. 예를 들면 이상한 나라의 엘리스에서 정원사, 병정, 하트퀸, 하트 킹 등은 트럼프 인간으로 볼 수 있고 트럼프 인간은 납작한 트럼프 카드

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

이펙티브 자바 #item21 인터페이스는 구현하는 쪽을 생각해 설계하라

자바 8 이전의 인터페이스는 모든 클래스가 현재의 인터페이스에 새로운 메서드가 추가될 일은 없다는 생각으로 가정하고 작성했다. 그렇기에 메서드를 인터페이스에 추가하면 컴파일 에러가 발생하고 해당 인터페이스를 타입으로 삼는 모든 구현 클래스에 추가된 메서드를 모두 구현해

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

이펙티브 자바 #item20 추상 클래스보다는 인터페이스를 우선하라

자바에서는 다중 구현 메커니즘은 인터페이스와 추상 클래스, 이렇게 2가지이다. 이 둘의 가장 큰 차이는 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다는 점이다. 자바의 경우 단일 상속만 지원하니, 추상 클래스 방식은 새로

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

[Effective Java 스터디 week14] [Item73] 추상화 수준에 맞는 예외를 던지라

수행하려는 일과 관련 없어 보이는 예외가 튀어나오면 당황스러울 것이다. 메서드가 저수준 예외를 처리하지 않고 바깥으로 전파해버릴 때 종종 일어나는 일이다.이는 내부 구현 방식을 드러내어 윗 레벨 API를 오염시킨다.구현 방식을 바꾸면 다른 예외가 튀어나와 기존 클라이언

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

[Effective Java 스터디 week13] [Item69] 예외는 진짜 예외 상황에만 사용하라

예외를 완전히 잘못 사용한 예.전혀 직관적이지 않다는 사실만으로도 코드를 이렇게 작성하면 안된다!무한루프를 돌다가 배열의 끝에 도달해 ArrayIndexOutOfBoundsException를 던지며 끝을 낸다.같은 동작을 유도한 코드이지만 직관적으로 코드가 하는 일을

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

이펙티브 자바 #item19 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지해라

상속은 잘못될 위험성이 있다. 상속은 하위클래스가 상위 클래스를 재사용함과 동시에 추가 또는 새로운 api가 추가될 수 있는 데 이 때 sub 클래스는 super 클래스를 의존하게 된다. 이런 의존이 뜻하지 않은 결과를 만들어 낼 수 있기 때문에 상속의 경우 미리 이를

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