본문 바로가기

java에 해당하는 글들

18 Articles matched
목록이 없습니다.
[Java] jmap 사용하여 JVM 상태 확인 Java 어플리케이션을 배포하고 서버 유지를 하는 경우에 JVM의 상태를 확인해야하는 상황이 종종 발생한다. 이 때 다른 프로그램이나 패키지 설치 없이 바로 사용할 수 있는 간단한 방법이 바로 jmap을 활용하여 확인하는 방법이다. 방법은 아래와 같이 간단하다. (Java 버전별로 조금 다를 수 있다) java 11 이전 버전 $ jmap --heap java 11 포함 이후 버전 $ jhsdb jmap --heap --pid * jhsdb 관련 문서는 오라클 문서 참조: https://docs.oracle.com/javase/9/tools/jhsdb.htm#JSWOR-GUID-0345CAEB-71CE-4D71-97FE-AA53A4AB028E 실행 결과 (jdk 11 버전 기준) $ jhsdb jmap ..
[JAVA] split 빈값 처리 문제상황 Java 서블릿 로직에서 split하는 로직이 있었는데 아래와 같은 상황에서 의도치 않은 동작이 발견되었습니다. String data = "1,2,3,,,"; String[] split_data = data.split(","); System.out.println("split length : " + split_data.length); for (String str : split_data) { System.out.println(str); } 위의 로직을 돌려보았을 때 예상되는 출력값은 아래와 같았습니다. split length : 6 1 2 3 원래 예상했던 출력 내용 하지만 예상과는 달리 아래와 같이 출력되었습니다. split length : 3 1 2 3 Java에서 split메서드의 기본동작은 ..
[JAVA] Arrays.asList java.lang.UnsupportedOperationException 프로젝트를 진행하다가 원본 배열를 복사한 후에 복사된 배열안에 추가해야하는 상황이 생겼습니다. 단순한 작업이지만 처음에 어떻게 잘라서 어떻게 사용해야할지 뭔가 쉬운 방법은 없을지 생각하며 찾아보다가 Arrays.asList라는 메서드를 발견했고 이를 통해 배열을 리스트로 변경(casting)하여 add 메서드를 통해서 리스트에 추가해보려고 했습니다. 하지만 제목과 같은 에러가 발생했고 또 다시 구글링을 하다보니 발견한 내용입니다. Arrays.asList로 생성된 List객체는 immutable한 객체이므로 add 또는 remove를 지원하지 않는다. immutable하다는게 처음에는 무슨 의미인지 와닿지 않아서 영어 단어를 찾아보았습니다. immutable하다는것은 변할 수 없다는 의미이고 Arrays..
[JAVA] java.security.cert.CertificateException: No name matching some_name found Problem public class UrlConnectionTest { public static void main(String[] args) throws Exception { URL url = new URL("http://example.com"); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream(); // occur error } } Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching some_name found at com.sun.net.ssl.internal.ssl.Al..
[JAVA] 스트림(Stream) 1. 스트림(Stream)? 많은 수의 데이터를 다룰 때 for문이나 Iterator를 사용하여 코드를 작성해왔다. 또한 데이터의 형태마다 다른 방식으로 다뤄야 했다. 예를들어, 데이터의 정렬을 예로 들자면 컬렉션 클래스 중 List를 정렬할 때에는 Collections.sort()를, 배열을 정렬할 때는 Arrays.sort()를 사용해야했다. 같은 기능이고 같은 메서드임에도 다르게 호출을 해야만 했다. 이러한 문제점들을 해결하기 위해 만든 것이 바로 자바 8부터 등장한 스트림(Stream)이다. 어떤 데이터이든 같은 방식으로 다룰 수 있게 만든것이다. 스트림을 이용하면, 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있기 때문에 코드의 재사용성이 높아진다. 예제를 보면..
[JAVA] 컬렉션 클래스 (Map) 컬렉션 클래스 HashMap HashMap과 Hashtable의 관계는 ArrayList와 Vector의 관계와 같아서 Hashtable보다는 새로운 버전인 HashMap을 사용하는 것을 권장한다. 둘다 Map인터페이스를 상속받아 구현되어 데이터를 키와 값으로 관리하는 자료구조이다. 큰 특징으로는 키(Key)가 데이터를 추출할 때 구분자로 활용하는 방식을 취하는데 이는 리스트 인터페이스와 같은 자료구조보다 탐색에 있어서 더 높은 효율을 기대할 수 있다. 책에는 HashMap에 대해서만 설명이 되어 있는데 둘의 차이점을 간단히 살펴보고 넘어가자, HashMap과 Hashtable의 차이 둘의 차이점으로 동기화를 들 수 있다. HashMap의 경우 동기화를 지원하지 않는다. 반면 다중 쓰레드 환경에서 Has..
[JAVA] 람다식 (Lambda Expression) 자바가 1996년에 처음 등장한 이후로 두 번의 큰 변화가 있었는데, 한번은 JDK 1.5부터 추가된 지네릭스(generics)의 등장이고, 또 한 번은 JDK 1.8부터 추가된 람다식(lambda expression)의 등장이다. 이 두 가지 새로운 변화에 의해 자바는 더 이상 예전의 자바가 아니게 되었다. 특히 JDK 1.8부터 등장한 람다식으로 인해 자바는 객체지향언어인 동시에 함수형 언어가 되었다. 람다식이란? 간단히 말해서 메서드를 하나의 식(expression)으로 표현한 것이다. 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다. 이전에 내부 클래스를 정리하면서 익명 함수(anonymous function) 언급할 때 같이 가볍게 살펴봤듯이 람다식도 익명함수이다. 메서드를 람다식으로 ..
[JAVA] 컬렉션 프레임워크(Collection Framework) 컬렉션 프레임워크(Collection Framework)자바에서 컬레션 프레임워크이란, 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 다시 말해 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다. JDK 1.2 이전까지는 Vector, Hashtable, Properties와 같은 컬렉션 클래스들을 서로 각자 다른 방식으로 처리해야 했으나 JDK 1.2부터 컬렉션 프레임웍이 등장하면서 다양한 종류의 컬렉션 클래스가 추가되고 모든 컬렉션 클래스를 표준화된 방식으로 다룰 수 있도록 체계화되었다. 이러한 컬렉션 프레임워크은 자바의 인터페이스(interface)를 사용하여 구현된다. 컬렉션 프레임워크의 핵심 인..