▶︎[JAVA]맛보기 포스팅는 유튜브 '생활코딩'의 JAVA1 수업을 수강하며 기록했다.
프로그램은 입력정보(input)를 처리해서 출력(output)을 만들어내는 기계라고도 할 수 있다.
INPUT: 텍스트정보(Argument), (파일)File, 웹사이트 정보(Network), (음성)Audio, 다른 프로그램의 출력결과(Program) 등을 입력
OUTPUT: 화면(Monitor), 파일(File), 소리(Audio), 다른 프로그램(Program) 등으로 출력
입력값에 따라 출력이 변하는 프로그램을 만들어보자.
다음 프로그램은 지난 시간에 만들었던 '집에 들어가기' 프로그램이다.
String id = "JAVA APT 507";
// 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+" / floorLamp");
floorLamp.on();
만약 이사를 가게되거나, 다른 사람들도 이 프로그램을 이용하려고 한다면 이클립스에 들어와서 id값을 변경한 후 실행해야 한다.
하지만 프로그램 실행 시 입력창을 통해 id값을 설정할 수 있다면, 이클립스가 없어도 각자 입력값을 통해 원하는 결과를 얻을 수 있을 것이다.
먼저 해봐야 할 것은 '검색'!
수단과 방법을 가리지 않고 몸부림치면서 한달 동안 검색할 수 있어야 한다. -이고잉-

검색 키워드 ex) java(사용언어) popup(팝업띄울래) input(입력값을) text(텍스트로 받을거야) swing(GUI 개발 툴킷에서 알려줘)
*스윙(Swing)은 자바에서 GUI(Graphic User Interface)를 구현하기 위해 JDK에서 기본적으로 제공하는 개발 툴킷이다.

누군가 올려준 코드를 참고할 수 있다.
String path = JOptionPane.showInputDialog("Enter a path");
이전 코드에서는 String id = "JAVA APT 507";로 id의 값을 직접 작성했었기 때문에, 이 부분을 검색한 코드로 수정해준다.
String id = JOptionPane.showInputDialog("Enter a ID");
JOptionPane이라는 곳에서 showInputDialog라는 기능을 가져오나보다.
Dialog가 팝업?창?을 의미한다는 걸 대충 눈치챌 수 있다.
코드를 수정하면 빨간 줄이 뜰 것이다. 왜냐면 작성중인 java파일 안에서는 JOptionPane이 갑자기 어디서 튀어나온건지 모르니까.. 임포트를 해줘야 한다.
오류부분에 마우스를 올리고 해당 기능을 import하는 항목을 선택하면 위에 자동으로 임포트문이 추가된다!

그리고 실행해보면!

이런 창이 뜬다! ID를 입력하라고 작성했던 코드대로 팝업창 입력란 위에는 "Enter a ID"라는 문구가 띄워져 있다. "우리집 1동 401호"를 입력했다.

입력값대로 출력결과가 변화한 것을 볼 수 있다. 대단하댜,,
입력값에 따라 무드등 밝기가 조절되는 기능을 추가해보자.
import org.opentutorials.iot.DimmingLights;
(...)
String id = JOptionPane.showInputDialog("Enter a ID");
String bright = JOptionPane.showInputDialog("Enter a Bright Level(1~10)");
(...)
DimmingLights moodLamp = new DimmingLights(id+" moodLamp");
moodLamp.setBright(bright);
moodLamp.on();
무드등을 세팅값의 밝기만큼 켜는 코드를 추가했다.
그런데 여기서 setBright에 오류줄이 생기는데, 이유는 bright 변수는 String형으로 입력되게끔 되어있고, setBright는 double만 처리할 수 있도록 되어있기 때문이다.(오류 설명을 보면 알 수 있음)
따라서, String형을 Double형으로 변환하는 코드를 검색한다.

Double.parseDouble()라는 코드를 찾았다.
setBright안의 bright값을 전환해준다.
moodLamp.setBright(Double.parseDouble(bright));

id입력 후 새로운 창으로 입력란이 제공된다. 여기에 값을 입력하면!

