개발/자바

개발/자바

Effective Java 3/E - 7장 람다와 스트림 요약정리

아이템 42 - 익명 클래스보다는 람다를 사용하라 함수 객체와 람다식 함수 객체 : 추상 메서드를 하나만 담은 인터페이스로 람다식이 등장하기 전에는 익명 클래스를 사용해서 주로 만들었음 Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }) 자바8에와서 추상 메서드 하나짜리 인터페이스는 특별한 의미를 인정받아 특별한 대우를 받게됨 람다식을 이용해서 훨씬 간결한 코드를 만들 수 있게됨 Collections.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.leng..

개발/자바

JSON 스키마

XML의 DTD나 스키마와 유사하게 json에도 스키마에 대한 표준적인 부분이 존재하고 있는데요(http://json-schema.org/), 스키마 포맷도 json 포맷입니다. { "contentsId": "123456", "title": "꽹과리", "metadata": [ { "propertyName": "category", "propertyContent": "타악기" }, { "propertyName": "category", "propertyContent": "동양악기" } ] } 위의 예제 데이터에 대한 스키마를 작성하면 다음과 같이 작성할 수 있습니다. 스키마 포맷{ "type": "object", // 루트 타입은 객체 "properties": { // 속성 정의 "contentsId": {..

개발/자바

JSON STREAMING API

크지 않은 json 데이터를 파싱할 때는 한번에 파싱해도 메모리 사용량이 많지 않지만,파싱해야할 json 데이터가 굉장히 크다면 메모리 사용량이 많기 때문에 주의가 필요한 부분입니다. 참고삼아 제 로컬 PC에서 jackson 라이브러리로 json 파일을 객체로 파싱하는 로직을 실행해서 visualvm으로 확인해본 결과는 다음과 같았습니다.- 약 300 KB 파일을 한번에 객체로 파싱 : 약 60 MB 힙메모리 사용- 약 50 MB 파일을 한번에 객체로 파싱 : 약 150 MB 힙메모리 사용- 약 150 MB 파일을 한번에 객체로 파싱 : 약 750 MB 힙메모리 사용 jackson 사용 예제streaming api는 json 데이터를 다음과 같은 토큰 단위로 읽어서 처리합니다.- 객체의 시작( { ), ..

개발/자바

FileLock

Java에서 File에 락을 걸기위한 방법으로 FileLock이라는 것을 사용할 수 있다.File file = new File("D:\\data\\people.txt"); FileChannel channel = null; try { channel = new FileOutputStream(file).getChannel(); FileLock fileLock = channel.tryLock(); fileLock.release(); } catch (IOException e) { e.printStackTrace(); }다음과 같이 한다. 락을 걸고 사용 후에는 해제를 해줘야 한다. 락을 확보했다가 해제하는 것을 100만번 반복하는데 1000 밀리초 정도 걸렸다. (Intel i7-4790 3.60GHz) 락을 확..

개발/자바

checked exception과 unchecked exception

자바 exception에는 checked exception과 unchecked exception 두 가지가 있다. checked exception - 메소드 시그니쳐에서 명시되어 있어야 하고 그 예외를 발생시킬 수 있는 메소드를 호출하는 쪽에서 예외에 대한 처리를 필수적으로 해줘야 한다.(try/catch or throw) - Exception 클래스를 상속받아 만들면 checked exception이 된다. unchecked exception - 메소드 시그니쳐에 명시되어 있을 필요는 없고 그 예외를 발생시킬 수 있는 메소드를 호출하는 쪽에서 예외에 대한 처리를 필수적으로 해줄 필요는 없다. - RuntimeException 클래스를 상속받아 만들면 unchecked exception이 된다. - un..

개발/자바

Mybatis 쿼리 파라미터에서 jdbcType

Mybatis 쿼리 파리미터 프로퍼티 중에 jdbcType가 있는데 항상 헷갈려서 정리해본다. Mybatis 공식 문서에 이렇게 설명되어 있다. jdbcType : 지원되는 타입 목록에서 설명하는 JDBC 타입. JDBC타입은 insert, update 또는 delete 하는 null 입력이 가능한 칼럼에서만 필요하다. JDBC의 요구사항이지 마이바티스의 요구사항이 아니다. JDBC로 직접 코딩을 하다보면 null이 가능한 값에 이 타입을 지정할 필요가 있을 것이다. nulll값을 처리하기 위해 필요한 프로퍼티인데 Mybatis에서 null값에 대한 처리를 하기 위함이아니라 JDBC에서 필요해서 넣어줘야 한다고 되어있다. NULL이면 그냥 NULL로 쿼리를 날리면 될일이지 JDBC는 왜 그것이 필요한지 ..

bebeside77
'개발/자바' 카테고리의 글 목록 (2 Page)