본문 바로가기

Java

(51)
자바 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 인터페이스를 확장하는 것이 좋을까?그 답은 상속과 인터페이스에 있다. 자바 다중상속을 지원하지 않기 때문에 상속은 하나의 클..
자바 쓰레드 (멀티스레드, 스레드 세이프, 스레드 풀) 자바 쓰레드 (JAVA Thread) 쓰레드 : 프로세스(실행중인 프로그램)에서 하나의 실행 흐름.자바는 멀티 쓰레드를 지원하는 언어로 멀티 쓰레드란 말 그대로 하나의 프로그램에서 여러 개의 실행 흐름을 만들고 실행 할 수 있다는 것이다.멀티쓰레드를 사용 하는 이유 : 외부와의 연계같이 대기 시간이 발생했을 때 기다리는 동안 다른 일을 처리할 수 있게 해서 처리 속도를 빠르게 하기 위함이다.* 단, CPU코어 수가 적으면 쓰레드를 그 만큼 만들 수 없기 때문에 드라마틱하게 빨라지지 않고, 처리하는 데이터 양이 적을 때에도 속도가 많이 빨라지지 않기 때문에 쓰레드를 적절한 경우에 사용하는 것이 좋다.쓰레드 만드는 법 1. Runnable 인터페이스를 상속(확장)한 클래스를 만든다. (Runnable 인터페..
JAVA CSV 파일 입출력 Java CSV 파일 입출력 CSV 파일은 Comma Separated Values 이름 그대로 콤마(,)로 구분하는 데이터 저장 형식이다.개인적으로 엑셀파일에 데이터가 있을 때 엑셀의 다른이름으로 저장에서 파일형식을 .csv 로 바꿔서 입출력했다.R프로그래밍을 했을 때도 입출력했던 기억이 있다.1. csv파일 읽기[csv 파일 샘플]엑셀에 적고 .csv파일로 저장한 다음에 메모장을 통해 csv파일을 열어보았을 때 화면이다.그냥 메모장에서 샘플파일을 만들어 저장해도 무관.* 주의할 점은 UTF-8 형식의 유니코드로 저장해야 에러가 없다. (에러나면 메모장에서 UTF-8로 저장하고하면 됨.)12345678910111213141516171819202122232425262728293031323334353637..
자바 파일 입출력 (txt파일 한 문자씩, 한 줄씩, 한 번에 읽기) 자바 파일 입출력원리1. 파일 객체를 만든다.2. 해당 파일을 열어 읽는다. (+읽은 내용 알아서 처리, 어디다 쓰든지 문자열을 바꾸던지 뭐 맘대로 하면 된다.)3. 파일을 닫는다.1) 한 문자씩 읽기1234567891011121314151617181920212223242526package com.tistory.jeongpro; import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException; public class ReadText1 { public static void main(String[] args){ try{ //파일 객체 생성 File file = new File(..
자바 직렬화 (Serialization) 직렬화 객체의 상태 혹은 데이터구조를 기록할 수 있는 포맷으로 변환하는 것.(객체 -> 문자열) 스트림에 전송 (문자열 -> 객체)문자열로 받은 것을 객체로 변환하는 것은 역직렬화.적용 분야 파일저장 : .dat 파일에다가 저장해두고 다시 불러와서 객체로 쓸 때네트워크통신 : 객체를 패킷에 담아 전송할 때데이터베이스 : 데이터베이스에 객체를 문자열로 바꿔서 저장해놓고 다시 꺼내쓸 때웹 : 웹서버에서 브라우저로 구조화된 데이터를 보낼 때 (ex JSON)직렬화 데이터 타입Binary : 바이트의 연속된 형태로 저장JSON : 텍스트 형식으로 널리 다양한 프로그래밍언어에서 읽고 쓸 수 있어 많이 사용됨XML : JSON에 비해 복잡하나 스키마를 적용할 수 있고 무결성 검사 가능사용하기 자바의 Serializ..
URL Connection URL 커넥션 URL 객체의 getInputStream메서드를 호출해서 URL을 읽어 올 수 있다. 하지만 웹 리소스에 대한 추가정보 혹은 데이터를 써야 한다면 URLConnection 클래스를 사용하면 된다.1. URL객체 가져오기URLConnection connection = url.openConnection();HTTP URL일때 실제 반환받는 객체는 HttpURLConnection의 인스턴스이다.2. 필요하면 요청 프로퍼티 설정connection.setRequestProperty("Accept-Charset", "UTF-8, ISO-8859-1");키와 연관된 값이 여러개면 각각을 콤마로 구분3. 서버로 데이터를 보내기connection.setDoOutput(true);try(OutputStrea..
입출력 스트림 (I/O Stream) 스트림 얻기 InputStream in = Files.newInputStream(path);OutputStream out = Files.newOutputStream(path);path는 Path클래스의 인스턴스다. // File System에서 경로를 나타낸다.URL이 있을 때는 입력 스트림에서 해당 URL의 콘텐츠를 읽을 수 있다.URL url = new URL("http://jeong-pro.com/index.html");InputStream in = url.openStream();바이트 배열 읽기byte[] bytes = ...;InputStream in = new ByteArrayInputStream(bytes);바이트 배열 출력ByteArrayOutputStream out = new ByteAr..