※ 본 포스팅은 생활코딩 이고잉님의 강의를 공부한 후 개인적인 학습목적으로 작성하였습니다. 생활코딩에서 더 자세하고 정확한 정보를 얻으시려는 분들은 아래 참고자료를 확인해주세요. ※
입력과 출력
프로그램이라고 하는 것은 들어오는 입력 정보를 처리해서 출력을 만들어내는 기계라고 할 수 있습니다. 이번에 살펴볼 주제는 굉장히 중요하고 흥미로운 주제입니다. 우리가 만드는 프로그램에 인풋(Input), 즉 입력값을 어떻게 주는지 살펴보겠습니다.

아주 다양한 것들이 입력값이 될 수 있습니다. 가장 일반적인 것은 argument라고 해서 프로그램을 실행할 때 주는 텍스트 정보를 가리킵니다. 이 밖에도 어떤 파일의 내용을 읽어서 프로그램이 동작한다면 파일의 내용이 입력값이 되는 것입니다. 또는 네트워크를 통해 어떤 웹사이트에 있는 정보를 내려받아 그에 따라 프로그램이 동작할 때도 내려받은 정보가 입력이 됩니다. 혹은 우리가 말할 때 프로그램이 그 말을 알아들어서 동작한다면 사운드 오디오도 입력이 될 것입니다. 또는 다른 프로그램이 실행한 출력 결과를 받아서 프로그램이 동작한다면 다른 프로그램이 입력의 소스가 될 수 있습니다. 그것의 결과로 화면에 출력할 수도 있고 파일에 쓸 수도 있고 소리를 낼 수도 있고 다른 프로그램에게 출력할 수도 있게 됩니다. 이번 수업에서는 프로그램이 언제나 똑같이 동작하는 것이 아니라 입력값에 따라 프로그램이 다르게 동작하게 하는 방법을 살펴보겠습니다. 이것만으로도 우리의 프로그램은 혁명적으로 변화하게 될 것입니다.

이전 수업에서 만든 위의 OkJavaGoInHome 앱은 그 자체만으로도 충분히 의미가 있습니다. 하지만 아쉬운 점도 있습니다. 예를 들어, 이사를 간다면 아파트 주소를바꾸기 위해 이클립스를 열고, 자바 파일을 연 다음, main 메서드의 id 값을 직접 수정해서 컴파일하고 실행해야 합니다. 이렇게 하는 것이 나쁘거나 부끄러운 것은 전혀 아니지만 사람의 욕심은 끝이 없고 그 욕심에 따라 우리가 공부하는 것이기 떄문에 더 나은 방향으로 수정해 보겠습니다. 프로그램을 실행할 때 사용자가 어떤 텍스트 정보를 입력해서 id 변수의 값을 설정할 수 있다면 얼마나 좋을까요? 이렇게 하기 위해 가장 먼저 해봐야 할 것은 검색입니다. 먼저 구글에서 검색해 보겠습니다. 현재 사용 중인 기술은 자바이고 프로그램을 실행했을 때 팝업이 나타나면서 팝업 창에 어떤 텍스트 정보를 입력할 수 있으면 좋겠습니다. 그러려면 “java popup input text”라고 검색어를 입력해 봅시다. 또 한 가지 사용할 수 있는 검색어는 Swing이 있습니다. 포함해서 검색해봤더니 글이 하나 있네요.

붙여넣기 한 이후 붙여넣은 코드에 빨간색 밑줄이 생깁니다. 그 이유는 JOptionPane이라는 기능이 우리가 잘 아는 System.out.println 함수와 달리 기본적으로 사용할 수 없기 때문입니다. 이를 해결하는 방법은 다음과 같습니다. 빨간 밑줄에 마우스 커서를 올려놓으면 표시되는 도움말 내용 중 “import ‘JOptionPane’ (javax.swing)”이라고 적힌 것을 클릭합니다. 그럼 코드의 맨 위쪽에 import javax.swing.JOptionPane;이 한 줄 추가됩니다. 이 코드는 javax의 swing에 속한 JOptionPane이라는 클래스를 불러온다는 뜻이고, 그 이후부터 해당 클래스를 사용할 수 있게 됩니다. 붙여넣은 코드의 괄호에 적혀 있던 “enter a path”라는 텍스트를 “Enter a ID”로 바꿔보겠습니다. 그럼 이제 실행해 보겠습니다. 실행하고 조금 기다리면 팝업창이 뜹니다.

팝업창에 id 변수에 설정할 “Pusan APT 1004”라는 텍스트를 입력하고 [OK] 버튼을 클릭해 보겠습니다.

