※ 본 포스팅은 생활코딩 이고잉님의 강의를 공부한 후 개인적인 학습목적으로 작성하였습니다. 생활코딩에서 더 자세하고 정확한 정보를 얻으시려는 분들은 아래 참고자료를 확인해주세요. ※
이전 수업에서는 1, 2, 3을 화면에 출력하는 프로그램을 만들어 봤습니다. 그리고 상상력을 엄청 강조하긴 했지만 상상만으로 뭔가를 생각해 보는 것은 쉬운 일이 아닙니다. 그래서 어떻게 하면 프로그래밍이 강력한 것이고 정말 많은 일을 할 수 있는 설레는 것인지 알려드리고자 하는 욕심이 너무 컸는데요. 제가 찾은 방법은 뻥을 치는 겁니다. 이게 무슨 말이냐면, 제가 자바로 어떤 프로그램을 만들었는데, 그 프로그램을 이용하면 여러분이 집에서 엘리베이터를 호출할 수 있고, 보안을 해제하고, 에어컨을 켜고, 전등을 킬 수도 있습니다. 실제로는 동작하지는 않지만 동작시키는 코드를 제가 만들어왔습니다. 여러분은 사용자가 되어서 시간의 흐름에 따라 코드를 배치하는 것을 통해서 여러분이 원하는 애플리케이션을 같이 한번 만들어 봅시다. 중요한 것은 뻥이다~. 그 뻥을 통해서 우리는 프로그램이 무엇인가를 공감할 수 있는 일종의 지름길을 얻을 수 있다는 것입니다. 같이 해보시죠.
우리가 프로그램을 만들 때는 혼자서 처음부터 끝까지 다 만들지 않습니다. 다른 사람이 만든 부품을 가져와서 그 부품들을 결합해서 나의 완제품을 만드는 것입니다. 내가 만든 완제품은 또 다른 사람이 만드는 무언가의 부품이 될 수도 있습니다. 이처럼 서로 어깨동무를 하면서 앞으로 나아가는 것이 소프트웨어를 만드는 과정에서는 필수입니다. 여기서 벗어날 수는 없습니다. 그래서 이제 여러분은 제가 만든 부품을 여러분의 프로젝트에 포함시키는 것을 해볼 겁니다. 이것은 굉장히 중요한 공부이기도 합니다. 아래 깃허브 저장소로 들어가보세요.
https://github.com/egoing/java-iot
https://gitlab.com/egoing/java-iot
https://bitbucket.org/egoing/java-iot/src/master/
코드를 다운로드 받아보세요. 파일의 압축을 풀면 org라고 하는 폴더가 있습니다. org라는 폴더 안의 opentutorials 폴더 안에 사물 인터넷을 의미하는 iot라고 하는 폴더가 있습니다. 이 iot 폴더 안에 자바 코드가 들어 있습니다. 이 코드들을 활용해서 사물을 자바로 제어하는 여러분의 프로그램을 만들어 보면 됩니다. 그럼 어떻게 나의 프로젝트에 이 코드들을 포함시킬 수 있는지 설명하겠습니다. 다른 사람이 만든 부품인 java-iot-master 폴더의 소스코드를 내 프로젝트에 추가할 때는 여러 가지 방법이 있지만 가장 간단한 방법은 org로 시작하는 디렉터리 전체를 프로젝트 폴더로 복사하는 것입니다.
그럼 내비게이터 창에 폴더가 표시됩니다. 흥미롭게도 패키지 익스플로러에서는 디럭터리인듯 아닌 듯 보이는 아이콘이 표시됩니다. 이것은 패키지라는 것으로서 이 패키지 안에 확장자가 .java인 파일들을 볼 수 있습니다. 아직 패키지를 배우지는 않았기 때문에 지금은 ‘이런 차이가 생겼구나’ 정도로 눈여겨보는 것으로 충분합니다. Programming 프로젝트에 클래스를 만들겠습니다. 클래스의 이름은 OkJavaGoInHome입니다.
이렇게 Package에 자동으로 패키지가 잡혀있으면 지웁니다. 패키지를 지우면 오른쪽 끝에 (default)가 보입니다. 이전 수업에서 살펴본 org 같은 것을 패키지라고 합니다. org 패키지 않에 있는 프로그램들을 부품으로 사용해서 나의 애플리케이션을 만들어 볼겁니다. 남이 만든 코드를 부품으로 해서 나의 애플리케이션을 만들어가는 것입니다. 나의 애플리케이션을 만들기 위해서는 먼저 생각을 해야 합니다. 내가 지금 하려고 하는 일이 무엇이고, 그 일을 하기 위해서는 어떤 일이 시간 순서에 따라 일어나야 하는지를 먼저 정리해야 합니다. 여기서 하고 싶은 일은 집에 갈 때 반복적으로 하는 귀찮았던 일을 자바한테 시키고 싶은 것입니다.
가장 먼저 엘리베이터를 호출합니다. 제가 집에 도착하기 몇 분 전에 프로그램을 실행하면 엘리베이터가 1층에서 대기할 수 있게 합니다. 엘리베이터에 올라탄 다음, 시큐리티가 자동으로 해제됐으면 좋겠습니다. 그리고 집에 들어갔는데 조명이 꺼져 있으면 기분이 안 좋으니 조명이 자동으로 켜졌으면 좋겠습니다. 위의 동작들을 수행하는 제가 만든 가짜 코드를 한번 이용해 보겠습니다. 제가 만든 가짜 코드는 org 폴더 아래의 opentutorials 폴더 아래의 iot 폴더 아래에 있는 확장자가 .java인 파일로 구성돼 있습니다. 먼저 그 중에서 Elevator.java 파일의 코드를 이용해 엘리베이터를 호출하는 코드를 OKJavaGoInHome 클래스에 작성해 보겠습니다. 그런데 아직 배우지 않은 문법들이 조금 나옵니다. 배우지 않은 문법들이 나온다면 의사가 아닌 상태에서 의학 드라마를 본다는 느낌으로 보면 될 것 같습니다. 의학 드라마에서 수만 가지의 의학용어가 나온다고 해서 그 드라마를 못보나요? 아닙니다. 의학 드라마에서 등장하는 의학 용어들은 장식입니다. 의학 드라마 안에서 다뤄지는 스토리가 중요하잖아요. 지금 배우고 있는 자바도 마찬가지입니다. 이해되지 않는 문법이 나온다는 것을 말씀드렸고, 수업을 진행하고 있는 제가 그 사실을 알고 있습니다. 그러니까 여러분은 모르는 문법이 나온다고 해서 초조해하거나 불안해할 필요가 전혀 없습니다.
org라는 패키지 아래의 opentutorials라는 패키지 아래의 iot라는 패키지의 Elevator를 이용해 엘리베이터를 호출하려고 합니다. Elevator를 호출하기 위해서 org.opentutorials.iot.Elevator;를 했는데 너무 길잖아요. 제일 위에 import org.opentutorials.iot.Elevator;를 해줍니다. 이렇게 하면 Elevator만 쳐도 Elevator 클래스를 성공적으로 불러올 수 있습니다. 즉, import org.opentutorials.iot.Elevator;는 Elevator 클래스를 불러온다는 뜻입니다. 클래스의 정의는 명확히 아직 모르지만요.
위의 코드를 작성했는데요. 우리가 자바 아파트 507호에 살고 있다고 가정하고 new Elevator(”JAVA APT 507”);라고 작성합니다. 엘리베이터가 어디 있는지 알아야 제어할 수 있기 때문에 ELevator 데이터 타입에 주소를 적습니다. 즉, 자바 아파트에 있는 엘리베이터가 new Elevator(”JAVA APT 507”);가 되는 것입니다. Elevator myElevator에서 myElevator는 변수명이고, Elevator는 변수의 데이터 타입입니다. 즉, myElevator라는 변수는 반드시 Elevator라는 데이터 타입에 해당하는 데이터만 담을 수 있습니다. 그래서 당연하게도 new Elevator(”JAVA APT 507”);은 Elevator라는 데이터 타입입니다. 지금은 이정도만 아시면 됩니다.
위의 그림과 같이 myElevator 변수 뒤에 점을 찍으면 이클립스가 우리에게 이것저것 추천해 줍니다. 여기서는 위로 올라가기 위해 엘리베이터를 1층으로 호출할 것입니다. myElevator.callForUp(1);이라는 코드를 작성하면 됩니다. 1층에서 위로 올라가기 위해 엘리베이터를 호출한다는 뜻입니다. 다음으로 시큐리티를 해제해볼까요. 시큐리티 관련 코드는 org.opentutorials.iot.Security.java 파일에 있습니다. Security 코드도 마찬가지로 org.opentutorials.iot.Security라고 쓰면 너무 길기 때문에 import 명령을 사용해 불러오고 Security로 축약해서 사용합니다. 즉, Elevator와 마찬가지로 import org.opentutorials.iot.Security;로 선언하면 됩니다. 그리고 나서 Elevator와 마찬가지로 Security 데이터 타입의 mySecurity 변수를 만듭니다. 이때 누구의 Security인지 알려줘야 하기 때문에 변수를 생성할 때 “JAVA APT 507”이라고 알려줍니다. 즉, Security mySecurity = new Security(”JAVA APT 507”);이라고 작성하면 됩니다. mySecurity 뒤에 점을 쓰면 사용할 수 있는 여러 가지 명령들이 나옵니다. 소괄호로 시작해서 소괄호로 끝나는 형태의 명령을 메서드(method) 또는 함수라고 합니다. 용어에 대해서는 조금씩 익숙해지다가 나중에 배우면 됩니다. 여기서는 mySecuirty.off(); 명령으로 시큐리티를 해제합니다. 다음으로 조명을 켜보겠습니다. 조명을 제어하는 코드는 org.opentutorials.iot.Lighting.java 파일에 있습니다. 그런데, 우리가 이전에 import 를 활용해서 사용하고 싶은 클래스를 불러와서 축약해서 사용했잖아요. 조금 더 편리한 방법이 있습니다. ‘Light’라고 입력하고 Ctrl Space 키를 조합해서 누르면 Light라는 이름의 부품들을 확인할 수 있습니다. 위의 그림과 같이 말이죠. 우리가 쓰려고 하는 것은 org.opentutorials.iot 패키지에 있는 Lighting이라는 클래스입니다. 이클립스에서 추천해준 org.opentutorials.iot 밑에 있는 Lighting 클래스를 더블클릭하면 import org.opentutorials.iot.Lighting;이라는 코드를 자동으로 완성합니다.
Lighting 데이터 타입의 변수명은 거실등이랑 보행등이라는 뜻으로 hallLamp와 floorLamp로 지어볼까요? 그리고 이번에도 역시나 어떤 등을 켤 것인지 지정을 해주어야 하는데요. 이번에는 JAVA APT 807 / Hall Lamp로 지정을 해주겠습니다. floorLamp도 마찬가지로 작성을 해주겠습니다. 이제 프로그램을 한번 실행해 보겠습니다.
실행 버튼을 눌렀더니 위의 그림과 같이 출력되는 것을 확인할 수 있습니다. 다음 실행 결과를 보면서 상상해 봅시다. 자바 507호 아파트에 소속된 엘리베이터가 호출돼서 1층으로 내려가기 시작했고, 보안이 해제되고 현관등(hallLamp)과 복도등(floorLmap)이 켜졌습니다. 이 프로그램은 이클립스에서 실행한 것이지만 이클립스가 아니라 스마트폰이나 스마트워치의 앱, 또는 웹이나 데스크톱 애플리케이션과 같은 플랫폼에서 자바로 동작하는 코드를 작성하게 된다면 우리의 삶이 훨씬 더 윤택해질 것입니다. 그리고 이를 통해 알 수 있는 것은 프로그래밍을 통해 많은 일을 자동화할 수 있다는 것입니다.
마지막으로, 이 코드에서 조금 거슬리는 부분은 “JAVA APT 507”이라는 문자열이 중복된다는 것입니다. 중복되는 문자열을 뽑아서 맨 위에서 String 데이터 타입의 변수로 선언하면 선언된 변수를 그대로 밑에서 사용할 수 있습니다. 보다시피 String id로 id라는 이름의 String 타입의 변수를 선언하고, id 값으로 “JAVA APT 507”이라는 문자열을 할당합니다. 그러고 나서 “JAVA APT 507” 문자열이 사용되는 곳에 id 변수를 사용합니다. 동작은 똑같지만 중복 코드가 제거되고 id 변수에 할당된 값을 변경하면 id를 사용하는 모든 코드가 한방에 바뀌는 폭발적인 효과를 갖게 됩니다.
참고자료 및 원본 : 오픈튜토리얼스 생활코딩 (이고잉 님)
- 생활코딩 JAVA 입문 수업 : https://opentutorials.org/course/3930
'[생활코딩] Server > JAVA1(기초)' 카테고리의 다른 글
생활코딩 JAVA 1_입력과 출력 (arguments & parameter) (0) | 2023.04.28 |
---|---|
생활코딩 JAVA 1_디버거 (1) | 2023.04.28 |
생활코딩 JAVA 1_프로그래밍이란 무엇인가? (0) | 2023.04.28 |
생활코딩 JAVA 1_변수의 {정의, 효용} (0) | 2023.04.28 |
생활코딩 JAVA 1_안드로이드 애플리케이션 만들기 (0) | 2023.04.28 |