본문 바로가기

Programing/JVM(Java, Kotlin)

(96)
실패하는 테스트부터 만들기 패턴 Mincho에게 버그에 대해 개선을 할 때 코드부터 고치지 말라고 종종 이야기한다. 대신 실패하는 테스트를 먼저 만들고 실패하는 것을 재현하고 이후 코드를 수정하여 성공하는 테스트로 만들라고 했다. 이런 패턴은 포프TV의 효율적인 테스트 코드 작성법에 나오는 것과 동일하다. 우연히 이동욱 님 블로그 기억보단 기록에 갔다가 Spring Batch에 PR을 올리셨던 것이 거절당한 것을 보게 되었다. Spring Batch Lead인 Mahmoud Ben Hassine가 comment를 남겼는데 이유는 명확했다. 실패하는 테스트가 없었기(There is no failing test in this PR) 때문이었다. 오픈소스 커뮤니티에서도 실패하는 테스트는 유효하다는 것을 느꼈다.
Java 17 으로 업데이트할 이유가 하나 더 생겼다. Spring Framework 의 메이지 버전 업데이트인 5.x → 6.x 에서는 Java LTS인 11 에서 17로 기본 버전(baseline)이 올라갔다. 그 뿐만 아니라 Java EE 8 에서 Jakarta EE 9+ 로 바뀌면서 패키지 네임스페이스도 jakarta 를 써야하는 변화도 있다. 아직까지는 스프링 프레임워크와 스프링 부트의 과거 버전과의 혼용의 과도기라서 비즈니스 적인 개발을 우선적으로 처리하여 유예하고 있었다. 3일전 (2023-08-04)부터 sonarcloud 분석을 돌리면 아래와 같은 메시지가 밑에 나타났다. The version of Java (11.0.20) you have used to run this analysis is deprecated and we will stop ..
[Kotlin] byte[]을 String으로 바꾸기 과거에 [Java] byte[]을 String으로 바꾸기 글을 쓴 적이 있다. 요즘은 코틀린을 주로 사용을 해서 글을 다시 써보았다. 방법에 대해서는 https://www.baeldung.com/kotlin/byte-arrays-to-hex-strings 에 잘 나와 있기에 링크를 참고하는 것이 더 좋다. 최초 코드 원래 코드을 method extract 로 리팩토링을 해보니 아래와 같이 표현을 할 수 있는 코드였다. (원래코드는 아래에 나옵니다. ^^;;) private fun bytesToHexString(bytes: ByteArray): String { val hash = StringBuilder() for (aByte in bytes) { val hex = Integer.toHexString(0x..
@NotNull이 Needs Work가 필요한 수준인가요? 코드 리뷰를 하다가 제목과 같은 질문을 받았다. @NotNull이 Needs Work가 필요한 수준인가요? 사업자등록번호에 대한 유효성 제약 수정이 있어서 PR을 받았는데 의견을 남기고 추가적인 작업이 필요할 것 같아서 Needs Work 로 마크를 했었다. 아래와 같은 요청 파라미터로 사용되는 객체이다. (실무 코드는 아니고 예제이다.) import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Getter @Setter public class MemberJoinRequest implements Member { @NotN..
System.out 의 성능? 마이그레이션을 위한 임시 코드로 로깅을 위해 System.out.println 을 사용했다. Q. 예외상황이긴 하지만, 최대 size가 1000개일텐데, System.out.println 괜찮을까요? 여기에 세 고개가 더 붙여졌다. Q2. 왜 "System.out.println 안 괜찮을까요?" Q3. 성능? Q4.어떤 성능이요? 지금은 절판된 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기에도 11번 "로그는 반드시 필요한 내용만 찍자" 부분에서 System.out.print 사용에 관련된 내용이 있어서 내용의 요지는 이해했으나 상기 차원에서 검색을 해서 기록해 두었다. 출처: Java - System.out effect on performance 관점1. println 은 synchronized 로 동..
[Kotlin] Kotlin Koans 참고로 Koan이란 공안(公案)의 일본식 발음을 영어로 표기한 것이다. 불교에서 온 영어로 뛰어난 선(禪) 수행자의 깨달음이나 인연 또는 언행이다. 한국어로는 공안보다는 간화선(看話禪)이라는 용어를 찾아보면 이해하는데 도움이 된다. 접근 경로: Kotlin (v1.4.21): kotlinlang.org/ Play Kotlin Language > Koans: play.kotlinlang.org/koans/overview Educational Products 2020.3 > Learner Start Guide (2020-12-11) - Install EduTools Plugin EduTools 1.6M, 4.4.6, 4.4-2020.3-517, 2020-12-25 더보기 With the EduTools pl..
[Java] var는 키워드가 아니다. "개발하자" 라는 슬랙에서 이석민(닉네임 lee_maru)님이 "var는 키워드가 아닙니다."라는 이야기를 해서 찾아보게 되었다. 자바언어 규약(JLS)를 찾아보니 var는 키워드가 아니라고 한다. var is not a keyword, but rather an identifier with special meaning as the type of a local variable declaration reference: docs.oracle.com/javase/specs/jls/se12/html/jls-3.html#jls-3.9 국내 출판된 책들 중에는 var 이 키워드라고 되어 있는 책도 있었다. - 장윤기 님의 Practical 모던 자바
[Java] 지역변수 이름과 죄수번호...? 자바관련 카페에 올라온 질문. 질문 String str = null; 이 상태는 str이 객체를 참조하지 않고 스택영역에 str변수 이름으로 null값이 세팅되었다면 String name = ""; 이 상태는 힙영역에 빈 공간으로 객체가 생성되고 주소 번지가 스택영역에 리턴이 되는건지요.. 슬기로운 감빵생활과 자바 자바에서 지역변수의 이름은 런타임시에 어떻게 될까. 첫 코드에서 str 이라는 이름의 변수 이름은 계속 남아 있을까? tvN에서 했던 슬기로운 감빵생활을 보면서 나는 자바의 지역변수와 유사한 점이 많다고 생각했다. 사회에서 '김제혁'이라고 불리던 이름이 형무소에 가면서 '7102'라는 죄수번호라는 신원을 구별하는 번호로 바뀐다. 자바코드에서는 존재하던 변수이름은 컴파일이 되면서 비슷하게 숫자로..