Language/Java

[ Java ] 입력과 출력

곽수진 2021. 9. 3. 18:46
반응형

입력과 출력

▶️ 입력(Input)출력(Output)을 줄여 IO라는 용어를 자주 사용

 

 

앱이 시작할 때 데이터를 입력

 

package sujin.io;

public class InputDemo {

	public static void main(String[] args) {
		System.out.println(args.length);
	}
}

▶️ public static void main(String[] args) : args라는 이름을 가진 변수가 문자열을 담을 수 있는 배열임을 의미

→ main 함수의 parameter(매개변수)가 string[] args

▶️ void 때문에 main은 입력값은 있지만 출력 값은 없음

▶️ .length : 배열의 길이를 의미함

 

 

package sujin.io;

class InputForeachDemo {
	public static void main(String[] args) {
		for(String e : args) {
			System.out.println(e);
		}
	}
}

 

결과값 출력 모습

 

 

console 창에서 결과 확인하기

→ 자세한 방법은 조건문 참고

 

 

▶️ Program arguments에 입력한 값 그대로 출력되는 모습을 볼 수 있음

→ main 메소드 안의 parameter(매개 변수)가 for-each 구문에 담겨 있음

= 변수에 담긴 값을 하나 하나 개별로 꺼내서 담으라는 내용

▶️ args라는 변수에 one, two, three 각각을 담았고 이를 e라는 변수에 옮기라는 for-each구문을 통해 args 안에 있는 인자값을 e에다가 옮김

→ 최종 System.out.println(e); 입력시 화면에 one, two, three 모두 다 출력됨

❌ for-each 구문을 사용하기 위해서는 : (콜론) 사용 주의

 

 

앱이 실행중에 데이터를 입력

 

package sujin.io;

import java.util.Scanner;

public class ScannerDemo {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int i = sc.nextInt();
		System.out.println(i*1000);
		sc.close();
	}
}

▶️ import java.util.Scanner : java.util 패키지에 들어있는 Scanner라는 logic을 사용하기 위해서 새로 load 해야함

 

결과값 출력 모습

 

 

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int i = sc.nextInt();
		System.out.println(i*1000);
		sc.close();
	}

▶️ System.in : 사용자가 입력한 값

→ 사용자가 입력한 값을 scan하는 객체 새로 생성

▶️ 사용자가 console 창에 값을 입력하면 그 값을 scan하여 i 변수에 집어 넣음

▶️ System.out.println(i*1000) : 사용자가 입력한 값에 1000을 곱한 결과값을 출력함

❌ 단점 → 사용자가 값을 입력할 때마다 프로그램을 종료 시키고 다시 켜야 함

 

 

프로그램 종료 없이 계속해서 작동하는 프로그램 코드를 작성하려면?

반복문 활용

 

package sujin.io;

import java.util.Scanner;

public class Scanner2Demo {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNextInt()) {
			System.out.println(sc.nextInt()*1000);
		}
		sc.close();
	}
}

 

결과값 출력 모습

 

 

while(sc.hasNextInt()) {
			System.out.println(sc.nextInt()*1000);
		}

▶️ hasNextInt 메소드 때문에 사용자가 입력한 값이 정수값인 경우 true이기 때문에 while 반복문이 작동되지만 false인 경우에는 while 반복문이 종료되고 sc.close()로 마무리됨

 

 

▶️ 사용자가 입력한 값이 정수가 아니기 때문에 while 반복문이 종료되고 프로그램이 종료된 모습

 

 

여러 형태의 입출력

→ run configuration을 통한 입력과 console에 직접 입력하기 외에도 파일(ex. 텍스트 파일)을 통해 입출력 하기

 

 

▶️ src와 bin 폴더가 속한 파일에 out.txt 파일을 만든 후 아무런 정수값 하나를 입력

 

 

package sujin.io;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Scanner3Demo {

	public static void main(String[] args) {
		try {
			File file = new File("out.txt");
			Scanner sc = new Scanner(file);
			while(sc.hasNextInt()) {
				System.out.println(sc.nextInt()*1000);
			}
			sc.close();
		} catch(FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}

❌ 결과 출력으로는 out.txt 파일에 적어둔 1234에 1000을 곱한 1234000가 출력되어야 하지만 오류가 발생한 모습

▶️ 해결하기 위해서 java.io.File;과 java.io.FileNotFoundException; 라이브러리를 import 했지만 동일한 오류 발생

 

결과값 출력 모습

▶️ out 텍스트 파일을 src 폴더로 이동하니 해결되었음

▶️ 텍스트 파일 명은 위처럼 수정하지 않고 out.txt 그대로 두었음

→ out으로 이름 변경하면 오류 발생

▶️ 텍스트 파일을 불러오는 과정에서 절대경로를 이용해 File file = new File("out.txt") 대신 new File(“C:\\폴더 이름\\out.txt").getAbsolutePath()로 변경할 수 있음

 

 

public static void main(String[] args) {
		try {
			File file = new File("out.txt");
			Scanner sc = new Scanner(file);

▶️ file이라는 변수는 new File이라는 객체 생성

▶️ 파일 지정 → out.text라는 이름을 가진 파일을 import 할 수 있도록 scanner에 지시함

▶️ 직접 사용자가 입력할 때는 Scanner sc = new Scanner(System.in)이라고 작성했지만 System.in 영역에 file을 작성함으로써 스캐너가 file이라는 변수를 찾을 수 있도록 함

 

 

catch(FileNotFoundException e) {
			e.printStackTrace();
		}

▶️ catch예외를 의미함

→ 만약 out.txt 파일을 찾을 수 없는 경우 FileNotFoundException이라는 결과를 출력하도록 함

 

 

필요한 라이브러리 전부 import 하기

ctrl+shift+O

 

 

→ 총 몇개의 새로운 라이브러리를 import 했는지 알려줌

 

 

GUI(Graphical User Interface)

사용자가 컴퓨터와 정보를 교환할 때, 그래픽을 통해 작업할 수 있는 환경

→ 이미지처럼 그림체를 통해 입력 가능하게 함

▶️ 텍스트 언어로 작성하는 것은 CLI

 

Java Tutorials Code Sample - DialogDemo.java : 코드를 다운받아 실행하면 다음과 같은 결과가 나옴

 

→ 이를 실행하기 위해서는 Java Web S tart 다운 필요

반응형

'Language > Java' 카테고리의 다른 글

[ Java ] 클래스와 인스턴스 그리고 객체지향  (0) 2021.09.03
[ Java ] 메소드  (0) 2021.09.03
[ Java ] 배열  (0) 2021.09.03
[ Java ] 반복문  (0) 2021.09.03
[ Java ] 논리 연산자  (0) 2021.09.03