728x90
반응형

Java 80

[Effective Java] 아이템 27. 비검사 경고를 제거하라.

>🎯 아이템 27. 비검사 경고를 제거하라. 비검사 경고 결과 : 위 처럼 영역이 하이라이트로 경고를 보여주는데 이를 비검사 경고라고 한다. 이러한 경고들은 할 수 있는 한 모두 제거하도록 하자. 컴파일러가 알려준 대로 수정 ( 다이아몬드 연산자만으로 해결 ) but. 경고를 제거할 수는 없지만 타입 안전하다고 확신할 수 있다면 @SuppressWarnings("unchecked") 애너테이션을 달아 경고를 숨기자. @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE}) @Retention(RetentionPolicy.SOURCE) public @interface SuppressWarnings { ... } ⭐ @Sup..

Java 2023.03.20

[Effective Java] 아이템 26. 로 타입은 사용하지 말라

🎯 아이템 26. 로 타입은 사용하지 말라 클래스와 인터페이스 선언에 타입 매개변수가 쓰이면, 이를 제네릭 클래스 혹은 제네릭 인터페이스라 한다. 제네릭 클래스 public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable { ... } 제네릭 인터페이스 public interface List extends Collection { ... } 제네릭 클래스와 제네릭 인터페이스를 통틀어 제네릭 타입(generic type)이라 한다. 각각의 제네릭 타입은 일련의 매개변수화 타입(parameterized type)을 정의한다. 제네릭 타입을 하나 정의하면 그에 딸린 로 타입(raw ..

Java 2023.03.20

[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
728x90
반응형