Programming/Java

    package-info.java란

    서론 팀 내 코드리뷰를 하다 패키지에 package-info.java 파일이 존재한다는 사실을 알게 되었습니다. package-info.java가 무엇인지 잘 몰랐기에 이번 기회에 알아보고자 합니다. package-info.java란 package-info는 모든 Java 패키지에 추가할 수 있는 Java 파일입니다. package-info.java 파일은 2가지 목적으로 사용됩니다. 패키지 단위의 문서 작성 패키지 단위의 애노테이션 적용 1) 패키지 단위의 문서 작성 JDK5 이전에는 package.html을 통해 패키지 단위의 Javadoc 코멘트를 body 태그 안에 작성했습니다. 그러나 JDK5 이후에는 package-info.java가 등장해 package.html의 역할을 대신하기 시작했습니다..

    JPA Entity의 equals와 hashCode

    문제가 발생한 코드 상황 코치의 스케쥴을 업데이트하는 로직에서 Entity의 equals와 hashCode를 재정의하지 않아 List의 contains 메서드가 항상 false인 문제가 발생했다. 요약 equals와 hashCode를 재정의하지 않으면 어떤 문제가 발생하는지 알아본다. 또한, JPA의 Entity에서 equals와 hashCode를 재정의하지 않으면 어떻게 동작하는지 알아본다. 원인 위 문제는 equals를 재정의하지 않아 생긴 문제였다. List 내의 Schedule들은 모두 비영속 상태이므로 JPA와 상관없이 순수 자바 로직 문제이다. contains 메서드는 내부적으로 .equals() 동등 비교를 진행한다. 내부 요소 중 인자로 받은 값과 .equals() 비교를 진행했을 때 tr..

    Optional

    서론 면접 질문으로 Optional에 대한 꼬리질문을 받았다. 옵셔널에 대한 소개와 이점 null을 그냥 반환하면 안되나요? 옵셔널 처리 방법? 옵셔널을 사용하면서 주의해야할 점은? 인텔리제이 옵셔널을 파라미터로 넣으면 경고가 뜨는데 왜그럴까? 꼬리 질문에 대해 제대로 답변하지 못했기에 Optional을 다시 공부하는 마음가짐으로 이 글을 작성하게 되었다. NullPointerException 피하기 NullPointerException는 골치 아픈 문제이다. 1965년 처음으로 null을 도입한 토니 호어(Tony Hoare)도 null을 만들었을 때를 회상하며, 이는 10억 달러짜리 실수라고 했다. null 때문에 발생할 수 있는 문제는 아래 예제를 통해 살펴보자. public class Person..

    컨트롤러는 상태를 가지면 안된다.

    이번 글에서는 컨트롤러가 상태를 가지면 안되는 이유에 대해서 이야기해보고자 합니다. 서론 로또 미션을 진행하면서 다음과 같이 컨트롤러 내 인스턴스 변수로 발행한 로또와 당첨번호를 저장했었습니다. 피드백을 통해 이러한 방식에 문제가 있다는 사실을 알게 되었습니다. public class LottoController { private Lottos lottos; private LottoWinningNumbers lottoWinningNumbers; // ... } 컨트롤러와 모델의 차이점 위 방식에 문제가 있다는 사실을 알고 나서 문득 한가지 의문이 들었습니다. '컨트롤러가 왜 상태를 가지면 안될까? 그럼 모델이 상태를 가져져도 되는 이유는 뭐지?' 잠시 MVC 구조를 짚고 넘어가겠습니다. MVC에서 Mode..

    자바 추상클래스와 인터페이스

    추상 클래스와 인터페이스의 차이에 대해 설명해주세요. 1. 추상메소드와 추상클래스 추상 메소드는 빈 껍데기이다. 추상메소드란 선언은 되어 있으나 코드가 구현되지 않은 것을 말한다. //추상 메소드 public abstract String getName(); //추상 메소드가 아님. why? 코드가 구현되어 있기 때문에! public abstract String getName() { return "hello"; } 추상 클래스를 사용하는 이유 : 추상 클래스를 상속받은 클래스는 추상 클래스 안에 있는 모든 추상 메소드를 구현해야 한다. 위 설명만 들으면 인터페이스와 추상 클래스가 같다고 느낄 수 있다. 인터페이스도 인터페이스 안에 있는 모든 추상메소드를 구현해야하기 때문이다. 2. 인터페이스 vs 추상클래..