출력 결과를 보면 id 변수의 값이 “Pusan APT 1004”로 설정되어 출력되는 모습을 볼 수 있습니다. 이를 통해 추론할 수 있는 것은 String id = JOptionPane.showInputDialog(”Enter a ID”);에 의해 자바가 Swing이라는 기술에 포함된 JOptionPane의 ShowInputDialog를 실행하면 조그만 입력 대화상자가 나타나고, 거기에 어떤 값을 입력할 때까지 자바가 실행을 멈췄다가 텍스트를 입력하고 [OK] 버튼을 누르면 JOptionPane.showInputDialog(”Enter a ID”);의 값이 텍스트로 대체된다는 것입니다. 이처럼 프로그램에 입력값을 받는 기능을 추가함으로써 우리가 만든 프로그램이 언제나 똑같이 동작하는 것이 아니라 사용자가 입력한 값에 따라 다르게 동작하게 되어 굉자히 똑똑하고 범용적으로 쓸 만한 프로그램으로 바뀌었고, 코드를 어떻게 고쳐야 할지 모르는 일반인도 사용할 수 있는 프로그램이 됐습니다. 그런데 이 프로그램의 입력값을 넣는 방법으로 ShowInputDialog를 활용하는 사례를 살펴봤는데 입력값을 여러 개 넣고 싶다면 어떻게 해야 할까요? 예를 들어, 일반적인 조명이 아닌 디밍(dimming) 이라고 해서 밝기를 조절할 수 있는 조명이라면 어떻게 될까요? DimmingLights는 hallLamlp나 floorLamp처럼 기존에 있었던 Lighting와는 달리 setBright라는 메서드를 가지고 있습니다. 메서드의 의미는 모르지만 setBright 메서드는 괄호 안에 숫자를 적으면 적은 숫자만큼 밝기가 조절되는 메서드라고 한다면 moodLamp.setBright(10); 코드는 10%만큼 밝기가 조정되는 기능이라고 생각해 보겠습니다. 그리고 moodLamp.on( ); 을 실행하면 조명이 켜지도록 코드가 동작한다고 가정해 봅시다.

이렇게 코드를 작성하고 코드를 실행해보면 다음과 같은 결과값을 받을 수 있습니다.

그런데, 이 프로그램을 실행시킬 때 id 값을 입력받았던 것처럼 밝기까지 같이 입력받으면 좋지 않을까요?

그래서 다음과 같이 String bright 변수에 JOptionPane.shoInputDialog(); 를 통해 밝기 값을 입력받을 수 있도록 설정했고 setBright() 메소드에 bright 변수를 그대로 사용했습니다. 그런데, setBright() 메소드에 빨간 밑줄이 칠해진 것을 확인할 수 있는데요. 마우스를 올려놔 보면 “setBright에는 double 타입이 온다”고 되어있습니다. 그런데 showInputDialog로 입력받아 들어온 값은 double 타입이 아니라 String입니다. 즉, 입력 대화상자를 통해 가져온 값은 String인데 setBright에 넣어야 할 값은 double 타입입니다. 그럼 이제 우리가 해야 할 일은 어떻게 해야 String 타입을 double 타입으로 변환할 것인가입니다. 검색을 해봐야겠죠!
To convert a string to a double in Java, you can use the Double.parseDouble() method. Here's an example code snippet:
javaCopy code
String myString = "3.14";
double myDouble = Double.parseDouble(myString);
이렇게 나오네요. parse는 ‘분석하다’라는 뜻으로, double value = Double.parseDouble(text); 코드의 의미는 입력값으로 들어온 문자를 double 타입으로 바꾸는 것이라고 예상할 수 있습니다.

bringt로 들어오는 String을 double형태로 바꿔주는 것으로 문제를 말끔하게 해결할 수 있습니다.

출력도 문제없이 잘 되는 것을 확인할 수 있습니다. 이번 수업에서는 showInputDialog라고 하는 아주 흥미로운 요소를 통해 입력창으로 값을 입력하는 방법을 살펴봤습니다. 프로그래밍을 배울 때 밟아야 할 중요한 과정 중 하나는 어떤 입력이 있고 그 입력을 어떻게 프로그램 안으로 끌고 들어올 수 있는가를 익히는 것입니다. 입력을 어떻게 처리하는가는 프로그래밍을 배우는 데 있어서 굉장히 중요한 주제라고 할 수 있습니다.
입력과 출력 : arguments & parameter
이번 수업에서는 선물을 하나 드릴겁니다. 프로그램을 개발하는 과정에서 파업창에 입력값을 주도록 만들면 프로그램을 실행할 때마다 값을 입력해야 해서 귀찮습니다. 이처럼 귀찮은 과정을 해결할 수 있는 방법은 이클립스를 통해 여러 가지 프로그램을 실행하는 방법들을 미리 정의해 놓는 것입니다. 그래서 이번 수업에서는 값을 입력하고, 입력한 값을 코드에서 전달받는 방법을 알아보겠습니다.

