Java 10

[Java] primitive type vs reference type

int와 Integer long과 Long 등등... 이렇게 java의 primitive type과 reference type 중에서 당연히 될 수 있으면 primitive를 쓰는게 낫다. 이유야 뭐... Object 타입에서 신경쓸게 더 많다. -> 실수할 여지가 많다. NPE나 반복적인 Object를 새로 생성해서 할당한다거나.. 메모리를 훨씬 많이 사용한다. 그런데... 이런 것들 사이에 동작 속도의 차이가 크다는 누군가의 의견을 보았고, 나도 그렇다고 생각을 했었는데... 예전에 어떤 분이 메모리 사용량 이외에 다른 차이가 나는게 있냐며.. 특히 DB에서 값을 읽어와서 Entity에 넣을 때 NULL이 들어올 수 있는 가능성이 늘 있으니 이 때에는 reference type을 사용하는 것이 맞지 ..

Java 2021.09.30

[Java] 한글 자음을 추출하는 유틸

한글 문자열을 넣으면 자음만 빼주는 유틸을.. 내가 필요해서 만들었다. 아래 내용은 내가 README.md에 적은 내용을 그대로 옮겨왔다. 프로젝트 문자열에 한글이 있는 지 확인 HangulUtils.isContainsHangul("This string includes 한글."); // true 문자열에서 자음 추출 HangulUtils.getFirstJaum("첫 자음 추출"); // ㅊ HangulUtils.getFirstJaum("the first character is English"); // T HangulUtils.getFirstJaum("1. Best practise"); // 1 HangulUtils.getFirstJaum(" first character is not English, 한글 ..

Java 2021.07.04

[Java] Record

자동으로 생성자와 멤버를 가지는 클래스를 만들어준다. 쓸데없이 잔뜩 뭔가를 많이 코딩해야 하는 java인데 이걸 좀 줄여보겠다고 만든거라고 한다. kotlin의 data class와 거의 비슷하다고 한다. JDK14에서 preview로 처음 나왔고 JDK16에서 정식 스펙으로 포함되었다. 처음 나왔을 때와 지금 정식으로 포함된 내용이 조금 달라서 기존에 쓰여진 글들의 내용이 안맞는 경우도 있다. class 대신에 record라고 keyword를 사용한다. 이렇게 쓰면, record Point(int x, int y) { } 이 뜻이다. record Point(int x, int y) { // 이렇게 필드가 암묵적으로 생성된다. private final int x; private final int y; /..

Java 2021.03.26

JPA generated ID with Oracle Sequence

MySQL에서 보통 ID값(primary key)을 autoincrement로 만드는 것처럼 Oracle은 ID값을 주로 Sequence를 통해서 만들게 되는데, JPA Entity에 아래처럼 설정하면 된다. @ID @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SequenceGeneratorName") @SequenceGenerator(sequenceName = "SequenceName", name = "SequenceGeneratorName", allocationSize = 1) @Column(name = "ColumnName") private Long columnName; GeneratedValue annotaion의 genera..

Java 2021.01.28

초기 조건 확인 방법

개발할 때 흔히 있는 경우로 메소드에 초기 조건을 확인한 후 일정 조건을 만족할 때에만 로직을 실행하는 경우가 있다. 이런 초기조건을 확인하는 형태는 크게 두 가지가 있는데, 각각 장단점이 있다. 다음의 예1)과 예2)를 보자. 예1) public int doSomthing(int value1, String value2) { if (value1 > 0) { if ("OK".equals(value2)) { // do something return SUCCESS; } else { return ERROR_2; } } else { return ERROR_1; } }예2)public int doSomething(int value1, String value2) { if (0 == value1) { return ER..

Java 2015.08.05

PasswordDeriveBytes of C# to Java (2)

PasswordDeriveBytes from C# to Java (1) 에서 계속... 2016. 04.18 업데이트) 아래 소스를 정리한 GitHub 저장소를 만들었습니다.C#에 있는 PasswordDeriveBytes 클래스를 Java 로 구현해야 했던 나는 해당 클래스에 버그가 있다는 것까지 확인했다. 하지만, 이 버그에 대해서 어느 곳에서도 설명하지 않아서 결국 내가 실험을 통해 찾아야 했다.그리고 한참 실험을 해서 알아낸 내용은 처음 호출한 GetBytes 메소드에 전달한 값에 따라 두 번째 호출한 GetBytes 메소드의 동작이 달라진다는 것이다. 그러므로 다음과 같이 첫 번째 GetBytes의 전달인자를 (A)라고 놓았을 때 두 번째 GetBytes의 반환값을 알아낼 수 있다. 첫 번째 Ge..

Java 2014.02.08

PasswordDeriveBytes of C# to Java (1)

C#에 있는 System.Security.Cryptography.PasswordDeriveBytes 클래스를 자바에서 구현해야 하는 일이 생겼다. 고생은 그렇게 시작되었다.MSDN에 있는 설명을 보면 PBKDF1 알고리즘의 확장을 사용하여 암호에서 키를 파생시킵니다.라고 되어 있다.그럼 PBKDF1이 뭔지부터 알아보자. PBKDF1은 여기의 설명을 직역해 보면 암호화에서 사용할 키를 만들기 위해서 쓰는 해시 함수 적용?이라고 한다. 무슨 소리냐면 적당한 문자열 비밀번호를 넣으면 해시 함수를 돌려서 얻은 값을 돌려주고 그 돌려받은 값으로 암호화할 때 비밀키로 쓰라는 거다.위에 살짝 걸어둔 링크에서 시키는대로 구현을 해도 동작은 할 테지만 귀찮아서 누가 자바로 만들어 놓은게 없나 찾아봤다. 상용 라이브러리에..

Java 2014.01.17