Java - 입력과 출력

Yuri Lee·2020년 9월 28일
1

Java

목록 보기
7/23

String[] args

package com.yuri.javatutorials.io;

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

main 메소드는 자바에서 특별한 의미를 가진 메소드다. main 메소드의 내용을 구현하면 자바 에플리케이션을 실행할 때 main 메소드가 호출되면서 프로그램이 구동하게 되는 것이다. 이 때 Strings[] args는 입력 값의 파라미터로 동작한다.

String[] args은 매개변수다. 매개변수는 메소드가 호출될 때 전달된 입력 값을 메소드 내부로 전달하는 역할을 하는 변수다. 이 변수의 데이터형은 String[]인데, String[]은 문자열을 담고 있는 배열이다. args.length는 배열의 길이를 의미한다.


properties에 들어가면 location을 확인할 수 있다.

InputDemo 클래스에 input 값으로 복수의 값을 준 것이다. 이것을 통해서 추론 할 수 있는 것은 자바 에플리케이션 실행 명령인 java InputDemo 뒤에 따라오는 값의 숫자 만큼 변수 args에 어떤 값이 들어있다는 점이다.

package com.yuri.javatutorials.io;

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

for-each 구문을 이용해서 변수 args에 담긴 값을 한줄씩 출력하고 있다. 즉 자바 에플리케이션에서는 메소드 main의 인자 String[] args를 통해서 사용자가 입력한 값을 전달하고 있다는 것을 알 수 있다.

아규먼트는 메소드의 입력값으로 전달하는 구체적인 값!

앱이 실행중에 입력 받기

Scanner 라는 모듈을 사용해보자!

package com.yuri.javatutorials.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();
    }
 
}

Scanner를 사용하기 위해서는 애플리케이션에 로드 해야 한다. import 해서 .. java.util 패키지에 들어있는 Scanner라고 하는 것을 읽어온다는 것이다. new를 해서 이 객체를 사용한다는 뜻!

sc.nextInt()가 실행되면 자바는 사용자의 입력이 있을 때까지 변수 i에 값을 할당하지 않고 대기상태에 있게 된다. 키보드로 데이터를 입력하고 엔터를 누르면 비로서 i에 값이 담기고 i*1000을 통해서 입력값에 1000이 곱해지고 그 결과가 화면에 출력된다.

3을 입력했을 때 3000이라는 결과가 나왔음을 확인할 수 있다.

사용자가 입력할 값을 받는 수단이라고 쉽게 이해해보자! 🤸‍♂🤸‍♂🤸‍♂

이번에는 연속적으로 값을 입력 할 수 있고, 입력한 값에 1000을 곱한 결과를 출력하는 예제를 보자.

package com.yuri.javatutorials.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();
	}
}

sc는 Scanner를 담고 있는 변수, .hasNextInt()는 스캐너 객체가 갖고 있는 메소드를 호출하는 것이다.
sc.hasNextInt()는 입력값이 생기기 전까지 실행을 유보시키는 역할을 한다. 만약 입력한 값이 int 형이 아닐 경우는 false를 리턴하고, int로 표현할 수 있는 형식의 숫자형인 경우는 true를 리턴한다.
int 형이 아닌 값을 입력하면 프로그램이 종료된다. 따라서 위의 코드는 사용자가 입력을 할 때가지 실행을 기다렸다가 입력이 일어나면 반복문이 동작하면서 입력값의 1000배를 곱한 수가 출력된다.

여러형태의 입출력

사용자의 키보드 제어만이 입력은 아니다. 파일을 통해서 입력값을 설정할 수도 있다.

GUI

물론 입력이나 출력이 꼭 텍스트여야 하는 것은 아니다. 아래 URL에 담겨있는 코드는 자바를 이용해서 그래픽컬한 사용자 조작 수단을 만드는 방법을 보여준다.

이클립스에서 입력 값 사용하기

파일을 선택하고 Run Configuration을 선택한다. Arguments 탭에서 Program Arguments에 입력 값을 작성하면 콘솔에서 입력 값을 전달하는 것처럼 할 수 있다.

시즌1을 마치며

이렇게 해서 Java 수업 시즌 1이 끝났다. 시즌 2의 핵심은 객체지향(Object Oriented Programming)이다. 자바가 PHP나 JavaScript, Python과 같은 언어보다 어려운 이유는 객체지향 때문이라고 해도 과언이 아니다. 이들 언어도 자바와 유사한 객체지향 기능을 가지고 있다. 하지만 객체지향을 모르고도 프로그래밍이 충분히 가능하다. 반면에, 자바는 객체지향을 사실상 강제한다. 객체지향을 안 쓰고도 훌륭한 Python 프로그램을 만들 수 있지만, 객체지향을 모르고 좋은 Java 프로그램을 만들수는 없다. 바로 이런 이유 때문에 Java 입문에는 더 많은 시간과 인내와 노력이 필요한 것이다.

하지만 객체지향은 프로그래밍 역사상 가장 중요한 패러다임 중의 하나다. 그리고 이러한 패러다임은 한순간 툭 튀어나온 것이 아니다. 오랜 시간, 많은 사람에 의해서, 수많은 시행착오를 경유해서 도달한 웅장한 성취라고 할 수 있다. 이러한 성취에 다가선다는 것은 설레는 일이 아닐 수 없다. 이러한 성취를 시행착오 없이, 빠른 속도로 인계받을 수 있다는 것은 기쁜 일이 아닐까? 다만, 그 성취가 너무 거대해져서 그것 흡수하는 것만으로도 벅찬 것은 후대가 짊어져야 할 고충이기도 할 것이다. 그래서 우리에게 필요한 것은 시간이다. 사람에게는 어떤 일을 시작하기 전에 그 일을 완수하기 위한 시간을 배정하는 습관이 있는 것 같다. 그 시간을 너무 짧게 잡으면 그 시간을 다 사용했을 때 그 일을 포기하게 될 확률이 높다. 자바의 배열을 너무 작게 만들면 나중에 ArrayIndexOutOfBoundsException이 발생하는 것처럼 말이다. 필자가 부탁하고 싶은 것은 지금 생각하고 있는 것 보다 더 많은 시간을 이 일에 할당해 달라는 것이다. 당분간은 머릿속에서 수많은 개념들이 난리를 칠 것이다. 그리고 그 소동은 곧 잠잠해 질 것이다. 이것은 둘 중의 하나다. 잊어버렸거나, 완전히 내것이 되었거나. 💪💪💪


이 글은 생활코딩의 자바 강좌를 바탕으로 정리한 내용입니다.

profile
Step by step goes a long way ✨

0개의 댓글