실행 버튼 옆의 펼침 버튼을 클릭해 보면 위와 같은 화면이 보이게 됩니다. 이 목록은 실행 버튼을 클릭할 때마다 실행되는 클래스가 이 목록에 등록됩니다.참고로 실행 설정을 세부적으로 지정하기 전에 실행 버튼을 한 번 클릭해야 이 목록이 만들어집니다. 이어서 하단에 있는 Run Configurations 창을 클릭합니다.

Run Configurations는 실행을 설정하는 것입니다. 보다시피 여러 가지 형태의 자바 애플리케이션 목록이 나오고 그중에서 지금 만들고 있는 것은 자바 에플리케이션이기 때문에 “Java Application” 항목을 클릭해 보면 지금까지 작성한 프로그램의 목록이 나옵니다. 이 중에서 지금 작업 중인 OkJavaGOInHomeInput이라는 애플리케이션을 클릭합니다. Run Configurations 창의 오른쪽 패널을 보면 ‘Main 탭의 Programming이라고 하는 프로젝트의 Main 클래스로 OkJavaGoInHomeInput 클래스를 실행한다’라고 설정돼 있습니다.

이때 프로그램에 입력값을 주고 싶다면 Arguments라고 적힌 탭을 클릭해서 Program arguments란에 입력값을 지정합니다. Program arguments란에는 “Java APT 507”과 같이 입력값을 지정하면 되는데, 다음과 같이 띄어쓰기로 각 값을 구분하게 되면 “JAVA APT 507”이라는 하나의 입력값이 아니라 “Java”, “APT”, “507”과 같이 세 개의 입력값으로 들어가기 때문에 우리가 원하는 것과 다른 결과가 나오게 됩니다. 이 경우 입력값을 작은따옴표로 묶으면 작은따옴표 안의 문자열은 한 덩어리로 입력됩니다. 만약 프로그램에 값을 여러 개 전달하고 싶다면 한 칸 띄우고 다시 따옴표로 묶는 방식으로 추가하면 됩니다. 예를 들면, 입력값이 “Java APT 507”과 “15.0”으로 두 개라면 입력 창에 ‘Java APT 507’ ’15.0’이라고 입력하면 됩니다.

예를 들어 값을 이렇게 입력하게 되면 작은따옴표로 감싼 것을 하나의 값으로 간주하기 때문에 두 개의 값이 들어간 셈이 됩니다.

상단의 Name 항목에는 지금까지 설정한 내용의 이름을 지정할수 있습니다. 예를 들어, 위 설정의 경우 “OkJavaGoInHomeInput - ‘Java APT 507’ ‘15.0’”이라는 이름을 사용할 수 있습니다. 이름은 각 실행 설정을 가리키는 이름일 뿐입니다. 실행 설정을 마치고 나서 Apply 버튼을 클릭하면 지금까지 변경한 실행 설정이 저장됩니다. 그런 다음 Run 버튼을 누르면 프로그램이 실행되면서 앞에서 지정한 입력 값이 프로그램으로 전달됩니다. 그럼 이제 프로그램에서 전달된 입력값을 어떻게 받는지 알아보겠습니다. 자바에서 어떤 프로그램을 실행할 때 입력값을 받는 방법으로는 앞에서 배운 JOptionPane 클래스를 사용하는 방법도 있지만 아주 표준적이고 중요한 방식은 아규먼트(arguments)라는 것을 이용하는 방법입니다. argument는 한국어로 ‘인자’라고 합니다. 참고로 앞에서 Run Configurations에서 설정한 ‘Java APT 507’과 ‘15.0’도 두 개의 인자입니다. 이 두 개의 인자는 main 메서드 옆의 괄호 안에 위치한 args라는 변수를 통해 받습니다. args 변수는 이 프로그램을 사용하는 사람과 이 프로그램 사이에서 값을 매개해준다고 해서 매개변수(parameter)라고 합니다. 즉, Run Configurations에서 Program argumetns란에 설정한 “Java APT 507” ‘15.0’ 값이 main 메서드의 args로 들어오게 됩니다.(띄워쓰기 포함 시키려면 쌍따옴표 이용) 그런데 값이 2개이기 때문에 그냥 문자열로 받을 수가 없어서 문자의 뒤에다 대괄호([, ])를 붙였습니다. 대괄호가 붙은 문자열은 문자열로만 이뤄진 배열(array)이라는 데이터입니다. 아직 배열을 배우지 않았기 때문에 문법이나 원리 같은 것은 생각하실 필요가 없고, 중요한 것은 args 변수에 사용자가 입력한 값이 들어온다는 것과 중괄호({, }) 안에서는 args가 사용자가 입력한 값이라는 것을 이해하는 것입니다. 입력 받은 args 변수에서 첫 번째 값은 0으로 가리킬 수 있기 때문에 id에 args[0]의 값을 넣으면 됩니다(프로그래밍에서는 숫자를 0부터 세는 관습이 있습니다). 그리고 두 번째는 1이므로 bright 변수에 args[1]의 값을 넣으면 됩니다.

