개발로그

Item 25 - 톱레벨 클래스는 한 파일에 하나만 담으라

소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러는 불평하지 않는다. 하지만 아무런 득이 없을 뿐더러 심각한 위험을 감수해야 한다. 한 클래스를 여러 가지로 정의할 수 있다. 그 중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라진다. 두 클래스가 한 파일...

Item 24 - 멤버 클래스는 되도록 static으로 만들어라

중첩 클래스 (nested class) 중첩 클래스는 다른 클래스 안에 정의된 클래스를 말한다. 자신을 감싼 바깥 클래스에서만 쓰여야한다. 정적 멤버 클래스, (비정적) 멤버 클래스, 익명 클래스, 지역 클래스 정적 멤버 클래스 다른 클래스 내부에서 static으로 선언된 클래스 다른 정적 멤버와 똑같은 접근 규칙을 적용받는다...

Item 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라

디폴트 메서드의 도입 자바 8 이전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었다. 자바 8부터는 디폴트 메서드가 소개되면서 기존 인터페이스에 메서드를 추가할 수 있게 되었다. 그러나 이렇게 추가된 디폴트 메서드가 모든 기존 구현체들과 매끄럽게 연동되리라는 보장은 없다. 디폴트 메서드 추가 시 주의...

Item 20 - 추상 클래스보다는 인터페이스를 우선하라

인터페이스의 장점 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있다. 기존 클래스에 손쉽게 새로운 인터페이스를 구현해 넣을 수 있다. BUT, 추상 클래스는 그렇지 않다. 새로 추가된 추상 클래스의 모든 자손이 상속 구조를 가지면서 혼란을 준다. 인터페이스는 믹스인(mixin) 정의에 안...

Item 19 - 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라

상속을 고려한 설계와 문서화 📃 (1) 상속용 클래스는 내부 구현을 문서로 남겨야 한다. 상속용 클래스는 재정의 할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야 한다. 아래와 같이 @implSpec 태그를 이용해서 불필요하게 내부 구현 방식을 설명해야 한다. (2) 클래스의 내부 동작 과정 중간에 끼어 들어갈 수 있...