본문 바로가기

개발 공부/Java58

이펙티브 자바 아이템 6 - 불필요한 객체 생성을 피하라 - 핵심 정리 아이템 6 - 불필요한 객체 생성을 피하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 주의할 점은 객체 생성은 비싸니 피하라 는 뜻이 아니다. 불필요하게 동일한 기능을 함에도 여러번 생성하는 경우가 있는 이런 상황을 피하도록 하자. 문자열 public class Strings { public static void main(String[] args) { String hello = "hello"; //TODO 이 방법은 권장하지 않습니다. String hello2 = new String("hello"); String hello3 = "hello"; System.out.println(hello == hello2); // false - 같은 .. 2022. 9. 22.
이펙티브 자바 아이템 5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 - 완벽 공략 아이템 5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. public class SpellChecker { private final Dictionary dictionary; public SpellChecker(Dictionary dictionary) { this.dictionary = dictionary; } public boolean isValid(String word) { // TODO 여기 SpellChecker 코드 return dictionary.contains(word); } public List suggestions(String typo) { // TODO 여기 Spel.. 2022. 9. 22.
이펙티브 자바 아이템 5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 - 핵심 정리 아이템 5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 모든 경우에 의존 객체 주입을 사용하는 것이 아니라 사용하는 자원에 따라 동작이 달라지는 클래스의 경우에는 의존 객체 주입을 사용해야한다. public class Dictionary { public boolean contains(String word) { return true; } public List closeWordsTo(String typo) { return Arrays.asList(typo); } } Dictionary 클래스가 있고 public class SpellChecker { private static final.. 2022. 9. 21.
이펙티브 자바 아이템 4 - 인스턴스화를 막으려거든 private 생성자를 사용하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 아이템 4 - 인스턴스화를 막으려거든 private 생성자를 사용하라 - 핵심 정리 인스턴스를 만들지 않는 걸 권장하는 경우가 있다. 특히 유틸리티성 클래스가 이에 해당한다. static 메서드만 가지고 있는 클래스들을 유틸리티성이라고 한다. 대표적으로는 StringUtils 클래스가 있다. public class UtilityClass { public static String hello() { return "hello"; } } static 메서드만 가지고 있는 클래스가 있다. public static void main(String[] args) { String hello = UtilityClass.hel.. 2022. 9. 20.
이펙티브 자바 아이템 3 - 생성자나 열거 타입으로 싱글턴임을 보증하라 - 완벽 공략 이펙티브 자바 아이템 3 - 생성자나 열거 타입으로 싱글턴임을 보증하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 메서드 참조 메소드 하나만 호출하는 람다 표현식을 줄여쓰는 방법이다. 스태틱 메소드 레퍼런스 public class Person { LocalDate birthday; public Person() { } public Person(LocalDate birthday) { this.birthday = birthday; } public int getAge() { return LocalDate.now().getYear() - birthday.getYear(); } public static int compareByAge(Person .. 2022. 9. 20.
이펙티브 자바 아이템 3 - 생성자나 열거 타입으로 싱글턴임을 보증하라 - 핵심 정리 아이템 3 - 생성자나 열거 타입으로 싱글턴임을 보증하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 애플리케이션을 만들다보면 어떤 인스턴스가 애플리케이션에서 하나만 있어야 하는 경우 혹은 하나만 꼭 유지해야하는 경우가 있다. 예를들어 어떤 설정값을 저장하는 인스턴스 등이 있다. 이러한 상황일 때 사용하는 것이 싱글턴이다. 싱글턴을 만드는 방법은 여러가지가 있다. 첫번째 : private 생성자 + public static final 필드 public class Elvis { /** * 싱글톤 오브젝트 */ public static final Elvis INSTANCE = new Elvis(); private Elvis() {} publ.. 2022. 9. 15.
이펙티브 자바 아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 - 완벽 공략 아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 자바 빈 (주로 GUI에서) 재사용 가능한 소프트웨어 컴포넌트이다. GUI에서 이루어지는 프로퍼티 값을 읽어오거나 값을 저장하거나 하는 등 모든 것들을 정의한게 자바 빈 스펙이다. 자바 빈이 지켜야할 규약에는 다음과 같다. 아규먼트 없는 기본 생성자 아규먼트 없는 기본 생성자를 사용하는 이유는 자바 빈을 사용하는 곳에서 객체를 만들기 쉽게 하기 위해서이다. 자바 빈은 리플렉션을 통해서 객체를 만들고 값을 주입하기 때문에 생성자에 아규먼트가 있으면 리플렉션으로 객체를 만들기가 까다로워진다. getter와 setter 메소드 이름 규약 자바.. 2022. 9. 7.
이펙티브 자바 아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 - 핵심 정리 아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 생성자에 매개변수가 많다면 빌더를 고려하자. public class NutritionFacts { private final int servingSize; // 필수 private final int servings; // 필수 private final int calories; // 선택 private final int fat; // 선택 private final int sodium; // 선택 private final int carbohydrate; // 선택 public NutritionFacts(int servingSize, int s.. 2022. 9. 5.
이펙티브 자바 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 - 완벽 공략 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 열거 타입 = Enumeration Enum 이란 상수 목록을 담을 수 있는 데이터 타입이다. public enum OrderStatus { ORDERED, SHIPPED, DELIVERED } 가령 주문의 상태를 나타내는 필드가 있다고 가정해보면 public class Order { private boolean prime; private boolean urgent; private OrderStatus status; public static Order primeOrder() { Order order = new Order(); order... 2022. 8. 26.
이펙티브 자바 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 - 핵심 정리 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 생성자 대신정적 팩터리 메서드를 고려하자. 주의할 점은 고려하자 이지 강제하는 것이 아니다. 장점 이름을 가질 수 있다. 가령 주문자에게 긴급건으로 배달을 해야하는 주문이 있다고 하자. 자바에서는 동일한 시그니처의 생성자를 두개 가질 수 없기때문에 아래의 코드는 오류가 발생하게 된다. public class Order { private boolean prime; private boolean urgent; public Order(boolean prime) { this.prime = prime; } public Order(boolean ur.. 2022. 8. 22.