728x90
반응형

Effective Java 67

[Effective Java] 아이템 25. 톱레벨 클래스는 한 파일에 하나만 담으라.

🎯 아이템 25. 톱레벨 클래스는 한 파일에 하나만 담으라. javac Main.java Dessert.java // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package com.quecode.chapter4; public class Main { public Main() { } public static void main(String[] var0) { System.out.println("pancake"); } } javac Main.java Utensil.java // // Source code recreated from a .class file by Intelli..

Java 2023.03.20

[Effective Java] 아이템 24. 맴버 클래스는 되도록 static으로 만들라.

🎯 아이템 24. 맴버 클래스는 되도록 static으로 만들라. 예제 ) 빌더 패턴 public class Member { private long mbrSn; private String mbrId; private String mbrPw; private String mbrNm; public Member(Builder builder) { this.mbrSn = builder.mbrSn; this.mbrId = builder.mbrId; this.mbrPw = builder.mbrPw; this.mbrNm = builder.mbrNm; } public static Builder builder(String id, String pw) { return new Builder(id, pw); } public stati..

Java 2023.03.20

[Effective Java] 아이템 23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라.

🎯 아이템 23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라. 태그 달린 클래스 - 클래스 계층구조보다 훨씬 나쁘다! public 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; } // 사각형용 생성자 Figure(double length,..

Java 2023.03.20

[Effective Java] 아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라.

🎯 아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라. ⭐ 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 잇는 타입 역할을 한다. 달리 말해, 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 애기해주는 것이다. 인터페이스는 오직 이 용도로만 사용해야한다. 상수 인터페이스 안티패턴 - 사용 금지! public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 볼츠만 상수 (J/K) static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23; // 전자 질..

Java 2023.03.20

[Effective Java] 아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라.

⭐ 자바 8에 와서 기존 인터페이스에 메서드를 추가할 수 있도록 디폴트 메서드를 소개했지만 그 위험이 완전히 사라진 것은 아니다. 자바 8에서는 핵심 컬렉션 인터페이스들에 다수의 디폴트 메서드가 추가되었다. 주로 람다를 활용하기 위해서다. 하지만, 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어려운 법이다. 자바 8의 Collection 인터페이스에 추가된 디폴트 메서드 default boolean removeIf(Predicate

Java 2022.05.24

[Effective Java] 아이템 20. 추상 클래스보다는 인터페이스를 우선하라.

⭐ 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다. public class Marine implements GroundAttackUnit, Comparable { private String name; private int health; @Override public int compareTo(Marine o) { return Integer.compare(health, o.getHealth()); } /* 인터페이스 override 생략 */ ... /* getter, setter 생략 */ ... } 이처럼 자바 플랫폼에서도 Comparable, Iterable, AutoCloseable 인터페이스가 새로 추가됐을 때 표준 라이브러리의 수많은 기존 클래스가 이 인터페이스들을 구현한 채 릴리..

Java 2022.05.24
728x90
반응형