Java & Kotlin
-
디미터 법칙(Law of Demeter)을 위반한 코드 개선하기Java & Kotlin 2023. 3. 8. 18:51
최근 취업 준비로 여러 회사에 지원하였고, 사전 과제를 진행하였다. 나름 시간을 들여 잘 작성했다고 생각했지만 불합격 메일을 받았고 그에 대한 피드백으로 몇 가지 이유를 들어주셨다. 오늘은 그 중에 한 가지인 디미터 법칙에 대해서 알아보고 코드를 개선해 보고자 한다. 역시 좋은 코드를 유지하고 자신의 문제점을 파악하기 위해서 코드 리뷰를 통한 피드백은 중요하다는 걸 다시 한번 느꼈다. 먼저 문제의 코드를 살펴보자. 도메인 모델은 member(회원)와 post(게시물)가 있고, member는 여러 개의 post를 게시할 수 있기 때문에 둘은 1:N 관계를 가진다. 이번 과제에서 application과 DB의 데이터 매핑을 위해 ORM인 JPA를 사용하였고, post가 member_id를 foreign ke..
-
[이펙티브 자바 : 2장] 모든 객체의 공통 메서드Java & Kotlin 2020. 6. 24. 09:30
[ITEM 10] equals는 일반 규약을 지켜 재정의하라 equals 메서드는 재정의하기 쉬워 보이지만 함정이 많아 잘못 재정의하면 끔찍한 결과를 초래한다. 재정의 하지 않으면 오직 자기 자신과만 같게 된다. equals를 재정의하지 않는 것이 최선인 상황 상황 1 : 각 인스턴스가 본질적으로 고유하다. 값을 표현하는 게 아니라 동작하는 개체를 표현하는 클래스가 여기 해당한다. Thread가 좋은 예로, Object의 equals 메서드는 이러한 클래스에 딱 맞게 구현되었다. 상황 2 : 인스턴스의 '논리적 동치성(logical equality)'을 검사할 일이 없다. 예컨대 java.util.regex.Pattern은 equals를 재정의해서 두 Pattern의 인스턴스가 같은 정규표현식을 나타내는..
-
[이펙티브 자바 : 1장] 객체 생성과 파괴Java & Kotlin 2020. 6. 21. 17:15
[ITEM1] 생성자 대신 정적 팩터리 메서드를 고려하라 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } * 디자인 패턴에서의 팩터리 메서드(Factory Method)와 다르다. 장점 1 : 이름을 가질 수 있다. 생성자 BigInteger(int, int, Random)에 비해 정적 팩터리 메서드인 BigInteger.probablePrime()은 '값이 소수인 BigInteger를 반환한다'라는 의미를 더 잘 설명한다. 이름을 가질 수 있는 정적 팩터리 메서드에는 시그니처1에 대한 제약이 없다. 한 클래스에 시그니처가 같은 생성자가 여러 개 필요할 것 같으면, 생성자를 정적 팩터리 메서드로 바꾸..