본문 바로가기

자바32

[Java] 자바 디렉토리(폴더) 생성 및 삭제 예제 자바를 이용해서 파일 시스템에 접근, 파일을 열거나 생성해서 데이터를 읽고, 쓰는 작업은 많이했다. 파일은 파일시트메의 디렉토리 혹은 폴더의 엔트리로 존재한다. 자바로 디렉토리(폴더)를 생성하고 삭제하는 코드를 구현해보자. 디렉토리 생성 특정 경로에 디렉토리가 없을 경우 자동으로 생성해주는 소스코드는 다음과 같다. import java.io.File; public class MakeDirectory { public static void main(String[] args) { // 생성할 디렉토리 경로 String path = "/tmp/testDir1"; File dir = new File(path); // 디렉토리가 존재하는지 체크 if (!dir.exists()) { try{ // 생성 boolean.. 2021. 4. 20.
[Java] JNI 사용법 및 예제 자바는 가상 머신인 JVM위에서 실행되도록 만들어진 언어다. 프로그래머가 자바 언어로 작성한 프로그램은 JVM 위에서 동작하도록 중간 언어인 바이트 코드로 컴파일 된다. 운영체제나 아키텍처와 관련된 호환은 JVM이 신경써주기 때문에 하나의 소스코드로 작성한 프로그램을 플랫폼에 상관없이 실행할 수 있다. 다시말해서 자바로 작성된 프로그램을 윈도우에서도 실행할 수 있고, 리눅스에서도 동일하게 실행할 수 있다는 의미다. JVM이 하는 이런 역할은 자바뿐 아니라 JVM 언어들의 강점이다. 하지만 운영체제가 제공하는 특정 기능들을 자바에서는 사용하기 힘들다는 단점도 있다. 리눅스 커널이 업데이트 되면서 새로운 시스템 콜이 추가되거나 특정 유닉스의 시스템 콜을 호출하고 싶지만 JVM이 지원하지 않으면 자바에서 사용.. 2021. 4. 19.
[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 예제] Array를 Set으로 변환 예제 코드 Java에서 배열(Array)을 Set 타입으로 변경하는 코드는 다음과 같다. Set set = new HashSet(Arrays.asList(array)); 배열을 List로 변경한 다음 HashSet의 생성자에 넘겨주면 된다. 참고로 Arrays.asList(array) 동작은 O(1) 연산이다. 그냥 배열을 리스트 API로 해석할 수 있도록 만들어주는 역할을 할 뿐이다. List를 HashSet의 생성자로 넘겨주면, 리스트 크기의 해시 테이블을 먼저 만들고 리스트를 순회하면서 엘리먼트들을 하나씩 HashSet에 추가하는 연산을 수행한다. 즉, 최종적으로는 O(n) 동작이다. Set set = new HashSet(); Collecdtions.addAll(set, array); 결국 풀어쓰면 이 코드.. 2020. 12. 30.
[Java] @VisibleForTesting 애너테이션 자바 코드에서 @VisibleForTesting 애너테이션은 해당 메소드 혹은 멤버 변수의 가시성(Visibility)이 테스트를 위해 완화된 것임을 명시적으로 나타내는 의미다. 자바의 경우 프로그래밍을 할 때, 비즈니스 로직을 담고 있는 클래스와 테스트 클래스를 분리한다. 그리고 이 두 클래스를 같은 패키지에 두는 것이 일반적이다. 이렇게 되면, 비즈니스 로직을 담고 있는 클래스의 private 멤버나 메서드를 테스트 클래스에서 접근할 수 없다. 비즈니스 로직을 담고 있는 클래스는 캡슐화(Encapsulation)를 위해서 불필요하게 메서드나 멤버 변수를 외부로 노출시키지 않는 것이 좋다. 그렇다고 private 메서드의 테스트를 안할 수는 없다. 이 때 사용하는 것이 @VisibleForTesting.. 2020. 9. 30.