[Java] 12_입출력(Input/Output의 개요)

2022. 8. 12. 14:40·📗 self-study/📗 KH정보교육원 당산지원

12_입출력(I/O)

 

입출력(IO): 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 주고받는 것

=> 기준점은 프로그램!

데이터가 프로그램에서 입/출력되며 이동하는 공간을 "스트림(통로)"라고 부름(학원에서는 외부 요소 중에서 파일을 기준으로 통로 움직임을 보여 주며 진행할 것)

 

FileRun 클래스

package com.kh.chap01.file.run;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

// 자바 코드로 간단하게 파일 만드는 과정(java.io.File 클래스)
public class FileRun {

	public static void main(String[] args) {
		
		// 헷갈리지 말 것: File 객체를 만든다고 해서 바로 파일이 컴퓨터에 만들어지지는 않음
		
		try {
			// 1. 별도의 경로 지정을 하지 않고 오로지 파일명만 제시해서 생성해 보기
			File file1 = new File("test.txt"); // test.txt 라는 파일을 만들겠다라고 파일명을 제시 // 상대 경로
			file1.createNewFile(); // createNewFile 메소드를 호출해서 실행되는 시점에 파일이 만들어짐
		
			// 2. 경로 지정을 한 파일명을 제시해서 생성해 보기("C:\aaa\test.txt")
			/*
			 * \n: 개행문자
			 * \t: tab키
			 * \: 이스케이프 문자(단독 사용 x)
			 * \\: \로 간주
			 */
			
			// => 항상 존재하는 경로로 지정해야 함
			// 	C:/aaa 라는 폴더가 이미 존재해야지만 test.txt 파일이 생성될 수 있음
			
			File file2 = new File("C:\\aaa\\test.txt"); // \: 이스케이프 문자 (단독 사용 불가)
			// file2.createNewFile();
			
			// 3. 폴더를 생성하고 나서 그 안에 파일 만들기
			
			File bbbFolder = new File("C:\\bbb"); // 절대 경로
			bbbFolder.mkdir(); // mk => make의 약자, 폴더 생성 메소드
			
			File file3 = new File("C:\\bbb\\test.txt"); // 절대 경로
			file3.createNewFile();
			
			// 4. 별도의 경로 지정 없이 폴더 생성 후 파일을 생성해 보기
			// => 별도의 경로 지정 없이 폴더를 생성하더라도 현재 내가 작업 중인 이 프로젝트 폴더 내부에 바로 생성됨
			File folder = new File("test"); // 상대 경로
			folder.mkdir();
			
			File file = new File("test\\person.txt"); // 상대 경로(내가 작업 중인 폴더가 최상위 폴더로 잡히기 때문에)
			file.createNewFile();
			
			/*
			 * - "명확한 시작점을 작은 경로"를 제시했을 때
			 * 	  C드라이브, D드라이브, ... => 루트 디렉토리(컴퓨터의 최상위 폴더)
			 * 
			 * - "명확한 시작점이 없는 경로"를 제시하지 않았을 때
			 * 	    현재 내가 작업 중인 위치를 시작점으로 잡혀서 경로가 만들어짐
			 * 
			 */
			
		
		} catch(IOException e) {
			e.printStackTrace();
			
		}
		
		System.out.println("프로그램 종료");

	}

 

프로그램상의 데이터를 외부 매체(모니터, 스피커, "파일" 등) 로 출력하거나
입력장치(키보드, 마우스 등)로 입력받는 과정을 진행하고자 한다면
반드시 프로그램과 외부 매체와의 "연결 통로"를 만들어야 함 => 연결 통로 == "스트림"
 
*스트림의 특징
- 단방향: 입력이면 입력, 출력이면 출력
 입력, 출력용 스트림이 각각 따로 존재함
 즉, 동시에 입출력하고자 한다면 적어도 2개의 스트림이 필요함(하나의 스트림으로는 절대 안 됨)

단방향


- 선입선출 (First In First Out, FIFO): 먼저 전달한 값이 먼저 나오게 됨
 Queue라는 구조를 가지고 있음!
  참고) Stack이라는 구조(First In Last Out, FILO)
- 데이터 전송 시 시간 지연 문제(timeout, delay)가 발생할 수 있음

Queue 방식

- 위의 2가지 특징으로 인해 시간 지연(delay) 일어날 가능성 있음
  
 *스트림의 구분
 - 통로의 사이즈
  바이트스트림: 한 번에 1byte짜리만 이동할 수 있는 정도의 좁은 통로 => 입력(XXXInputStream) / 출력(XXXOutputStream) 
  문자스트림: 한 번에 2byte짜리가 이동할 수 있을 정도의 넓은 통로 => 입력(XXXReader) / 출력(XXXWriter)
  
 - 외부 매체와의 직접적인 연결 여부
  기반스트림: 외부 매체와 직접적으로 연결되는 통로
  보조스트림: 기반스트림으로 부족한 성능을 향상시켜 주는 용도의 스트림 (외부 매체와 직접적으로 연결 X)
    즉, 단독 사용 불가(단독 객체 생성 불가)
 ex) BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader: 보조 스트림, InputStreamReader: 기반스트림
 => 속도 향상, 자료형에 맞춰 변환, 객체 단위로 입출력하게 도움 등의 성능을 기대할 수 있음
 => 단, 보조스트림은 단독으로 사용 불가, 반드시 기반스트림이 필수!

저작자표시 (새창열림)
'📗 self-study/📗 KH정보교육원 당산지원' 카테고리의 다른 글
  • [Java] 12_IO(보조 스트림을 이용한 객체, 객체배열 단위 입출력)
  • [Java] 12_입출력[바이트 기반 스트림(== 좁은 통로)과 문자 기반 스트림(== 넓은 통로)의 입출력, 보조 스트림의 개요 및 입출력]
  • [8/18 시험 안내]
  • [Java] 11_예외처리(Unchecked/Checked Exception)
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[Java] 12_입출력(Input/Output의 개요)
상단으로

티스토리툴바