안녕하세요, 쏘코입니다.
오늘은 프로그램이 어떻게 입력값을 받고 어떻게 출력하는 지에 대해서 알아보도록 하겠습니다!
목차
0. 입력과 출력
기존에 만들었던 OKJavaGoinHome을 복사해서, OKJavaGoinHomeInput.java라는 파일을 만듭니다.
class의 이름도 똑같이 바꿔줘야겠죠?
만약 다른 집에서 사용하기 위해서는 매번 id값의 코드를 바꿔줘야 합니다.
이런 번거로운 작업 없이, 프로그램을 실행할 때 입력값을 받아서 사용하게 만들 수 있지 않을까요?
새로운 창을 만들어서 id값에 들어갈 입력값을 받아봅시다.
JOptionPane.showInputDialog()를 사용하면 새로운 창에 입력을 할 수 있게 됩니다.
입력된 데이터는 String형태가 됩니다.
이제 입력된 데이터를 id라는 변수에 할당하게 되면 id라는 String 데이터를 받는 변수에 저장이 되겠죠?
하지만 뜬금없이 JOptionPane를 사용할 수는 없습니다.
JOptionPane은 javax.swing에 있는 class이기 때문에, import를 해야 사용할 수 있습니다.
모든 작업을 완료하면 아래와 같이 됩니다.
이제 실행하면, 입력을 받는 신기한 창이 하나 뜹니다.
우리가 작성한 Enter a ID가 뜨면서, 아래에 입력을 할 수 있죠?
이 곳에 TestHouse를 적어봅시다.
그리고 OK를 누르면 TestHouse가 id로 들어간 상태로 프로그램이 돌아가서 콘솔창에 프로그램이 실행됩니다.
이것을 통해서 프로그램은 언제나 똑같이 작동하는 것이 아니라, 우리가 입력한 입력값에 따라 동작을 다르게 할 수 있다는 것을 알게 되었습니다.
그렇다면 여러 입력값을 받고 싶다면 어떻게 할 수 있을까요?
예시를 하나 더 들겠습니다.
불을 켜는데, 불의 밝기도 조정할 수 있도록 만들어주고 싶습니다.
위에서 했던 대로 JOptionPane을 이용해서 사용자로부터 bright이라는 String값을 입력받아서, setBright의 매개변수로 사용하면 됩니다.
하지만 setBright의 매개변수로 바로 bright을 받으면 안됩니다.
setBright는 double형 데이터를 매개변수로 받기 때문에 String형태의 데이터인 bright를 그대로 넣을 수 없습니다.
이럴 때 우리는 Double 클래스의 parseDouble 메소드를 사용할 수 있습니다.
Double.parseDouble(bright)를 통해 String형태의 bright를 Double로 Casting 할 수 있는 것이죠!
이걸 setBright의 매개변수로 넣어주면 프로그램이 정상적으로 작동하게 됩니다!
import javax.swing.JOptionPane;
import org.opentutorials.iot.DimmingLights;
import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Lighting;
import org.opentutorials.iot.Security;
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); // 자바 아파트에 있는 엘리베이터가 new Elevator("JAVA APT 507")이 된다!
// myElevator는 Elevator이라는 데이터만 올 수 있다!
myElevator.callForUp(1); // 1층으로 엘리베이터 보내라!
// Security off
Security mySecurity = new Security(id); // 자바 아파트의 보안을 해제한다
mySecurity.off();
// Light on
Lighting hallLamp = new Lighting(id + " / Hall Lamp"); // 507호의 거실 램프가 켜지도록 설정
hallLamp.on();
Lighting floorLamp = new Lighting(id + "/ floorLamp"); // 507호의 바닥 램프가 켜지도록 설정
floorLamp.on();
DimmingLights moodLamp = new DimmingLights(id+" moodLamp");
moodLamp.setBright(Double.parseDouble(bright)); // 10의 밝기로 켜겠다! - 입력값은 string이므로 double형으로 바꿔줘야 한다!
moodLamp.on();
}
}
1. 입력값 간단하게 받기
값을 입력받아서 프로그램을 실행하는 방법은 개발자에게는 상당히 귀찮은 일이 될 수 있습니다.
그렇다면 특정 값이 입력되도록 할 수 있는 방법은 없을까요?
우리가 항상 실행할 때 누르던 재생버튼 옆에 아래로 뾰족한 삼각형이 있습니다.
이 버튼을 누르고 Run Configurations에 들어갑니다.
그러면 우리가 만든 자바 파일(애플리케이션)들이 나타납니다.
만약 이게 보이지 않는다면, 원하는 파일을 한 번 이상 작동시켜주면 생성됩니다.
현재는 Main 메뉴인데, Arguments 메뉴로 들어갑니다.
이 곳에서 main으로 바로 전달할 요소를 작성할 수 있습니다.
" "가 없으면 스페이스바를 기준으로 배열 형태로 저장되고 (Test APT 111 15.0) - 4개의 요소
" "가 있다면 " " 안의 공백은 구분자가 아닌 문자열의 일부로 처리됩니다. ("Test APT 111" "15.0") - 2개의 요소
다 작성하고 오른쪽 아래의 Apply버튼을 눌러줍니다.
그리고 Run 버튼을 누르면 프로그램이 실행되면서 우리가 작성한 내용이 그대로 main함수로 넘어갑니다!
그렇다면 어떻게 여기 작성한 요소가 main함수로 넘어갈 수 있을까요?
우리가 아무 생각 없이 쓰던 main(String[] args)가 있죠?
여기서 String[] args는 args라는 배열을 의미합니다.
args라는 배열은 우리가 argument 탭에서 작성한 내용들을 담은 배열이 되는 것이죠!
args라는 배열의 0번 데이터를 사용하고 싶다면 args[0]을 원하는 곳에 넣어주면 됩니다.
String id = args[0];
String bright = args[1];
형태로 넣어준다면 매번 입력하지 않아도 편하게 프로그램을 실행할 수 있는 것이죠!
입력값을 받아서 각각 다르게 출력하는 방법을 배워보았습니다.
특히 입력을 받는 방법을 중점적으로 공부했는데요!
프로그램이 입력값에 따라 다르게 작동할 수 있게 됨으로써 우리는 프로그램을 더 다채롭게 만들 수 있게 되었습니다!
오늘도 읽어주셔서 감사합니다 😊😊
최근댓글