Old Posts/Java108 [Java] JNI 사용법 및 예제 자바는 가상 머신인 JVM위에서 실행되도록 만들어진 언어다. 프로그래머가 자바 언어로 작성한 프로그램은 JVM 위에서 동작하도록 중간 언어인 바이트 코드로 컴파일 된다. 운영체제나 아키텍처와 관련된 호환은 JVM이 신경써주기 때문에 하나의 소스코드로 작성한 프로그램을 플랫폼에 상관없이 실행할 수 있다. 다시말해서 자바로 작성된 프로그램을 윈도우에서도 실행할 수 있고, 리눅스에서도 동일하게 실행할 수 있다는 의미다. JVM이 하는 이런 역할은 자바뿐 아니라 JVM 언어들의 강점이다. 하지만 운영체제가 제공하는 특정 기능들을 자바에서는 사용하기 힘들다는 단점도 있다. 리눅스 커널이 업데이트 되면서 새로운 시스템 콜이 추가되거나 특정 유닉스의 시스템 콜을 호출하고 싶지만 JVM이 지원하지 않으면 자바에서 사용.. 2021. 4. 19. [Java] Java Unsupported major.minor version 52.0 에러 Java 프로그램을 작성한 다음 클러스터에 배포를 할 때 가끔씩 Java Unsupported major.minor version 52.0 에러를 만나게 된다. 톰캣(Tomcat)이나 하둡 맵 리듀스(MapReduce)처럼 jar 파일로 묶어서 배포하는 경우에 쉽게 만나볼 수 있는 에러다. "Java Unsupported major.minor version 52.0"라는 메시지에서 알 수 있듯이 Java 버전이 맞지 않아서 발생하는 에러다. 정확히는 jar 파일을 생성한 빌드환경과 생성한 jar 파일을 실행하려는 환경이 다른 JDK 버전을 사용하고 있는 경우 발생한다. Java SE 8 (JDK 1.8)에서 빌드한 Jar 파일을 Java SE 7 (JDK 1.7)이 설치되어 있는 환경에서 실행하려고 하면.. 2021. 4. 1. [Java] 람다식(Lambda Expressions) 사용법 및 예제 자바8에서 '람다식(Lambda Expression)'이 지원되면서 자바는 완전히 새로운 언어처럼 보이기 시작했다. 지네릭스(Generics)가 자바을 크게 변화시킨 것처럼 람다식 역시 자바를 어마어마하게 변화시켰다. 람다식의 등장으로 자바는 객체지향 언어의 특징과 함께 함수형 언어의 특성을 갖추게 되었다. 람다식(Lambda expression) 람다식은 1930년대 알론조 처치(Alonzo Church)라는 수학자가 처음 제시한 함수의 수학적 표기방식인 '람다 대수(lambda calculus)'에 그 뿌리를 두고 있다. 람다식을 이용하면 코드가 간결해지고, 지연 연산 등을 통해서 성능 향상을 도모할 수 있다. 반면 모든 엘리먼트를 순회하는 경우에는 성능이 떨어질 수도 있고, 코드를 분석하기 어려워 .. 2021. 3. 31. [Java] Project Lombok Annotation 자바의 버전이 올라가면서 간결한 코드 작성을 위한 장치들이 많이 도입되고 있다. 하지만 여전히 자바의 가장 큰 문제점 중 하나로 군더더기가 많은 점이 꼽힌다. '프로젝트 롬복(Project Lombok)'은 자바로 작성된 소스코드를 좀 더 간결하게 만들어주기 위한 프로젝트다. 간단한 클래스를 작성해보자. public class Student { private final int id; private final String name; private final int age; private final String department; public Student(int id, String name, int age, String department) { this.id = id; this.name = name; t.. 2021. 3. 30. [Java] SimpleDateFormat을 이용한 날짜 포맷 변환 예제 Java를 이용해서 시간 데이터를 다루는 방법에는 몇 가지가 있다. 그 중에 가장 간단한 방법은 SimpleDateFormat 클래스를 이용해서 문자열을 파싱하거나 문자열로 시간 데이터를 표현하기도 한다. 이번 포스트에서는 SimpleDateFormat 클래스의 사용방법과 예제, 주의 사항을 다뤄보겠다. SimpleDateFormat은 java.text.DataFormat 이라는 abstract 클래스를 상속받은 클래스다. 이름에서도 알 수 있듯이 간단하게(Simple) 날짜 포맷을 다룰 수 있는 메소드를 제공한다. SimpleDateFormat 예제 - 문자열을 Date 객체로 변환 문자열로 표현된 날짜 정보를 파싱하여 Date 객체로 변환해보자. // 변환할 문자열 String dateStr = "2.. 2021. 3. 30. [Java] java.library.path와 LD_LIBRARY_PATH 리눅스 환경에서 자바 프로그램을 실행할 때 설정해줘야 하는 환경 변수 중에 LD_LIBRARY_PATH라는게 있다. LD_LIBRARY_PATH는 '로더(Loader)'가 공유 라이브러리나 동적 라이브러리를 찾을 때 찾아가는 경로를 지정하는 환경변수다. 맨 앞에 있는 LD라는 프리픽스(Prefix)가 로더를 의미한다. 리눅스 환경에서 실행 파일을 PATH 환경변수에 지정한 경로에서 찾는 것과 동일하다고 생각하면 된다. .bashrc 파일이나 스크립트 파일에서 다음과 같이 LD_LIBRARY_PATH 환경 변수를 지정해주면 된다. $ LD_LIBRARY_PATH=/home/user/lib:/home/user/test/lib $ export LD_LIBRARY_PATH PATH 환경변수처럼 각 경로들은 '콜.. 2021. 2. 23. [Java] computeIfAbsent 예제 Map을 사용할 때 굉장히 빈번하게 사용하는 코드 패턴이 있다. Map map = new HashMap(); Value value = map.get(key); if (value == null) { value = getNewValue(key); map.put(key, value); } Map에서 특정 키에 해당하는 값이 존재하는지 확인한 후, 없으면 새로 만들어서 넣어주는 형태의 코드다. Key 값에 해당하는 Value가 존재하면 가져와서 사용하고 없으면 새로 만들어주는 패턴의 코드를 위해 Java 8에서는 computeIfAbsent()라는 메소드를 이용해서 짧게 구현할 수 있다. Map map = new HashMap(); Value value = map.computeIfAbsent(key, k -> .. 2021. 1. 19. Java NIO - Pipe 파이프(Pipe)는 두 스레드를 연결해주는 'One-way' 데이터 커넥션이다. 파이프(Pipe)에는 데이터를 쓸 수 있는 싱크채널(Sink Channel)과 데이터를 읽어가는 소스채널(Source Channel)이 있다. 싱크채널에 데이터를 써주면 파이프를 통해 소스채널로 전달되고, 다른 스레드가 소스채널을 통해 데이터를 읽을 수 있다. Pipe pipe = Pipe.open(); 우선 파이프 객체를 가져온다. Pipe.SinkChannel sinkChannel = pipe.sink(); String data = "Send message"; ByteBuffer buffer = ByteBuffer.allocate(64); buffer.clear(); buffer.put(data.getBytes()); b.. 2021. 1. 6. Java NIO - 네트워크 입출력 (SocketChannel, ServerSocketChannel, DatagramChannel) Java NIO를 이용해서 네트워크 입출력을 구현할 수도 있다. 파일 입출력과 함께 핵심적인 기능이다. Java NIO에서 제공하는 네트워크 관련 채널은 다음과 같다. SocketChannel (TCP 클라이언트) ServerSocketChannel (TCP 서버) DatagramChannel (UDP 통신) 1. SocketChannel Java NIO는 SocketChannel을 통해 TCP 연결을 지원한다. SocketChannel을 만드는 방법에는 두 가지가 있다. connect() 메소드로 서버 연결 accept() 로 클라이언트 연결 SocketChannel channel = SocketChannel.open(); channel.connect(new InetSocketAddress("local.. 2021. 1. 5. 이전 1 ··· 8 9 10 11 12 다음