이펙티브 자바(6)
-
(Effective Java) equals는 일반 규약을 지켜 재정의하라
Java를 쓰는 분들은 equals메서드를 모르지 않을 것이다. 가장 널리 쓰이는 곳이 바로 String이다. String의 equals 코드를 보자. public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String aString = (String)anObject; if (coder() == aString.coder()) { return isLatin1() ? StringLatin1.equals(value, aString.value) : StringUTF16.equals(value, aString.value); } } return false; } Stri..
2022.09.27 -
(Effective Java) 의존 객체 주입(DI), 의존 객체 주입 패턴
자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 의존 객체 주입 패턴은 아주 단순하여 수많은 프로그래머가 이 방식에 이름이 있다는 사실도 모른 채 사용해왔다. 많은 클래스가 하나 이상의 자원에 의존한다. 책의 예제를 살펴보자. public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} public static boolean isValid(String word) {...} public static List suggestions(String typo) { ... } } 이 예제는 정적 팩터리 메서드를 사용해서 구현한 예시이다. 실제로 사용할때는 이런 식으로 사용할 것이다. publi..
2022.09.20 -
(Effective Java) 인스턴스 생성 막기
인스턴스 생성을 막는다니 무슨말인가? 인스턴스가 필요 없다니! 그런 클래스가 필요해?라는 의문이 든다면 자바 기본 패키지를 한 번도 까보지 않은 것임이 틀림 없다. 책에서 소개하는 Collections나 Arrays처럼 인스턴스 생성을 막아놓은 클래스가 존재하기 때문이다. 🧐 인스턴스 생성을 막는 방법 인스턴스 생성은 어떻게 하면 막을 수 있을까? 먼저 인스턴스가 어떻게 생성되는지를 알면 쉽다. 인스턴스를 생성하려면 '생성자'가 필요하다. 다른 클래스에서 생성자 호출이 가능하려면(최소 같은 패키지) 생성자가 private이면 안 된다. 그럼 간단하다. 생성자를 private으로 만들어버리면 된다. 아래 코드를 보자. public class Calculator { private Calculator() {}..
2022.09.20 -
(Effective Java) 싱글턴 패턴을 만드는 방법 + 싱글턴 패턴
private 생성자나 열거 타입으로 싱글턴임을 보증하라. 이펙티브 자바 아이템 3에서는 싱글턴에 대해서 간략하게 설명하고 있다. 싱글턴은 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 스프링 사용자들은 싱글턴에 대해서 알고 있을 것이다. 왜냐하면 스프링의 컨테이너가 객체를 싱글턴으로 관리하기 때문이다. 각설하고 싱글턴을 만드는 방식에 대해서 책에서는 2가지를 소개하고 있다. 🧐public static final 필드 방식의 싱글턴 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public void leaveTheBuilding() { ... } } Elvis.INSTAN..
2022.09.20 -
(Effective Java) 생성자 대신 정적 팩터리 메서드를 고려하라
클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자다. 이 외에도 클래스 인스턴스를 반환하는 다양한 방법이 있고, 이 문서에서는 에 나온 정적 팩터리 메서드에 대해서 소개하려 한다. 책에서도 언급했지만 디자인 패턴에 있는 팩터리 메서드와는 다르다. (팩터리 메서드는 OCP를 목적으로 하고 있고, 정적 팩터리 메서드는 클래스 인스턴스 반환을 목적으로 한다.) 먼저 팩터리 메서드의 장점에 대해서 알아보자. 👍 이름을 가질 수 있다 기존의 생성자 코드를 살펴보자. @Getter class Book { private String name; private String author; public Book() {}; public Book(String name, String author) { th..
2022.09.19 -
(TIL) 20220416, 효율적으로 스터디 하는 방법
🏴Facts(한 것) 실용주의 프로그래머 정리 이사 완료 코드숨 스터디 하는 방법 세션 참여 🏴Findings(배운 것) 어떻게 하면 스터디를 효율적으로 할 수 있는가? 1. 질문을 만들고 답하기 스터디를 시작하고, 오늘 진행하는 부분에 대해서 공부하며 질문을 만든다. (여러사람이 참여할 수록 빛을 발한다.) 만든 질문에 대해 답하는 시간을 가진다. 스스로 질문에 대한 답을 적어보고, 잘 적지 못하겠다면 다른사람의 도움을 빌리자! (커뮤니티로 성장하면 좋은 이유이다.) 2. 같이 정리하기 진행한 스터디를 회고하는 것이다. 오늘은 뭘 진행했지? 어떤 내용을 알게 되었지? 등에 대해서. 3. 시험치기 질문을 여러개 만들었으면, 정기적으로 시험을 치는게 좋다. 문제은행식으로 진행해도 좋고, ..
2022.04.17