Day 43 (23.02.24)

Jane·2023년 2월 24일
0

IT 수업 정리

목록 보기
52/124

1. 자신이 원하는 파일을 하나 골라서 콘솔에 출력해보기

  • 문자열 기반 스트림으로 구성된 파일으로 선택하기
import java.io.*;
import java.util.*;

public class InputStreamPractice {

	public static void main(String[] args) throws IOException {
		Scanner scan = new Scanner(System.in);
		System.out.print("읽을 파일 : ");
		String src = scan.nextLine();
		System.out.println();
		System.out.println("=========");
		System.out.println();
		try (Reader reader = new FileReader(src)) {
			int ch;

			while (true) {
				ch = reader.read();
				if (ch == -1) {
					break;
				}
				System.out.print((char) ch);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

[Console]

2. BufferedWriter - BufferedReader

  • 기본적인 Writer / Reader는 하나씩 쓰고 읽었지만, BufferedWriter / BufferedReader는 문자열 자체를 읽고 쓸 수 있다.

OutputStreamPractice.java (BufferedWriter 내용 작성)

import java.io.*;
import java.util.*;

public class OutputStreamPractice {

	public static void main(String[] args) throws IOException {
		String koreanString = "공부에 있어서 돈이 꼭 필요한 것은 아니다.";
		String englishString = "Life is long if you know how to use it.";

		try (BufferedWriter bw = new BufferedWriter(new FileWriter("String.txt"))) {
			bw.write(koreanString, 0, koreanString.length());
			// Writer에 해당하는 한국어 문자열을 처음부터 끝까지 쓴다 (index= 0 ~ 문자열의 총 길이까지)
			bw.newLine(); // 한줄 개행
			bw.write(englishString, 0, englishString.length());
			// 영어 문자열도 쓴다.
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

InputStreamPractice.java (BufferedReader 내용 작성)

import java.io.*;
import java.util.*;

public class InputStreamPractice {

	public static void main(String[] args) throws FileNotFoundException, IOException {

		try (BufferedReader br = new BufferedReader(new FileReader("String.txt"))) {
			String str;

			while (true) {
				str = br.readLine(); // Reader로 라인을 읽어온다.
				if (str == null) {
					break;
				} // 아무 것도 없으면 그만하기
				System.out.println(str); // String 출력하기
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

3. 프로세스와 스레드

3-1. 개요

  • 프로세스 : 실행 중인 프로그램 (메모리에 올라가 있으며, CPU를 사용하는 것)
    • 단일 프로세스 : 작업은 하나에 한 가지만 가능하다.
    • 멀티 프로세스 : 다양한 작업을 동시에 할 수 있다.
      멀티 프로세스가 가능한 이유는 CPU가 프로세스를 번갈아 실행시키기 때문이다. (Context Switch)

  • 스레드 : 프로세스 안에서 작업을 수행하는 것 (실행 단위) / 프로그램 안의 또 다른 프로그램

3-2. 싱글 스레드와 멀티 스레드의 예시 코드

싱글 스레드 : 먼저 시작한 작업이 끝나야 다음 작업을 할 수 있다.


public class JavaTest {
	public static void main(String[] args) {
		for (int i = 0; i < 300; i++) {
			System.out.println("-");
		}
		
		for (int i = 0; i < 300; i++) {
			System.out.println("|");
		}
	}
}

멀티 스레드 : 함수 객체로 구현되어 동시에 작업할 수 있도록 만들어졌다. (구현한 것이 섞여서 출력된다.)

  • run()은 각각의 Thread 클래스의 구현하는 부분을 적는다. 그냥 호출해도 되지만, 아무런 것을 거치지 않고 바로 실행된다.
  • start()는 프로그램을 실행하는 함수이며, 세부적인 내용은 비공개이다. run()을 호출하여 실행하는 부분도 있지만, 이외에도 OS가 관리하는 부분 등 다양한 내용들이 있다.
  • OS(운영체제)는 스레드 단위로 관리하고 실행한다.
class MyThread1 extends Thread {
	@Override
	public void run() {
		for (int i = 0; i < 300; i++) {
			System.out.println("-");
		}
	}
}

class MyThread2 extends Thread {
	@Override
	public void run() {
		for (int i = 0; i < 300; i++) {
			System.out.println("|");
		}
	}
}

public class JavaTest {
	public static void main(String[] args) {
		MyThread1 th1 = new MyThread1();
		MyThread2 th2 = new MyThread2();
		th1.start();
		th2.start();
	}
}


profile
velog, GitHub, Notion 등에 작업물을 정리하고 있습니다.

0개의 댓글