이렇게 말이죠. 이제 프로그램을 실행시키면 우리가 인자(argument)로 던져준 값 2개가 args 매개변수(parameter)에 문자열로만 이뤄진 배열(array)에 들어가게 되고 id에는 배열의 첫 번째 값, bright에는 두 번째 값이 배정되게 됩니다.

breakpoint를 걸고 벌레 모양의 디버그 버튼을 클릭해 디버거로 프로그램을 실행해 보겠습니다. 디버거의 내용을 보면 args 변수의 0번째 값이 “Java APT 507”로 되어 있고 1번째 값이 “15.0”으로 되어있습니다.

참고로 프로그래밍하다가 여러 가지 테스트를 해야 할 때는 Run Coofigurations에서 Duplicate 기능으로 동일한 설정을 만든 다음, 필요한 부분만 수정해서 사용하면 됩니다. 이렇게 해서 복제한 실행 설정의 Program arguments 탭으로 가서 입력값을 변경합니다. 예를 들면, 입력값을 “Busan APT 502” ‘45.0’ 으로 설정하고 설정명을 변경한 후 [Aply] 버튼을 눌러 적용하면 항목이 하나 추가됩니다. 그런 다음 새로 만든 항목을 선택하고 실행 버튼을 클릭하면 클릭할 때마다 설정한 인자로 프로그램이 실행됩니다.

자주 사용하는 것들은 이처럼 목록에 추가해 두면 편리합니다.

다음과 같이 실행 목록에는 최근에 실행 했던 실행 설정이 나오는데, 맨 하단의 Organize Favorites를 통해 자주 사용하는 프로그램을 목록에 추가할 수 있습니다. Organize Favorites 창에서 Add 버튼을 클릭해서 자주 사용하는 프로그램을 체크한 후 OK 버튼을 누르면 됩니다. 이번 수업에서는 프로그램이 실행될 때 입력값을 받는 가장 표준적인 방법인 args 파라미터를 통해 입력값을 받는 방법과 파라미터에 값이 여러 개 들어올 때는 args[0]으로 첫 번째 값을, args[1]로 두 번째 값을 받아올 수 있다는 것을 배웠습니다. 그리고 이클립스에만 해당하는 내용이지만 이클립스에서 프로그램을 실행할 때 입력값을 전달하기 위해서는 Run Configurations의 Program arguments 탭에 값을 지정하는 방식으로 입력값을 전달할 수 있다는 것도 배웠습니다.
참고자료 및 원본 : 오픈튜토리얼스 생활코딩 (이고잉 님)
- 생활코딩 JAVA 입문 수업 : https://opentutorials.org/course/3930
'[생활코딩] Server > JAVA1(기초)' 카테고리의 다른 글
| 생활코딩 JAVA 1_자바 문서 보는 법 : {API vs. UI, 패키지, 클래스, 변수, 메서드, 인스턴스, 상속} (0) | 2023.05.01 |
|---|---|
| 생활코딩 JAVA 1_직접 컴파일하고 실행하기 {실행 환경 살펴보기, 컴파일과 실행하기, 라이브러리 이용, 입력과 출력} (0) | 2023.04.29 |
| 생활코딩 JAVA 1_디버거 (1) | 2023.04.28 |
| 생활코딩 JAVA 1_IoT 프로그램 만들기 (0) | 2023.04.28 |
| 생활코딩 JAVA 1_프로그래밍이란 무엇인가? (0) | 2023.04.28 |