본문 바로가기

Java/Java IO+NIO

(6)
자바 파일 변경 감지, 와치서비스를 이용한 파일 변경 알림 받기(WatchService, WatchKey) Java File Change Notification, Monitoring, WatchService 0. 긴~~ 사족다양하게 키워드를 준비해봤다.업무에서 Application Runtime중에 어떤 파일의 데이터(meta-data, properties 등...)가 변경되면 이벤트를 받아 다시 데이터를 메모리로 적재하는(reload) 기능이 필요했다.이 기능은 꽤나 광범위하게 쓰이고 있다.eclipse, IntelliJ 같은 IDE에서 파일이 변경되면 즉시 변경된 파일에 (*)별 표시가 뜨는 것과 Spring 같은 경우는 devtools를 dependency로 추가하면 파일이 변경될 때마다 서비스를 재시작해주는 기능등이 있다.또한 설정 값(Properties) 변경을 알려주는 기능은 그냥봐도 너무 많다.a..
멀티 스레드 병렬 프로그래밍을 하기 전 반드시 읽어야할 것들 - Java 객체 편(객체 동기화, 클래스의 쓰레드 안정성) JAVA 멀티 스레드 환경에서 "객체"를 다루기 전 알아야 할 것들 제목은 거창하지만 내용이 빈약할 수 있음을 미리 알립니다...java.util.concurrent 패키지 내용을 정리하려고 하다가 기본 지식이 부족하다 생각하여 JAVA 병렬 프로그래밍이라는 책을 읽고 멀티 스레드 프로그래밍 환경에서 "Thread-safe"하게 만드는 기본 지식을 정리한 것입니다.+ 스레드에 대한 어느정도 지식, 경험이 있는 분들이 보기 좋습니다. (초급 개발자 정도? 중급이상은 볼 필요가 없을 겁니다...)스레드 안정성(Thread-safe) : 여러 스레드가 어떤 변수나 함수 또는 클래스 객체에 접근할 때 계속해서 개발자가 의도한대로 정확하게 동작하하다는 것로 정의한다. 호출하는(사용하는) 쪽에서 특별한 동기화 코드..
자바 NIO 정리 #1 개요 ("JAVA는 느리다"라는 말이 생긴 이유와 개선책, 성능이 좋아지는 입출력 포인트 2가지) "자바는 느리다" - 어디가 느릴까? 진짜 느릴까? "자바는 느리다." 라는 말은 어느 정도 프로그래밍을 해온 개발자들이라면 들어봤을 법한 말이다.그런데 자바가 어디가 느리고 왜 느린지, 그리고 얼마나 느린지에 대한 답을 하는 개발자는 많지 않다.이번 포스트부터 4개 정도의 포스트로 연재할 내용은 자바는 어떠한 이유로 느리고 그것을 개선한 방법은 무엇인지에 대한 것이다.- 자바는 어디가, 왜 느릴까?일단 자바는 C/C++과 달리 포인터로 1. 직접 메모리를 관리하고 운영체제 수준의 2. 시스템 콜을 직접 사용할 수 없다. JVM이라는 프로세스 위에서 동작하는 추상화된 비교적 고수준의 언어이기 때문에 자바는 느리다.기타 GC(Garbage Collection)의 메모리 점유 문제등 느린 이유는 더 많이 있..
Java TCP 소켓 프로그래밍 예제 - 채팅프로그램 만들기 (멀티 쓰레드) TCP 소켓 프로그래밍 튜토리얼, 채팅 프로그램 TCP/IP를 이용한 소켓 프로그래밍으로 채팅 예제를 만들며 이해해본다.코드를 살펴보며 정리한다.* 채팅 서버 코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108package nio; import java.io.BufferedReader;import java.io.InputStreamReader;import java.io...
자바 IO에서는 생성자만 보면 된다! (상속, 바이트스트림, 문자스트림, 객체스트림) 자바 IO를 이해하기 전 "상속"을 명확히 이해하자. 자바에서 입출력(IO)을 이해하려면 "상속"을 명확하게 이해하고 있어야 한다.상속? 객체 지향 프로그래밍에서 클래스의 재사용을 위해서 자식클래스가 부모클래스의 메소드등을 물려받는 것 아닌가?오버라이딩, 오버로딩을 떠나서 단순하게는 맞지만 여기서 중요한 점은 생성자, 메소드의 파라미터를 보는 시각이 명확해야하는 점과 IO클래스들이 상속을 통해 클래스를 조립해서 입출력하는 방법을 다르게 하는 점이다.1public static void print(String str){...} 이 메소드를 어떻게 해석해야 할까?"print라는 메소드가 String클래스의 파라미터를 받는다."정확한 답은 아니다."print라는 메소드가 String클래스와 String클래스의 ..
Thread를 올바르게 생성, 시작, 중단하는 방법(feat. daemon thread와 자바런타임 메모리 공유) 쓰레드(Thread)를 올바르게 생성, 시작하는 방법 쓰레드, 프로세스가 무엇이고 어떻게 생성하는지는 다른 포스트에 이미 있으니 생략한다.http://jeong-pro.tistory.com/71?category=773575 ▶ 쓰레드를 생성할 때는 Runnable 인터페이스를 상속한 Runnable객체를 생성시키는 방법을 사용해라.쓰레드를 생성하는 일반적인 방법으로 두 가지가 있다. 1. Thread 클래스를 상속받고 run()메소드를 오버라이딩해서 정의한 후 실행하는 방법 2. Runnable 인터페이스를 확장해 run()메소드를 구현해 정의한 후 실행하는 방법왜 Runnable 인터페이스를 확장하는 것이 좋을까?그 답은 상속과 인터페이스에 있다. 자바 다중상속을 지원하지 않기 때문에 상속은 하나의 클..