기술서적 4

EFFECTIVE JAVA3 - 3장. 모든 객체의 공통 메서드

아이템 10. equals는 일반 규약을 지켜 재정의하라 일반적으로 equals를 재정의하지 않는 것이 가장 좋다. 🔸 equals를 재정의 하지 않아도 될 때 각 인스턴스가 본질적으로 고유할 때 - Thread 싱글톤 인스턴스 Enum 🔸 equals를 재정의 할 때 지켜야 할 규약 (null이 아닌 참조 값) 반사성 : x.equals(x)는 true이다. 대칭성 : x.equals(y)는 true이다. 추이성 : x.equals(y)가 true이고, y.equals(z)가 true이면, x.equals(z)는 true이다. 일관성 : x.equals(y)를 반복해서 호출하면 항상 같은 값을 반환한다. null-아님 : x.equals(null)은 false이다. 구체 클래스를 확장해 새로운 값을 추..

기술서적 2022.04.15

EFFECTIVE JAVA3 - 2장. 객체 생성과 파괴

EFFECTIVE JAVA3를 읽고 내용을 정리해보려고 한다. 이번 장은 객체의 생성과 파괴를 다룬다. 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법 제때 파괴됨을 보장하고 파괴 전에 수행해야 할 정리 작업을 관리하는 요령 아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라 여기서 얘기하는 정적 팩터리 메서드는 디자인 패턴의 팩토리 메서드와 다르다. 장점 👍 1. 이름을 가질 수 있다. ❌ Bad BigInteger(int, int, Random) ✅ Good BigInteger.probablePrime(int, int, Random) "값이 소수인 BigInteger를 반환한다" 라는 보다 명확한 의미 전달이 가능하다.2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 이 덕분..

기술서적 2022.04.15

Clean Code - #3장. 함수

작게 만들어라 얼마나 짧아야 좋을까? 작을 수록 좋다. 중첩 구조가 생길만큼 함수가 커지면 좋지 않다. if/else, while문 등에 들어가는 블록은 한 줄이어야 한다. 다시 말해 블록 안이 두 줄 이상이 된다면 함수로 추출하고 함수 이름을 적절히 짓자. 한가지만 해라 함수는 한가지 일만 해야하며, 함수 내 추상화 수준은 하나로 맞추면 된다. 하지만 추상화 수준이 하나인 함수를 구현하기란 쉽지 않다. 핵심은 짧으면서도 한가지 일만 하는 함수이다. switch 문 다형성을 이용하여 각 switch 문을 저차원 클래스에 숨기고 절대로 반복하지 않는 방법이 있다. 아래 Bad 코드에는 직원 타입 별로 Pay를 계산하는 switch 문이 존재한다. 여기서 많은 문제가 있지만 가장 큰 문제는 아래 switch..

기술서적 2022.04.08

Clean Code - #2장. 의미 있는 이름

clean code 라는 책을 읽고서 일부 내용을 정리하려고 한다. 2장. 의미 있는 이름 의도를 분명히 밝혀라 그릇된 정보를 피하라 실제 컨테이너가 List일지라도 컨테이너 유형을 이름에 넣지 않는 편이 좋다. ❌ Bad List accountList = new ArrayList(); ✅ Good List accounts = new ArrayList(); 변수명을 소문자 l이나 대문자 O를 사용하는 것은 가독성면에서 최악이다. 의미 있게 구분하라 Product라는 클래스가 있다고 가정해보자. 여기에 ProductInfo나 ProductData와 같은 클래스를 추가한다면 개념 구분 없이 이름만 달리한 경우다. -Info, -Data는 아무런 정보도 주지 못한다. Product1, Product2 와 마찬..

기술서적 2022.04.07