본문 바로가기

Programing

(393)
[Java] Object.hashCode JavaDoc - History Java 1.3.1 hashCode public int hashCode()Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no i..
[Java] "서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다."? 자바의 정석 453쪽에 보면 "서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다."라는 말이 나와있다. 물론 Object의 hashCode는 오버라이드가 가능하므로 다음과 같이 코드를 짠다면 무조건 같은 해시코드만 반환이 될 것이다.public class Foo { @Override public int hashCode() { return 1; } public static void main(String[] args) { Foo foo1 = new Foo(); Foo foo2 = new Foo(); System.out.println(foo1 == foo2); System.out.println(foo1.hashCode() == foo2.hashCode()); } }위의 코드를 실행한다면false tru..
[java] Java 8의 시간은 10000년을 파싱 못한다? 10000년까지 살아 있을지는 모르겠지만 테스트 케이스를 만들었는데 LocalDate.parse("10000-01-01") 위와 같은 코드는 아래와 같은 파싱 예외가 발생한다. java.time.format.DateTimeParseException: Text '10000-01-01' could not be parsed at index 0 at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) at java.time.LocalDate.parse(LocalDate.java:400) at j..
[Java] Enum에 없는 값을 테스트할 때는 어떻게하지? 통신사 멤버십을 관련 기능을 개발하게 되었다고 하자. (예를 들 때는 현실성이 있는 것이 좋으므로...) 아래와 같은 Enum이 있다고 하자. public enum MembershipType { KT, SKT } 통신사에 따라 사용하는 API가 달라서 묶어주는 구조로 되어 있다고 하자. 물론 다형성을 이용한 전략 패턴을 적용기에 좋은 구조이다. 하지만 갯수가 많지 않아 switch~case로 분기하게 되어 있다고 치자. 코드는 아래와 같이 표현이 가능할 것이다. @Service @RequiredArgsConstructor public class MembershipInspector { private final KtMembershipInspector ktMembershipInspector; private f..
[test] 박*영과 함께하는 spock framework pair programming 제목은 "박*영과 함께하는 spock framework pair programming"이라고 쓰고 사실 꼰대질(?!)을 정리한 것이다. 아마도.. TL;DR (too long, don’t read) 가 될 것 같다. 박*영 님은 같은 회사의 개발자이다. 기존에 jUnit으로 되어 있던 테스트 코드들을 Groovy 기반의 Spock 프레임워크를 도입해서 적용하고 있다고 한다. 처음 접하는 사람들이 공통적으로 겪을 수 있다고 생각해서 공유 및 기록 차원에서 끄적여보았다. 2020-01-14 (화) - 꼰대질1 포인트를 대량 적립해주는 서비스(가칭: MassiveAccumulatingService)에 대한 테스트를 만들고 있었다. 조언 1. 테스트의 이름 - 테스트 대상의 이름을 사용하는 것보다는 테스트가 수..
[sonarqube] 'sonar.jacoco.reportPath' is deprecated 메시지 없애기 sonarqube 태스크를 돌리면 아래와 같은 경고가 나온다. Property 'sonar.jacoco.reportPath' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format). Property 'sonar.jacoco.reportPaths' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format). 메시지만 나오면 그러려니 하는데 Sonarqube 페이지에서도 경고가 표시된다. 사용하는 ..
[Java] toString에서 나타나는 [, L 등의 문자의 정체는? 간단한 코드이다. 아래의 코드를 수행하면 어떤 글자들이 콘솔에 찍힐까? package com.tistory.namocom.question public class ToStringTest { public static void main(String[] args) { Object object = new Object(); Object[] objects = new Object[1]; System.out.println(object); System.out.println(objects); } } 아래의 결과를 보기 전에 미리 생각해보자. 더보기 java.lang.Object@6576fe71 [Ljava.lang.Object;@76fb509a 생각했던 것과 일치했을까? System.out.println 왜 이런 글자들이 ..
[Java] String: literal vs new 자바 기초중에 하나이다. 자바에는 문자열을 생성하는 방법이 크게 두가지가 있다. 리터럴(literal) 방식이고 다른 하나는 new 생성자를 이용한 방법이다. 코드로 설명하는 것이 이해가 빠를 것 같다. String str1 = "a"; String str2 = new String("a"); str1 이 리터럴 방식이고, str2 가 생성자를 이용한 방식이다. 퀴즈. 둘 중에 안티패턴은? 답부터 이야기하면 바로 생성자를 이용한 방식이다. 왜 그런지는 아래에서 살펴 볼 수 있다. String Internal 위의 자바코드를 읽을 수 있는 바이트 코드로 나타내보면 아래와 같다. ldc "a" astore_1 new java/lang/String dup ldc "a" invokespecial java/lang..