Home
Dohyun's Blog
Cancel

Item27 (비검사 경고를 제거하라)

비검사 경고를 제거하라 제네릭을 사용하면 수많은 컴파일러 경고를 보게 된다. 이전 아이템에서 로 타입을 사용했을 때 Coin 타입을 넣었던 것을 생각해보면 된다. 비검사 형변환 경고, 비검사 메서드 호출 경고, 비검사 변환 경고 등등이 있다. 대부분의 비검사 경고는 쉽게 제거할 수 있다. 인텔리제이 기준으로는 위와 같이 무엇이 잘못됐고, ...

Item26 (로(raw) 타입은 사용하지 말아라)

이번 아이템부터는 제네릭에 대해 다룬다. 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때 마다 형변환을 해야했다. 제네릭을 사용함으로써 타입을 사용하는 부분이 많이 편리해지고, 오류를 찾기도 쉬워졌다. 하지만 코드가 복잡해진다는 단점이 있었다. 이번 아이템부터는 제네릭의 이점은 살리면서 단점은 최소화하는 방법들을 다룬다. 로(raw) 타입은...

Item25 (톱레벨 클래스는 한 파일에 하나만 담아라)

톱레벨 클래스는 한 파일에 하나만 담아라 소스 파일 하나에 톱레벨 클래스가 여러 개 있어도 컴파일러에서 문제를 일으키지는 않는다. 하지만 아무런 득이 없고, 위험을 감수해야 한다. 톱 레벨 클래스 함수, 클래스 또는 무언가로 감싸지지 않은 모든 구문을 톱 레벨이라고 한다. 즉, 톱 레벨 클래스는 중첩 클래스가 아닌 바깥 클래스를 뜻한다...

Item24 (멤버 클래스는 되도록 static으로 만들어라)

멤버 클래스는 되도록 static으로 만들어라 지난 아이템에서 중첩 클래스에 대한 부분을 보았다. 톱 클래스에서만 사용하는 클래스라면 내부에 private static으로 선언해 접근 권한을 최소화하기도 했다. 중첩 클래스는 이렇게 자신을 감싼 바깥 클래스에서만 쓰여야 한다. 이러한 중첩 클래스의 종류는 4가지가 있다. 정적 멤버 클래스...

Item23 (태그 달린 클래스보다는 클래스 계층 구조를 활용하라)

태그 달린 클래스보다는 클래스 계층 구조를 활용하라 우선 태그 달린 클래스가 무엇인지 알아보자. class Figure { enum Shape { RECTANGLE, CIRCLE }; final Shape shape; // 태그 필드 double length; // 도형이 사각형일때만 사용하는 필드들 double width; dou...

진행중인 프로젝트 참여하기 (남이 만든 코드에 들어가기)

이번에 개발이 진행중이고 곧 스토어에 출시할 어플을 만드는 사이드 프로젝트에 참여하게 됐다. 여태까지 프로젝트를 진행했을 때 서비스 구상, 설계까지 초기부터 진행해왔었기 때문에 기존에 진행되던 프로젝트에 참여해보는 것은 처음이다. 어떻게 전체 구조를 파악하고 초기에 중요한 부분들을 어떻게 파악할지 알아보자. 첫 시작 - 프로젝트 온보딩 전체적으...

Item22 (인터페이스는 타입을 정의하는 용도로만 사용하라)

인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 이 말 뜻은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 알려주는 것이다. 인터페이스는 오로지 이 용도로만 사용되어야 한다. 인터페이스의 잘못된 사용 인터페이스를 어떻게 다른 용도로 잘못 사용하는지 보자. ...

Item21 (인터페이스는 구현하는 쪽을 생각해 설계하라)

인터페이스는 구현하는 쪽을 생각해 설계하라. 자바 8 이전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었다. 인터페이스에 메서드를 추가하면 보통은 컴파일 오류가 난다. 당연하게도 해당 인터페이스를 구현하는 클래스에 추가한 메서드가 있을 확률이 적기 때문이다. 그래서 등장한 것이 디폴트 메서드이다. 인터페이스 구현 클래...

Item20 (추상 클래스보다는 인터페이스를 우선하라.)

추상 클래스보다는 인터페이스를 우선하라. 자바는 추상 클래스와 인터페이스라는 일종의 타입을 제공하는 다중 구현 메커니즘을 제공한다. 자바 8부터는 인터페이스도 디폴트 메서드를 제공할 수 있게 되어 두 메커니즘 모두 인스턴스 메서드를 구현 형태로 제공할 수 있다. 둘의 차이점을 보자. 차이점 추상 클래스 ...

Item19 (상속을 고려해 설계하고 문서화하라. 그렇지 않으면 상속을 금지하라.)

상속을 고려해 설계하고 문서화하라. 그렇지 않으면 상속을 금지하라. 이전 아이템에서 상속을 염두에 두지 않고 설계한 상태로 어떤 클래스를 상속할 때 발생하는 문제 또한 문서화해놓지 않은 외부 클래스를 상속할 때의 위험성이 주된 이유였다. 어떤 동작을 모르고 하위 클래스에서 재정의 혹은 새로운 구현을 했다가 상위 클래스의 변경 때문에 하위 클래스에서...