Programming/Java

1. 개요ip에 ping을 날려 네트워크 상태를 체크하는 프로세스를 개발해야 했다.지난 시간에는 파이썬의 fabric이라는 라이브러리를 사용하여 시스템 명령어(ping, ll, mkdir 등)을 사용했었는데, 자바로도 구현을 해보고 싶어서 자바에서 사용하는 명령줄 도구를 찾아보았는데, ProcessBuilder라는 것을 알게되었다.  참고로 필자는 리눅스 기반의 시스템에서 사용하는 프로세스이므로 리눅스 명령러를 기반으로 개발을 진행했다.윈도우나 다른 OS의 경우 해당 OS 명령어로 변경해서 적용할 수 있다. 그럼 이제 ProcessBuilder 사용 방법에 대해서 정리해보자.  2. ProcessBuilder란?ProcessBulder는 자바에서 시스템 명령어나 스크립트를 실행할 수 있으며, 다양한 프로..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 클래스 생성과 구성 클래스는 인스턴스를 생성하기 위한 설계도이다. 클래스는 크게 변수 + 메서드로 구성된다. a. 변수란?변수는 쉽게 말해서 데이터(Value / Refernce)를 저장할 수 있는 저장공간이다. 변수는 선언위치에 따라 클래스 변수, 인스턴스 변수, 지역 변수로 나눌 수 있고, 이에 따라 사용가능한 스코프(영역)에 차이가 있다. 변수선언 예시class Variables { int iv; // 인스턴스 변수 static int cv; // 클래스 변수 void method() { int lv = 0; // 지역 변수(메서드 내부에서만 사용) }}public static void..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 스트림(Stream)이란?Java 8에서 추가되었다.컬렉션, 배열 등에 저장된 데이터를 for문을 사용하지 않고, 요소를 하나씩 참조해서 람다식과 함께 처리할 수 있도록 해주는 반복자이다. 스트림을 사용하기 전public class Test { public static void main(String[] args) { String[] str = {"aaa", "ddd", "ccc"}; List stringList = Arrays.asList(str); Arrays.sort(str); Collections.sort(stringList); for(String s ..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다.  1. 쓰레드 동기화두 개 이상의 쓰레드가 공유 데이터에 동시에 접근하게 되면 예상과 벗어난 결과가 나타날 수 있다. 이러한 문제를 해결하는 것이 쓰레드 동기화이다.쓰레드 동기화를 이해하기 위해서는 임계영역과 락에 대한 이해가 필요하다.임계영역(Critical section): 여러 쓰레드가 동시에 접근하면 문제가 발생할 수 있는 부분잠금(Lock): 임계 영역에 대한 접근을 제어하기 위한 도구  2. synchronized를 이용한 동기화a. 임계 영역을 지정하는 2가지 방법// 1. 메서드 전체를 임계 영역으로 지정public synchronized void calcSum() { // 임계 영역}// 2. 특정 영역을 임..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 쓰레드의 상태와 실행제어 a. 쓰레드 상태실행대기는 큐와 같은 구조로 먼저 실행대기열에 들어오면 먼저 실행된다.실행 중에 suspend(),sleep(), wait(), join(), I/O Block에 의해 일시정지된 상태가 될 수 있다. (time-out), notifiy(), resume(), interrupt()에 의해 일시정지 상태가 끝나면 실행대기 상태가 된다.상태설명NEW쓰레드가 생성되고 아직 start()가 호출되지 않은 상태RUNNABLE실행 중 또는 실행 가능한 상태BLOCKED동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태)WAITING, TIME_WAITING쓰레드의 작업이 종료..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 데몬 쓰레드(Daemon thread)일반 스레드의 작업을 돕는 스레드(보조)일반 스레드가 종료되면 데몬스레드는 자동 종료주로 무한루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건에서 다시 수행boolean isDaemon() // 데몬 스레드일 경우 truevoid setDaemon(boolean on) // true일 경우 데몬스레드가 된다.threadEx th = new threadEx();th.setDaemon(true) // 데몬 스레드th.start(); // 데몬 스레드 시작   데몬 쓰레드 예제public class DaemonThreadEx implements Runnable { static boo..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 싱글쓰레드와 멀티쓰레드a. 싱글쓰레드public class SingleThredTest { public static void main(String[] args) { long startTime = System.currentTimeMillis(); for (int i = 0; i 하나의 작업이 끝나고 다음작업을 진행하게 된다. b. 멀티쓰레드참고로 10코어 환경에서 실행한 예제이다. 싱글 코어의 경우에는 소요시간이 더 오래걸린다.public class MultiThreadTest { static long startTime = 0; public static void main(String[] ar..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 쓰레드 호출 스택쓰레드 별로 별도의 Stack Area(호출 스택), Register, Native Method Stack을 가진다.main 메서드 작업을 수행하는 것도 쓰레드이다.실행 중인 쓰레드가 없으면 프로그램이 종료 2. 쓰레드 생성과 호출 과정main 메서드에서 쓰레드1의 start()를 호출start()는 새로운 쓰레드를 생성하고, 쓰레드가 작업하는데 사용될 호출스택을 생성새로 생성된 호출스택에 run()이 호출되어, 쓰레드가 독립된 공간에서 작업을 수행이제는 호출스택이 2개이므로 스케줄러가 정한 순서에 의해서 번갈아 가면서 실행된다.  한 쓰레드가 예외가 발생해서 종료되어도 다른 쓰레드에게 영향을 미치지 않는다...
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다.1. 소켓(Socket) 프로그래밍소켓은 프로세스간 통신을 위해 사용되며, 양쪽 끝 간 데이터를 주고 받을 수 있는 데이터 통로를 통해 통신한다.소켓은 역할에 따라 서버 소켓, 클라이언트 소켓으로 구분한다.  2. TCP와 UDPTCP/IP 프로토콜에 포함된 프로토콜로 OSI 7계층에 전송계층에 해당된다.항목TCPUDP연결방식연결기반 - 연결 후 통신 - 1:1 통신방식비연결형기반- 연결없이 통신 - 1:1, 1:n, n:n 통신방식특징- 데이터의 경계를 구분안함- 신뢰성 있는 데이터 전송 - 데이터의 수신여부를 확인함(손실되면 재전송) - 패킷을 관리할 필요가 없음 - UDP보다 느림- 데이터 경계 구분함 - 신뢰성 없는 데이터 ..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 해싱이란?해싱이란 해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법이다.해시함수의 결과를 가지고 데이터가 저장되어 있는 곳을 찾아 데이터를 빠르게 검색할 수 있다.해싱에서 사용하는 자료구조는 배열과 LikedList 조합해시함수는 자바에서 Object클래스의 메서드 hashCode() 개념과 동일하다.   2. 해시테이블 검색 과정검색하고자 하는 키로 해시함수를 호출한다.해시함수의 결과(해시코드)로 해당 값이 저장되어 LikedList를 찾는다.LikedList에서 검색한 키와 일치하는 데이터를 찾는다.   3. 해시 테이블 성능 개선링크드 리스트는 검색에 불리한 자료구조 이기 때문에 링크드 리스트의 크기가 커..
kmindev
'Programming/Java' 카테고리의 글 목록