본문 바로가기

이펙티브자바9

인터페이스가 추상 클래스보다 우선인 이유 자바가 제공하는 다중 구현 메커니즘 - Interface (자바 8부터 default 메서드 제공) - Abstract Class 인터페이스와 추상 클래스 공통점 선언 내용은 존재, 하지만 구현 내용은 없음(추상 메서드를 가진다) 인스턴스 생성이 불가하다. 각각의 목적 인터페이스 Has - A 관계 : 함수의 껍데기만 존재하여 구현을 강제화 함 이를 통해 구현 객체가 같은 동작을 하도록 보장 다중 상속 - 여러개의 인터페이스를 구현이 가능하다. 인스턴스 필드를 가질 수 없고, public이 아닌 정적 멤버도 가질 수 없다(자바 9 부터 private static 메서드 구현 가능) 추상 클래스 IS - A 관계 : 추상 클래스를 상속하여 해당 클래스의 기능을 이용하고 또는 기능을 추가한다. 다중 상속 -.. 2022. 2. 6.
불필요한 객체 생성 피하는 방법 static boolean isRomanNumeral(String s) { return s.matches(" ... "); } # 정적 팩토리 메서드 방법 똑같은 기능을 제공하는 객체를 반복적으로 생성하는 것보다 객체 하나를 재사용하는 것이 더 효율적 /* 실행될 때마다 new 를 통해 새로운 인스턴스 생성 - 쓸데없는 String 인스턴스가 계속해서 생성된다. */ String s = new String("Xonmin"); /* 하나의 String 인스턴스 생성 JVM 안에서 이와 똑같은 문자열 리터럴을 사용하는 모든 코드는 같은 객체를 재사용하게 된다. */ String s = "Xonmin"; 생성자 대신 정적 팩토리 메서드를 통해 불변 클래스에서 불필요한 객체 생성 회피 가변 객체라고 해도 사용 .. 2022. 1. 9.
정적 팩토리 메서드 [ static factory method ] 기존 방법 : Client → instance of Class 획득 → public 생성자로 가져오기 public void main(String[] args){ Hello hello = new Hello(); // new Hello() -> 인스턴스 가져오기 hello = new Hello("xonmin"); // 다른 public 생성자 } public class Hello{ //아무것도 생성되지 않으면 default Constructor String name ; public Hello(String name){ this.name = name; } } 정적 팩토리 메소드 예시 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Bool.. 2022. 1. 1.