Java
-
[Mac] 기본 JDK (JAVA_HOME) 설정하기Java/기본 2021. 3. 25. 21:44
한 머신에 여러 JDK를 깔아서 써야할 때가 있다. 그 상황에서 디폴트로 1개를 선택하고 싶을 때가 있다. (Gradle에서 인식이 안된다거나 등) 간단하게 디폴트 JDK를 설정 하는 것을 알아보자. java -version 현재 Mac 기본 JDK는 11.0.2로 설정 되어 있는 상황 /usr/libexec/java_home -V (V는 대문자다. 소문자로 하면 안된다) 현재 Mac에 깔려있는 JDK들을 확인한다. 11.0.2와 1.8.0_181이 깔려 있는 것을 확인할 수 있다. export JAVA_HOME=`/usr/libexec/java_home -v 1.8` (여기서 -v는 소문자다.) 기본 JDK로 설정하고자 하는 버전을 입력한다. 전체 이름을 입력해도 되고 1.8처럼 줄여서도 가능하다. (..
-
[IntelliJ] Mac Touch Bar - 기본으로 fn키 표시되게 설정Java/IDE 2021. 3. 8. 23:55
평소에는 외장 키보드를 연결해서 사용해서 불편함이 없는데, 가끔 노트북만 사용할 때가 있다. 근데 IntelliJ를 사용하다 보면 F12나 F6 등을 눌러야 할 일이 생긴다. 하지만 터치바에는 별 필요없는(?) 것들로 가득하다. 여기에 바로 F1~F12가 표시되게 해보자. 한 줄 요약 시스템 설정 - 키보드 - 단축키 - 기능 키 - 추가 (+버튼) - IntelliJ IDEA 선택 - 추가 완료 이미지 설명
-
ParameterizedTypeReference (feat. Super Type Token)Java/Spring Framework 2020. 11. 26. 18:09
서론 스프링MVC에서 보통 API 통신은 RestTemplate을 활용해서 사용한다. restTemplate의 메소드 중 exchange를 많이 쓰고 아래 형식처럼 사용하고 있다. final List response = restTemplate.exchange( "http://localhost:18080/members", HttpMethod.GET, null, new ParameterizedTypeReference() {}, kycRequestId.toString()).getBody(); 5개의 argument 중에 1개가 눈에 걸린다. 네 번째 argument인 new ParameterizedTypeReference() {} 부분이다. 기존 코드들 복붙 해서 잘 돌고, 잘 쓰고 있긴 한데 왜 이렇게 쓰는..
-
[Java8] Method Reference (메서드 참조) - 생성 방법Java/기본 2019. 12. 28. 17:56
Method Reference를 이해하려면 Lambda를 먼저 이해해야한다. 여기서는 Lambda식을 Method Reference로 변경하는 방법을 다룬다. Lambda식을 사용하다보면 IDE에서 친절하게 노란색으로 Method Reference로 바꾸지 않겠니? 하고 알려준다. 그래서 Lambda로 일단 만들고 IDE의 힘을 빌어 Method Reference로 바꾸곤 한다. 그래서 Method Reference 작성하는 원리를 정확히 모르고 사용하곤 한다. 모던 자바 인 액션 3장에 Method Reference에 대한 내용이 나오는데 내용이 좋아 정리해보았다. Method Reference를 만드는 유형에는 다음 3가지가 있다. (p. 116) 정적 메서드 참조: Integer의 parseInt를..
-
[IntelliJ] Error: java: invalid source release: nJava/IDE 2018. 6. 2. 11:20
한 PC에 여러 JDK를 깔고 프로젝트마다 다르게 혹은 한 프로젝트 내에서 JDK 버전을 다르게 설정하며 쓸 수가 있다. 예를들어 JDK10을 깔았지만 sbt에서 인식을 못해서 스칼라 프로젝트에서는 JDK1.8로 설정을 해야 한다든가 할 필요가 있다(아직 기본으로 9나 10을 쓰기는 무리인거 같다. 호환 안되는 경우가 왕왕 있음). 사실 저 위에 에러가 나는 이유는 한 프로젝트 내에서 처음에 9 or 10으로 빌드했다가, 나중에 실행할 때는 1.8버전으로 실행해서 생기는 문제다. 해결법은 아래와 같다. 1. 프로젝트 run을 하려할 때, Error: java: invalid source release: 9가 발생 2. Project Structure - Modules (윈도우는 Ctrl + Alt + S..
-
[Java9] IOJava/기본 2018. 5. 14. 00:19
InputStreamjava.io.InputStream읽기/복사에 관한 3개의 메소드 추가됨readAllBytes() : intput stream의 모든 바이트들을 읽음readNBytes(byte[] b, int off, int len) : b배열의 off위치부터 len byte만큼 읽음transferTo(OutputStream out) : input stream에서 모든 bytes를 읽고, OutputStream에 씀이제 Apache Commons IO 같은거 안써도 됨 The ObjectInputStream Filter객체를 저장하거나 네트워크 전송을 위해 직렬화 함데이터를 객체로 역직렬화 할 때 데이터가 유효한지 검증이 필요함이제 입력을 필터링하기 위해 java.io.ObjectInputStream..
-
[Java9] Variable HandlesJava/기본 2018. 5. 2. 21:46
개요java.util.concurrent.atomic이나 sun.misc.Unsafe을 이용하여 값들을 읽기/쓰기 했었는데, 보다 일관적인 방법을 제공한다. 목적안정성: 유효한 메모리 바운더리안에서 사용무결정: final 필드 값을 업데이트 할 수 없음성능: sun.misc.Unsafe보다 성능이 비슷하거나 좋음사용성: sun.misc.Unsafe API, java.util.concurrent.atomic API보다 사용하기 좋음자극 자바에서 동시 및 병렬 프로그래밍이 할 일이 많아졌다. counter 값을 원자적으로(thread safe하게) 변경 하기 위해서는 AtomicInteger(공간문제나 추가 작업등으로 오버헤드가 큼)나 sun.misc.Unsafe API(안전하지 않고 이식성이 안좋음)을 사..
-
[Java9] try-with-resources ImprovementJava/기본 2018. 4. 28. 23:44
예전에 Java7에서 변화된 try-with-resources(이하 TWR)에 대해 포스팅을 했었다. Java9에서는 더 발전된 TWR가 나왔다. Java7의 TWR만 해도 확실히 편해졌지만 불편한 점이 여전히 존재했다. 자원 할당을 try 밖에서 하면 그 변수를 가지고 바로 try문 안에서 사용할 수는 없었다. 따로 try안에서 새로운 변수를 선언하여 사용해야 했다. 아래 코드를 보자. 하지만 Java9에서는 그럴 필요가 없게 되었다. 세미콜론을 이용해서 복수개의 변수를 가질 수도 있다. 한 가지 주의할 점은 사용할 변수가 final이거나 effectively final(초기화 된 이후 절대 바뀌지 않는 변수)이어야 한다는 점이다. 참고http://javasampleapproach.com/java/ja..