본문 바로가기

Reading

(65)
[Effective-Java] Item 25. 톱레벨 클래스는 한 파일에 하나만 담으라 소스 파일 하나에 톱레벨 클래스를 여러 개 선언해도 컴파일 에러가 발생하진 않는다. /** Main.java **/ public class Main { public static void main(String[] args) { System.out.println(Utensil.NAME + Dessert.NAME); } } /** Dessert.java **/ class Utensil { static final String NAME = "pot"; } class Dessert { static final String NAME = "pie"; } /** Utensil.java **/ class Utensil { static final String NAME = "pan"; } class Dessert { stati..
[Effective-Java] Item 24. 멤버 클래스는 되도록 static으로 만들라 *소스는 길어져 깃허브 링크로 첨부 중첩 클래스(nested class)란 다른 클래스 안에 정의된 클래스를 말한다. 자신을 감싼 바깥 클래스에서만 쓰여야 하며 그 외의 쓰임새가 있다면 톱레벨 클래스로 만들어야 한다. 중첩 클래스의 종류는 네 가지가 있으며 정적 멤버 클래스를 제외한 나머지는 내부 클래스(inner class)에 해당한다. 정적 멤버 클래스 다른 클래스 안에 선언되고 바깥 클래스의 private 멤버에도 접근할 수 있다는 점을 제외하곤 일반 클래스와 똑같다. 정적 멤버 클래스는 다른 정적 멤버와 똑같은 접근 규칙을 적용받고, private을 선언하면 바깥 클래스에서만 접근할 수 있는 식이다 바깥 클래스와 함께 쓰일 때만 유용한 public 도우미 클래스로 쓰인다. ex) Calculato..
[Effective-Java] Item 23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라 *참고: 예제니까 접근자 메소드 없이 필드를 직접 노출한 것 뿐이다. 게터 세터! 태그 달린 클래스의 단점 두 가지 이상의 의미를 표현할 수 있으며 현재 표현하는 의미를 태그 값으로 알려주는 클래스가 태그 달린 클래스다. class Figure { enum Shape { RECTANGLE, CIRCLE }; // 태그 필드 - 현재 모양 final Shape shape; // 사각형(RECTANGLE)일 때만 쓰인다. double length; double width; // 원(CIRCLE)일 때만 쓰인다. double radius; // 원용 생성자 Figure(double radius) { shape = Shape.CIRCLE; this.radius = radius; } // 사각형용 생성자 Figu..
[Effective-Java] Item 22. 인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 이 지침에 맞지 않는 예로 상수 인터페이스라는 것이 있다. 메소드 없이 static final 필드로만 가득찬 인터페이스를 말한다. 상수들을 사용하려는 클래스에서는 정규화된 이름을 쓰는걸 피하고자 이런 인터페이스를 구현하곤 한다. public interface PhysicalConstants { static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 아보가드로 수 (1/몰) static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23; // 볼츠만 상수 (J/K) static final double ELECTRON_MASS = 9..