Java

Java 문법(7) - 데이터 입출력

sangchu 2022. 2. 7. 22:31

지금까지 우리는 System.out.print로 값을 출력 및 확인을 했음. 즉, 콘솔 창을 통해 프로그램 내부에서 데이터가 어떻게 변화하는지 확인했음

  • 출력 기능: 컴퓨터 내부의 데이터를 컴퓨터 외부로 보여주는 기능
  • 출력 장치: 출력 기능을 담당하는 장치 (ex. 모니터, 스피커, 프린터 등)
  • 입력 기능: 외부에서 컴퓨터 내부로 데이터를 입력할 수 있는 기능
  • 입력 장치: (ex. 마우스, 키보드, 마이크 등)

 

키보드 데이터 입력받기1

  • 콘솔: 현재 배우고 있는 프로그래밍 환경
  • 콘솔은 대표적인 CLI(Command Line Interface) 개발 환경
  • CLI 환경: 글자를 이용한 입출력 환경. 입출력 방식이 글자로 제한됨
  • System.out.print 메소드는 자바를 활용한 CLI환경에서의 출력 메소드
  • Scanner: 입력 관련 클래스
import java.io.*;
import java.util.Scanner;	// Scanner 사용시 명시 필수!

class Main {
	public static void main(String[] args) {
		int iVal;
		double dVal;		
		
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("정수를 입력해주세요 : ");
		iVal = scanner.nextInt();				
		System.out.println("입력 정수 : " + iVal);
		
		System.out.print("실수를 입력해주세요 : ");
		dVal = scanner.nextDouble();				
		System.out.println("입력 실수 : " + dVal);
	}
}
  • 위 코드는 Scanner 클래스를 통해 정수와 실수를 입력받고, 입력받은 숫자를 다시 콘솔에 출력하는 프로그램
  1. Scanner 클래스를 사용하기 위해서는 import java.utill.Scanner; 꼭 명시
  2. 9번째 줄에서 scanner 객체에 메모리를 할당. 이렇게 scanner 객체에 메모리가 할당되고 나면 nextInt() 메소드 혹은 nextDouble() 메소드 등을 사용해서 사용자가 입력하는 숫자를 본인이 원하는 변수에 저장할 수 있음
  3. 12번째 줄에서 scaneer.nextInt() 메소드로 iVal이라는 int형 변수에 값을 대입하고 있음
    즉, nextInt() 를 사용하게 되면 사용자로부터 데이터를 입력받을 수 있음(단, 정수형이어야 함)

 

키보드 데이터 입력받기2

  • 데이터 입력받을 때 Scanner만 사용하진 않음.
  • 이번에는 BufferedReader라는 클래스를 사용하여 데이터를 입력하는 방법 쓸거임
  • “데이터를 사용자로부터 입력받는다.” 라는 기본 전제조건은 Scanner와 동일하지만 작동 방식은 조금 다름
import java.io.*;

class Main {
    public static void main(String[] args) throws Exception {
        
    	String sVal;
    	
		// BufferedReader 초기화
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.print("문자열을 입력해주세요 : ");
        sVal = br.readLine();
        System.out.println("입력 문자열 : " + sVal);
        br.close();
    }
}
  • Scanner와 달리 추가 import를 해줄 필요가 없음. 그대신 main 메소드 뒤에 throws Exception 을 덧붙여야 함
  1. 9번째 줄에서 BufferedReader의 객체인 br을 초기화. InputStreamReader는 데이터 입력 받는 방식을 정해주는 클래스
  2. 12번째 줄에 있는 sVal = br.readLine(); 에서 데이터를 입력 받음. readLine() 은 입력되는 줄 전체를 string 형태로 반환해주는 메소드 → string 형태로 데이터를 입력받기 떄문에 만약 숫자를 받고 싶다면 먼저 string으로 데이터를 입력받은 뒤 원하는 자료형으로 변환하는 작업 필요
  3. BufferedReader의 사용이 끝났다면 14번째 줄처럼 BufferReader 클래스의 close() 메소드를 통해 BufferedReader 객체를 종료시켜야 함

 

데이터를 파일로 출력하기

  • 이제까지 메소드를 이용한 콘솔 출력하는 방법에 대해 알아봄
  • 만약 출력한 데이터를 프로그램이 종료한 후에도 사용하고 싶다면 데이터를 파일 형태로 저장하여 다운로드하면 됨
  • 이번에는 콘솔 출력이 아닌, 파일 형태로 데이터를 출력하는 방법을 학습
