전체 글160 [effective java] item 12. toString을 항상 재정의하라 결론 모든 구체 클래스에서 Object의 String을 재정의하자. 단, 상위 클래스에서 이미 알맞게 재정의한 경우는 예외다. toString을 재정의한 클래스는 사용하기도 즐겁고 그 클래스를 사용한 시스템을 디버깅하기 쉽게 해준다. toString은 해당 객체에 관한 명확하고 유용한 정보를 읽기 좋은 형태로 반환해야 한다. toString의 반환값 포맷을 문서화하는 것은 선택이다. AutoValue 프레임워크를 사용하여 자동 생성하는 방법도 있지만, 직접 작성하는 것이 가장 좋고 재정의하지 않는 것보단 좋다. PhoneNumber 클래스 예제 public final class PhoneNumber { private final short areaCode, prefix, lineNum; ... /** * .. 2023. 8. 1. [effective java] item 11. equals를 재정의하려거든 hashCode도 재정의하라 결론 equals를 재정의했다면, hashCode도 규약을 지켜 재정의해야 한다. 그렇지 않으면, 해당 클래스의 원소를 HashMap이나 HashSet과 같은 컬렉션의 원소로 사용할 때 문제가 발생한다. 이때, equals와 hashCode 메서드를 AutoValue 프레임워크로 자동으로 생성하는 방법도 있다. IDE들도 이런 기능을 일부 제공한다. PhoneNumber 클래스 예제: 전형적인 hashCode 메서드 public final class PhoneNumber { private final short areaCode, prefix, lineNum; ... @Override public boolean equals(Object o) { if (o == this) return true; if (!(o.. 2023. 7. 31. [effective java] item 10. equals는 일반 규약을 지켜 재정의하라 결론 꼭 필요한 경우가 아니면 equals를 재정의하지 말자. 많은 경우에 Object의 equals가 여러분이 원하는 비교를 정확히 수행해준다. 정의해야할 때는 그 클래스의 핵심 필드 모두를 빠짐없이, 다섯 규약을 확실히 지켜가며 비교해야 한다. AutoValue 프레임워크를 사용하거나, IDE를 이용하는 것도 방법이다. AutoValue > IDE > 직접 작성 전형적인 equals 메서드의 예 (64쪽) public final class PhoneNumber { private final short areaCode, prefix, lineNum; public PhoneNumber(int areaCode, int prefix, int lineNum) { this.areaCode = rangeCheck(.. 2023. 7. 31. [effective java] item 9. try-finally보다는 try-with-resources를 사용하라 결론 닫아야 하는 자원을 다룰 때는 try-finally 말고, try-with-resources를 사용하자. 예외는 없다. 코드는 더 짧아지고 분명해지며, 스택 추적 내역에 예외가 남겨지기 때문에 훨씬 유용하다. 단, 자원이 AutoCloseable 인터페이스를 구현해야 한다. try-with-resources + catch 예제 import java.io.*; public class Copy { private static final int BUFFER_SIZE = 8 * 1024; static void copy(String src, String dst) throws IOException { try (InputStream in = new FileInputStream(src); OutputStream o.. 2023. 7. 30. [Spring] 스프링 예제 - 주문과 할인2 (SRP, OCP, DIP 적용) https://wngml56.tistory.com/217 [Spring] 스프링 예제 - 주문과 할인1 (OCP와 DIP 미 적용) 비지니스 요구사항 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수도 있다. (미 확정) 주문과 wngml56.tistory.com 와 이어지는 글입니다. 목차 할인 정책의 변경 서비스 오픈 직전, 갑자기 기획자가 기존의 고정 할인 정책에서 정률 % 할인으로 변경을 하고 싶다고 요청을 해왔습니다. 기획자 : 할인 정책을 지금처럼 고정 금액 할인 정책이 아니라, 더 합리적이게 주문 금액당 할인하는 정률 % 할인으로 변경하고 싶어요. 예를 들어서 기존 정책은 VIP가 만원을.. 2023. 7. 28. [Spring] 스프링 예제 - 주문과 할인1 (OCP와 DIP 미적용) 목차 비지니스 요구사항 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수도 있다. (미확정) 주문과 할인 회원은 상품을 주문할 수 있다 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해 달라. 하지만, 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했다. 오픈 직전까지 고민을 미루고 싶고, 최악의 경우 할인을 적용하지 않을 수도 있다. (미확정) 요구사항의 미확정: DB, 할인 정책 요구사항을 보면 회원 데이터, 할인 정책은 지금 결정하기 어려운 부분입니다. 그렇다고, 정책이 결정될 때까지 개발을 무기.. 2023. 7. 28. 이전 1 ··· 9 10 11 12 13 14 15 ··· 27 다음