[Java] 프로그램의 입력과 출력
목차
1. 프로그램에 입력
2. 프로그램 실행 - 아규먼트 입력
3. 아규먼트 vs 파라미터
프로그램이 항상 똑같은 작업만 하는 것이 아닌 실행할 때마다 다른 값을 이용해야 한다면 어떻게 해야 할까?
프로그램을 사용자의 입력을 받아 처리하는 형태로 만들어야 할 것이다.
프로그램은 입력을 받아서 출력을 할 수 있다.
입력 정보는 아규먼트, 파일, 네트워크를 통해 받은 정보, 소리, 다른 프로그램에서 출력된 정보 등이 될 수 있다.
입력값이 처리된 결과를 화면에 출력할 수 있고, 파일에 쓸 수 있고, 소리, 또 다른 프로그램에게 출력할 수도 있다.
프로그램에 입력하기
이전 게시글의 OkJavaGoInHome을 입력을 받을 수 있게 수정해 보자.
import javax.swing.JOptionPane;
import org.opentutorials.iot.DimmingLights;
import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Security;
import org.opentutorials.iot.Lighting;
public class OkJavaGoInHomeInput {
public static void main(String[] args) {
String id=JOptionPane.showInputDialog("Enter a ID");
String bright=JOptionPane.showInputDialog("Enter a bright level");
//Elevator call
Elevator myElevator=new Elevator(id);
myElevator.callForUp(1);
//Security off
Security mySecurity=new Security(id);
mySecurity.off();
//Light on
Lighting hallLamp=new Lighting(id+"/Hall Lamp");
hallLamp.on();
Lighting floorLamp=new Lighting(id+"/Floor Lamp");
floorLamp.on();
DimmingLights moodLamp=new DimmingLights(id+" moodLamp");
moodLamp.setBright(Double.parseDouble(bright));
moodLamp.on();
}
}
ID 입력받기
1) 변수 선언
· 변수 id를 이용해 사용자로부터 입력을 받아 프로그램을 실행할 때마다 다른 값 저장
2) 다이얼로그 창으로 입력받기
· import 구문으로 JOptionPane 객체를 이용
import javax.swing.JOptionPane;
· JOptionPane 객체의 showInputDialog 메소드 이용
· 입력 다이얼로그 창을 통해 id 값을 입력
· 입력한 정보는 변수 id에 저장
String id=JOptionPane.showInputDialog("Enter a ID");
밝기 입력받기
DimmingLight 객체는 setBright 메소드에 double 데이터를 입력받아서 밝기를 설정한다.
다음은 DimmingLight 객체인 moodLamp를 생성해 밝기를 10으로 설정한 것이다.
DimmingLights moodLamp=new DimmingLights(id+" moodLamp");
moodLamp.setBright(10);
moodLamp.on();
집에 들어올 때마다 밝기를 다르게 하고 싶을 경우, 밝기 값도 입력받아 설정할 수 있다.
1) 변수 선언
· 변수 bright를 이용해 사용자로부터 입력을 받아 프로그램을 실행할 때마다 다른 값 저장
2) 다이얼로그 창으로 입력받기
· JOptionPane 객체의 showInputDialog 메소드 이용
· 입력 다이얼로그 창을 통해 밝기 값을 입력
· 입력한 정보는 변수 bright에 저장
String bright=JOptionPane.showInputDialog("Enter a bright level");
3) 타입 변환
· setBright 메소드의 밝기는 double 데이터로 입력
· 문자열인 bright를 double 타입으로 변환 필요
moodLamp.setBright(Double.parseDouble(bright));
실행결과
아규먼트를 입력받아 프로그램 실행하기
위에서 한 방법 말고도 main 메소드의 args 파라미터를 통해 입력값을 받는 방법도 있다.
1) 아규먼트 입력하기
· Run 버튼의 팝업 창에서 Run Configurations 클릭
· Arguments 탭에서 Program arguments에 데이터 입력
· 공백을 기준으로 구분
· 공백을 포함한 인자값을 넣고 싶을 때 큰따옴표 사용(한 개의 문자열로 취급)
2) 코드 수정
String id=args[0];
String bright=args[1];
· 아규먼트를 입력하면 main 메소드의 args 파라미터는 아규먼트 값을 받아서 동작
· args는 문자열 배열 -> 여러 개의 String 데이터 저장 가능
· 인덱스로 배열의 데이터를 사용, 인덱스는 0부터 시작
아규먼트와 파라미터
아규먼트(argument): 전달인자, 인자
· 메소드를 호출할 때 전달되는 실제값
파라미터(parameter): 매개변수
· 메소드가 호출될 때 전달된 값을 메소드 내부로 전달하는 역할을 하는 변수
· 메소드의 정의 부분에 나열되어 있는 변수
=> 메소드가 호출될 때마다 해당 호출에서 사용된 인자들을 각각에 해당하는 매개변수에 대입시킨다.
=> 메소드 정의의 한 부분으로 바뀌지 않는 매개변수와 달리 인자는 호출할 때마다 값이 바뀔 수 있다.
ex) Elevator 객체의 callForUp 메소드 호출
· 전달인자 = 1
· 매개변수 = stopFloor
-> callForUp 메소드를 호출하면서 숫자 1을 인자로 전달한다.
-> 1이 stopFloor에 대입되고 callForUp 메소드는 이를 이용해 결과를 출력한다.
ex) main 메소드
· 전달인자 = "JAVA APT 507", 15.0
· 매개변수 = args
-> main 메소드가 시작되기 전, 인자들은 각각 문자열로 만들어지고 문자열 배열에 저장된다.
-> 문자열 배열에 대한 레퍼런스가 매개변수 args에 전달된다.