개발/JAVA
-
@FunctionalInterface annotation개발/JAVA 2019. 8. 12. 01:08
junit을 이용한 단위테스트를 공부하면서 다음과 같은 예제가 있었다. @FunctionalInterface public interface Scoreable { int getScore(); } 여기서 @FunctionalInterface 어노테이션이 생소해서 찾아보았다. 기존 인터페이스는 선언만 하여 이를 상속받아 구현하였다. 하지만 jdk8부터 구현뿐만아니라 상속까지 가질 수 있게 되었는데 단일메소드를 선언하고 구현하려고 할때 위의 펑셔널인터페이스를 붙이고 사용할 수 있다. 사용한 예제를 보면 public class ScoreCollection { private List scores = new ArrayList(); public void add(Scoreable scoreable){ scores.add..
-
jpa join시 join column과 join table 구분개발/JAVA 2019. 7. 9. 11:17
one to many 관계 테이블 조인을 하는데 40만 * 천만 건이상의 데이터인데다가 정렬에 거리계산 내장함수를 사용하다보니 10여초가 걸린다. 때문에 조금이라도 속도개선을 위해 이것저것을 하다보니 조인에 있어 join table과 join column을 쓸 수 있는데 둘 차이와 어느것이 성능이 좋은지 궁금해 찾아보았다. 결론은 2 테이블에서 조회를 할 때는 join column이 좋은 것 같다. 결정을 내리게 된 스택오버플로우의 답변이다. @JoinTable stores the id of both the table into a separate table while @JoinColumn stores id of the another table in a new column. @JoinTable : This..
-
이름 규칙개발/JAVA 2019. 7. 8. 23:11
어느정도 규칙성을 갖고 있지만 정해져 있지 않고 조금씩 다르기도 하다. 때문에 이름을 정할때 헷갈릴때가 있어 보편적인 방법들로 나름 정리를 해 본다. 클래스 이름은 PascalCasing으로 각 단어의 시작은 대문자로 한다. 예를들어 헬로 클래스는 Hello 헬로서비스는 HelloService로 한다. 메소드 이름은 CamelCasing로 첫번째는 소문자, 다음단어시작은 대문자로 한다. 예를들어 딜리트 메소드는 delete() 헬로워드 메소드는 helloWord() 다. 다음으로는 변수와 상수가 있다. 변수는 camelCasing으로 첫번째는 소문자다음부터는 대문자로 쓴다. 예를들어 String word=""; int memberCount =0; 이 있다.(예전에는 스네이크 표기법으로 snake_word..
-
java 형변환개발/JAVA 2019. 5. 9. 09:43
지금도 가끔 형변환을 할 때 검색을 하곤 하는데 정리를 해보려 한다. int to String String str = Integer.toString(i); String str = "" + i; String to int int i = Integer.parseInt(str); int i = Integer.valueOf(str).intValue(); double to String String str = Double.toString(d); long to String String str = Long.toString(l); float to String String str = Float.toString(f); String to double double d = Double.valueOf(str).doubleValue(..
-
map 데이터 전체 읽으며 sql 처리시 에러 java.util.ConcurrentModificationException: null개발/JAVA 2019. 4. 8. 01:28
map 형태로 전달된 값들 중 key을 확인해 조건에 맞는 것을 db insert 하는 작업을 코딩했다. 그러나 해당 조건 만족으로 db작업 후 다음부터 java.util.ConcurrentModificationException: null 와 같은 에러가 뜨며 작업이 중단되었다. 구글링 하여 찾아본 글들은 조금 연관이 없어 보였다. 그리고 돌고돌아 작업 조건을 만족하는 key값을 따로 arrayList에 담은 후 다시 arraylist를 돌며 db insert를 하니 정상적으로 처리되었다. 작업중 디비 인서트를 하며 작업이 꼬여서 생긴 문제로 파악된다.
-
String to hex을 hex byte array개발/JAVA 2019. 3. 22. 11:12
소켓통신은 byte형태로 송신하고 수신한다. 따라서 보낼 데이터는 바이트 형태로 인코딩을 하게된다. 1 byte = 8 bit, 1 bit 는 0,1 2진수 인 것을 모두 잘 알 것이다. 따라서 1 byte는 8bit 이므로 2^8으로 이루어져 있고 10진수로는 0~255, 16진수로는 0~ff까지의 값을 가진다. 흔히 문자를 바이트로 16진수의 2자리 값으로 나타내며 Apple을 예를들면 String str = "Apple"; // 한 글자씩 헥사(Hex)로 출력 System.out.println(stringToHex(str)); // 출력 결과: 41 70 70 6C 65 // 접두사 붙여서 출력 System.out.println(stringToHex0x(str)); // 출력 결과: 0x41 0x7..
-
이클립스에서 기본 클래스 을(를) 찾거나 로드할 수 없습니다 가 뜰 때개발/JAVA 2019. 3. 21. 11:27
가끔 잘 되던 프로젝트를 실행시키다 보면오류: 기본 클래스 을(를) 찾거나 로드할 수 없습니다. 가 뜰 때가있다.클래스패스문제인 경우라 하여 환경변수에서 CLASSPATH 를 %JAVA_HOME%\lib; 로 되어있는것 뒤에다가 \나 . 등을 찍어 해결한다는 글들을 보았지만 다른 얘기였다. 이클립스의 경우 RUN/DEBURG 세팅에 되어있는 실행클래스에 대한 설정에 문제가 있는것으로 예상되어(이걸 어떻게 표현할 지 모르는... 무지한 지식이 부끄럽다) 이걸 삭제하고 다시 실행하면 된다.경로는 프로젝트 우클릭 -> properties -> Run/Debug Setting 중앙에 들어있는 java application에 설정되어있는것을 삭제하면 된다.
-
배열 복사 arraycopy개발/JAVA 2019. 3. 20. 17:27
tcp/ip 통신에서 서버로 데이터를 보내기 위해 바디 값에 헤더값을 추가, 그리고 헤더값에바디값에 대한 정보를 담아야 했다.때문에 바이트형식의 배열을 생성하고 기존의 값을 변환하여 옮겨야 했다.이 때 사용하는 것이 System.arraycopy 메소드다. 사용법은 arraycopy(Object src, int srcFrom, object mainSrc, int mainSrcFrom, length) 에서src = 옮길 배열srcFrom = 옮길배열의 시작위치mainSrc= 옮겨질 대상의 배열mainSrcFrom = 옮겨질 배열에서 덮힐 시작위치length = 옮겨지는 배열의 수이다. 따라서 헤더와 바디를 message 배열에 넣는다고 할 때 byte[] message = new byte[header.le..