import java.io.*;

class Main {
    public static void main(String[] args) throws Exception {
        
    	BufferedWriter bw = new BufferedWriter(new FileWriter(new File("data/test.txt")));
    	
    	String str = "Hello Goorm Java Class!";
    	bw.write(str);
    	
    	bw.close();
    }
}
  1. 6번째 줄에서 파일이 생성됨. 이 한 줄의 코드에서는 3가지 클래스(BufferedWriter, FileWriter, File)가 사용 됨
    • 앞에서 배운 BufferedReader와 비슷한 구조지만 이는 컴퓨터가 데이터를 읽을 때 사용하는 클래스이고, BufferWriter는 컴퓨터가 데이터를 출력할 때 사용하는 클래스
    • 파일에 데이터를 작성 해야 하므로 InputStreamReader 대신 FileWriter를 사용함
    • FileWriter의 파라미터로 사용되고 있는 File 클래스는 사용할 파일의 주소를 매개변수로 입력받아 해당 파일의 정보를 가지고 있는 클래스임
    • 위 세 개의 클래스를 조합하면 파일에 데이터를 쓸 수 있도록 준비된 것임
  2. 9번째 줄에 있는 bw.write(str) 코드가 실제로 데이터를 파일에 Writing하는 소스코드임
    • write 메소드의 파라미터는 String 형태만 가능
  3. 11번째 줄에 있는 bw.close(); 코드는 파일 쓰기가 모두 끝난 후 콜해야하는 BufferedWriter의 메소드 → 콜하지 않을 시 데이터가 정상적으로 저장되지 않음

 

데이터를 파일에서 입력받기

  • 파일에서부터 데이터를 읽어오는 방법
import java.io.*;

class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new FileReader(new File("data/test.txt")));
		
		String str;
		str = br.readLine();		
		
		br.close();
	}		
}
  • BufferedReader를 활용한 키보드 데이터를 입력받는 방법과 유사하지만 입력받는 위치가 키보드에서 파일로 바뀜
    • InputStreamReader → FileReader
    • System.in → File

 

String → 기본 자료형 형변환

  • readLine() 메소드는 String 형태를 반환함integral 계열 및 floating 계열은 모두 위와 같은 방법으로 String에서 각 타입으로 자료형 변환할 수 있음

  • character의 경우 String이 character의 모임이기 때문에 String 클래스의 charAt(int p) 메소드로 p번째에 있는 character 값을 리턴 받을 수 있음.
import java.io.*;

class Main {
    public static void main(String[] args) {
        
    	String szVal = "3.1";
        double dVal = Double.valueOf(szVal);
        
        szVal = "41";
        int iVal = Integer.valueOf(szVal);
    }
}

 

String 비교

  • equals : String 변수들 사이의 데이터가 동일한지 확인하는 메소드
  • 비교하고자 하는 string이 동일한 데이터를 가지고 있을 시 true를 반환, 아니면 false 반환
import java.io.*;

class Main {
    public static void main(String[] args) {
        
    	String szVal = "Goorm";
			if(szVal.equals("Gooorm") == true) {
				System.out.println("SAME!!");
			} else {
				System.out.println("Different!!");
			}
    }
}

 

String 길이

  • length() : String 변수의 전체 길이를 가져오는 메소드
import java.io.*;

class Main {
    public static void main(String[] args) {
        
    	String szVal = "Goorm";
    	int length = szVal.length();
    	System.out.println("Length = " + length);
    	
    	for(int j = 0 ; j < szVal.length() ; j++) {
    		System.out.println(szVal.charAt(j));
    	}
    	
    }
}

 

Split

  • Split : 해당하는 글자(혹은 정규표현식)를 통해 String을 잘라주는 메소드
import java.io.*;

class Main {
    public static void main(String[] args) {
        
    	String szVal = "Goorm/Java/Class";
    	String [] strArr;
    	
    	strArr = szVal.split("/");
    	for(int j = 0 ; j < strArr.length ; j++) {
    		System.out.println(strArr[j]);
    	}
    }
}
// > Goorm
//   Java
//   Class
  • 9번째 줄 szVal.split("/"); : szVal의 내용을 “/”를 기준으로 조각내어 String 배열에 저장

 

 

 

 

'바로 실행해보면서 배우는 java'를 학습하며 정리한 문서