입력한 값만큼 무드등 밝기가 설정되어 켜진 것을 알 수 있다.
어떤 인풋이 있고, 각 인풋들을 어떻게 프로그램 안으로 끌어올 수 있는가를 익히는 것은 프로그램을 익히는 데에 중요한 주제 중 하나이다. -이고잉-
입력값을 이용하는 것의 장점: 이클립스가 없는 일반 사용자도 프로그램에 값을 입력하여 원하는 결과를 얻어낼 수 있다.
입력값의 종류: 텍스트, 체크박스(복수선택), 라디오(단일선택), 버튼, 파일추가 등
input값을 이용한 프로그램은 사용자에게는 좋지만,
계속해서 코드를 수정하고 테스트하는 상황에 있다면..?
실행할때마다 입력값을 입력해야하기 때문에 매우 번거로울 수 있다. 어떻게 해야할까?
이클립스에 실행방법을 미리 정의해 둘 수 있다. 실행 버튼 옆 더보기를 클릭해보자.

(no launch history)에 목록이 있다면, 그것은 최근에 실행했던 class이다.
*실행 설정을 세부적으로 하기 전에 설정하려는 파일을 한 번 실행하면 리스트가 생성되기 때문에 더 편리하다.
Run ConFigurations를 클릭한다.

왼쪽 리스트에서 프로그램 리스트를 볼 수 있는데, 실행했던 Java 프로그램이 Java Application 아래에 표시되며 그중에 실행 방법을 상세설정할 파일을 선택한다.
입력값을 미리 설정하고자 하면 우측페이지 탭 중 Arguments를 클릭하여 Program arguments에 원하는 값을 입력한다.
*이때 각 입력값 별로 ''안에 입력하며 구분은 띄어쓰기로 한다.
**Apply 한다.
한편, 설정한 값(arguments)을 어떻게 받을 수 있을까?
자동은 아닐거 아냐..ㅎ 원래는 팝업으로 입력값을 받아오게끔 프로그램이 짜여있으니까
위에서 인수(Arguments)를 2개 입력해두었다. '우리집 1동 401호' '9.5'
우리 프로그램은 다음과 같은 코드로 시작된다.
public static void main(String[] args) {
이때 args는 변수인데, 프로그램과 프로그램을 사용하는 사람 사이의 값을 매개해준다고 해서 '매개변수(parameter)'라고 한다.
위 단계에서 설정한 arguments값이 args로 들어오는 것이다.
그런데 입력값이 여러개일 수 있으니, String 뒤에 [ ] 를 붙였다.
String[]처럼 대괄호가 붙어있는 문자열은 '문자열로만 이루어져 있는 배열이라고 하는 데이터'이다.
프로그래밍에서 숫자는 0부터 세기 때문에, argument에 입력한 첫번째 값은 args[0], 두번째 값은 args[1]이 된다.
입력값을 받는 코드를 수정해보자.
public static void main(String[] args) {
String id = args[0];
String bright = args[1];
위처럼 수정하면 팝업으로 입력값을 받던 이전과 달리, arguments로 설정한 값을 받아오도록 된 것이다.
이제 프로그램을 실행하면 설정해두었던 인수대로 자동 적용되어 실행되는 것을 볼 수 있다.

✚ 자주 사용/실행하는 파일들은 즐겨찾기를 할 수 있다.

Organize Favorites - Add에서 추가하면 최근실행 목록 상단에 즐겨찾기 목록이 표시된다.
이번 강의의 핵심을 정리하면,
argument(인자)설정을 통해 프로그램 실행 시에 사용될 입력정보를 미리 정의할 수 있고, parameter(매개변수)를 통해 설정해둔 인자를 코드에 적용할 수 있다.
매개변수는 메소드, 또는 생성자를 선언할 때, 괄호 안에 적으며,어떤 입력값이 들어올지 값의 형태를 정의해준다. 실제로 값이 존재하지는 않고, 어떤 형태로 입력값이 들어올것인지를 정의해 주는 것이다.
인자는 메소드, 또는 생성자를 호출할때, 괄호 안에 적으며,미리 선언해 두었던 매개변수에 값을 대입해준다. 매개변수에 대입되는 실제로 메모리에 할당되어 있는 변수이다.
즉, 매개변수와 인자의 차이는 실제로 메모리에 할당되어 있느냐, 없느냐의 차이이다.
느낀 점
프로그램이 실행 그 자체로 의미있는 동작을 할 수도 있지만, 실제로는 입력값을 통해 동작이나 결과를 얻는 것이 더 많이 필요할 것이다. 어떤 형태의 입력값으로든!
이런식으로 일반 사용자가 다양한 프로그램의 덕을 보게 되는구나 하는 가능성을 알 수 있어서 재밌었다.
지금까지 배운 것들을 통해서 지금 내 주변의 어떤 문제들을 해결할 수 있을지 고민하는 시간도 필요할 것 같다.
더 많은 실용성과 가능성을 느끼고, 스스로 검색하고 공부하는 힘도 기르면서 :)