본문 바로가기

Java/Java 기초

Simple Java HttpServer and HttpURLConnection HttpServer import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; public class HttpServerApplication { final static HttpHandler indexHandler = httpExchange -> { final String response = "This is index page..."; httpExchange.sendResponseHeaders(200, response.length()); final Ou..
Java Custom Annotation Java Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 자바1.5 버전 이상에서 사용이 가능하며, @ 기호를 앞에 붙여서 사용한다. Annotation은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 JVM에 포함되어 작동한다. Annotation을 사용하면 관련 코드에 직접 메타데이터를 설정할 수 있어 가독성이 증대되며, 개발 효율성을 증대시킨다. Java에서는 사전에 정의된 Annotation들이 존재하는데 @Deprecated, @Override, @suppressWarning이 그것이다. 이러한 Annotation 외에 Annotation 정의를 위해 사용되는 Annotation이 존재하는데 이를 Meta Annotation이라고 한다. 대표적으로 ..
ParallelStream의 결과를 List에 저장 ParallelStream은 Java에서 제공하고 있는 Stream 중 하나로 Collection 속의 데이터를 병렬 처리하기 위해서 사용된다. 최근에 팀에서 ParallelStream을 사용하던 코드에서 이슈가 있었는데, ParallelStream으로 처리된 결과를 List에 저장하여 추가적인 작업으로 후처리하려다가 문제가 발생한 것이다. 간단한 코드로 옮겨보자면 다음과 같은 구조의 코드였다. import java.util.ArrayList; import java.util.List; public class ListTest { public static void main(String[] args) { List numbers = new ArrayList(); for (int i = 0; i < 100000;..
Java Reflection 사용하기 (7) 이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다. Using Java Reflectionhttps://www.oracle.com/technetwork/articles/java/javareflection-1536171.html 배열의 사용reflection의 마지막 단계는 배열을 만들고 조작하는 것입니다. Java에서의 배열은 특수한 형태의 class이며, 배열 참조는 객체 참조로 할당할 수 있습니다. 배열이 작동하는 방식을 확인하기 위해 아래의 예시를 생각해보겠습니다. import java.lang.reflect.*; public class array1 { public s..
Java Reflection 사용하기 (6) 이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다. Using Java Reflection https://www.oracle.com/technetwork/articles/java/javareflection-1536171.html 새로운 객체 생성하기 생성자를 호출하는 것은 새로운 객체를 생성한다는 측면에서 단순한 함수 호출과는 다르다고 할 수 있습니다. (정확히는 새 객체를 만든다는 것은 메모리 할당과 객체의 생성을 포함하는 것입니다.) 그렇기 때문에 앞의 함수 호출의 예와 최대한 유사한 예시를 찾아보면 아래와 같습니다. import java.lang.reflect.*; p..
Java Reflection 사용하기 (5) 이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다. Using Java Reflectionhttps://www.oracle.com/technetwork/articles/java/javareflection-1536171.html 이름으로 함수 호출하기지금까지의 포스팅은 모두 reflection을 이용하여 class 정보를 가져오는 것이었지만, 단순히 정보를 가져오는 것에서 그치는 것이 아니라 이름을 이용하여 함수를 호출하는 등의 다른 활용방법도 존재합니다. import java.lang.reflect.*; public class method2 { public int add(i..
Java Reflection 사용하기 (4) 이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다. Using Java Reflectionhttps://www.oracle.com/technetwork/articles/java/javareflection-1536171.html Class Field 정보 가져오기Reflection을 이용하면 class에 정의된 data field 정보도 확인할 수 있습니다. import java.lang.reflect.*; public class field1 { private double d; public static final int i = 37; String s = "testing"; p..
Java Reflection 사용하기 (3) 이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다. Using Java Reflectionhttps://www.oracle.com/technetwork/articles/java/javareflection-1536171.html Class에서 정의된 함수 확인reflection을 사용하는 여러 방법들 중에서도 가장 기본적인 기능은 class에서 정의한 함수들을 확인할 수 있다는 것입니다. 구체적인 구현 내용은 아래와 같습니다. import java.lang.reflect.*; public class method1 { private int f1(Object p, int x) t..