본문 바로가기
반응형

자바7

[자바] @JsonTypeInfo, @JsonSubTypes 를 활용하여 수정 이력 쌓아보기 다양한 도메인의 백오피스 어드민을 개발하다보면 필수 요구사항으로 수정 이력 기능이 항상 포함되어 있습니다. 데이터에 대한 트래킹을 하기 위해 이 기능이 필요한데, 다양한 방법을 활용하여 구현할 수 있습니다. 이번에는 Jackson 라이브러리에서 제공하는 @JsonTypeInfo 와 @JsonSubTypes 를 활용하여 수정 이력 데이터를 쌓아보도록 하겠습니다. (구글에 찾아보니 대부분의 경우 spring-data-envers 라는 라이브러리를 활용하는 예시를 찾아볼 수 있었는데, 다음에는 spring-data-envers 를 활용해보고 비교를 한번 해보면 좋을 것 같습니다.) 환경 및 요구사항 수정 이력이 쌓이는 환경은 다음과 같다. 예시: 상품 (Product) 도메인 상품 (Product) 엔티티와 .. 2023. 3. 17.
[자바] 인터페이스와 추상 클래스 (feat. ChatGPT) 신입 개발자 단골 면접 질문이 있습니다. 자바의 인터페이스와 추상 클래스를 어떻게 활용할 수 있는지 예시와 함께 설명해보라는 것인데요. 저는 여태 개발을 하면서 인터페이스는 자주 사용했지만 추상 클래스는 자주 사용하지 않아 (거의 없었던 것 같습니다) 예시와 함께 한번 정리해보고자 합니다. 적합한 예시는 많겠지만 제가 좋아하는 "라면"을 가지고 예시를 들어볼게요. 그리고 요즘 유행하는 ChatGPT 의 도움도 살짝 받아보겠습니다. ChatGPT, 추상 클래스를 알려줘 ChatGPT 가 알려주는 추상 클래스는 하나 이상의 추상 메소드를 포함하는 클래스이다. 추상 메소드는 구현되지 않은 메소드로 자식 클래스에서 구현해야 한다. 자세한 내용은 ChatGPT 를 참고.. 결국 클래스의 종류인데, 하나 이상의 추.. 2023. 3. 3.
[자바] 메소드 시그니쳐 (method signature) 메소드 시그니쳐 메소드 시그니쳐 = 메소드의 이름 + 메소드의 파라미터 컴파일을 할 때, 메소드의 시그니처를 기준으로 메소드를 구분하기 때문에 필요하다. 아래 코드에서 getInteger 와 인풋 파라미터 int x 를 합쳐서 하나의 시그니처로 표현한다. public int getInteger(int x) { return x; } 반환 타입은 포함되지 않음. 따라서 반환 타입만 다른 경우 (메소드의 이름과 파라미터은 같음)에는 컴파일 에러가 발생한다. (이미 같은 시그니처의 메소드가 존재하기 때문) public int getInteger(int x) { return x; } public double getInteger(int x) { // 2023. 2. 25.
[자바] Lombok 의 @EqualAndHashCode 회사 업무를 하면서 @EqualsAndHashCode 어노테이션을 자주 목격했다. 대충은 .equals() 와 .hashCode() 코드를 만들어주는가보다 생각했는데, 정확하지 못해서 한번 정리는 해야겠다고 생각했었다. 그래서 알아보니 .equals() 와 .hashCode() 부터 이해해야 했고, 여기에서 정리를 한번 했다. 이제 @EqualsAndHashCode 에 대해 알아보도록 하자. Lombok 이 제공하는 @EqualAndHashCode 공식 사이트에서 정의하는 @EqualAndHashCode 는 다음과 같다. Equality made easy: Generates hashCode and equals implementations from the fields of your object. 객체 비교.. 2023. 2. 11.
[자바] .equals(), .hashCode() 메소드에 대해 알아보자 들어가며 자바에서는 클래스를 선언할 때, 별다른 클래스를 상속받지 않으면 기본적으로 Object 클래스를 상속받게 된다. 따라서 Object 클래스는 모든 자바 클래스의 최상위 부모 클래스이다. Object 클래스는 필드가 없다. 메소드만 포함하고 있는데, 그 중 하나가 객체 비교를 위한 .equals() 메소드이며 코드는 아래를 참고하자. public boolean equals(Object obj) { return (this == obj); } 객체 비교를 하는 equals() 메소드를 보면 객체의 주소값, 즉 참조값을 비교한다. 아래 테스트 코드에서의 o1 과 o2 는 서로 다른 참조값을 가지고 있기 때문에 "not equal" 이 출력된다. @Test void test() { Object o1 = .. 2023. 2. 11.
[자바] Stream .sorted() 활용 자바 Stream 에서는 sorted() 함수를 제공한다. 예제 예시를 통해 알아보자. 검색한 키워드와 키워드별 횟수를 나타내는 객체이다. stats 리스트 객체에는 총 5개의 객체가 담겨있다. 이 리스트 객체를 활용해서 sorted() 함수에 사용해보자. @Getter public class BlogStatisticDto { private final String keyword; private final String count; @Builder public BlogStatisticDto(String keyword, String count) { this.keyword = keyword; this.count = count; } } public static void main(String[] args) { Li.. 2023. 2. 6.
[자바] String 과 new String(); 의 차이 개발을 하다 문득 String 과 new String() 의 차이가 무엇일지 궁금해져서 정리해보고자 한다. String String a = "abcd"; String b = "abcd"; 위와 같은 경우에는 heap 내 String constant pool 에 객체를 저장한다. 만약 이미 존재하는 문자열이라면 그 저장된 객체를 가르키게 되어 있다. 따라서 변수 a 는 String constant pool 에 새로운 객체로 생성되고, 변수 b 는 동일한 abcd 값이 저장되어 있기 때문에 변수 a 의 참조값을 가르키게 된다. // a 와 b 는 서로 동일한 주소값을 참조하고 있으므로 a == b 는 true if (a == b) { // true ... } // a 와 b 는 서로 동일한 값을 가지고 있으.. 2023. 2. 3.
반응형