2018년 7월 29일 일요일

[기초]실행 파라미터?

오픈채팅방에서 누군가 구슬피 울며 과제를 도와달라고 했는데, 마침 정리하고싶던 실행 파라미터에 대한 주제라 성심성의껏 도와주었는데..


(쓰나미처럼 몰려오는 허무함..)

그래서 혼자 다시 정리하고 마무리 지어보자고 간단하게 글을 써봅니다.

우선 익숙한 예제부터 보면서 시작해 볼까 합니다.

어려분들 중에서는 이런걸 경험해 보신분들이 있으실 겁니다.

...
(게임의) 실행파일의 바로가기를 만들어서,
속성의 대상에 -skipintro 를 치고 실행 해 주세요!
..

요즘은 스팀으로 손쉽게 쓰기 때문에, 모르는분도 있겠네요..
제가 어릴때는 저렇게 어떤 명령어를 추가해서 게임을 좀더 편하거나 쉽게 하는 꼼수가 있었는데요. 이것이 실행 파라미터로 보면 매우 간단한 예제가 되지 않을까 싶군요!

실행 파라미터는, 해당 프로그램이 실행, 그러니 메인이 작동할때, 파라미터에 추가적인 인자값을 전달하는 것 입니다.

사용자 정의 함수/ 혹은 메소드를 만들때, 인자값을 통해서, 해당 함수/메소드에 값을 주고받는것을 해보신적 있으실 거에요.
(매우 간단한 메소드입니다! 인자값으로 int를 받아오죠!)

문득 이런생각을 해보신적이 있으신가요?

"메인함수는그런게 없나" 혹은.."(자바에서) String[] args 이놈은 도대체 뭘까?"

바로 이놈들이 실행 패러미터입니다!

C에서는..

(이런걸 본적 있으신가요?)

이렇게 기본적으로 정의되어 있습니다!
하지만 공부하면서 저렇게 치진 않죠.. 없어도 되게 짜여져 있나봐요!

자바에서는...
(이놈은 자바 해보신분이라면 익숙히 보셨을 거에요)

요렇게 되어있습니다!
이것들이 실행 파라메터값들을 받아먹는 곳 입니다.

그럼 이제 어떻게 실행 파라메터에 값을 집어넣을까요?

C로 IDE를 통하지 않고 직접 짜 보겠습니다!



(코드!)

요렇게 작성해서 컴파일/링킹을 끝내고, hello_world.exe 를 만들었습니다.


(exe파일이 있는곳으로 cmd창을 열어서, 해당 exe를 실행 합니다.)

명령 프롬포트 창에서, hello_world.exe 가 존재하는 디랙토리로 이동을 합니다!
저의 경우는 D:\juicy\Documents 폴더 하위에 존재합니다!
cd D:\juicy\Document 를 치면 간단하게 이동 할 수 있습니다.
이제 hello_world.exe 를 입력하시면 작성했던 코드가 작동하게 되죠!
우리는 여기까지의 번거로운 과정을 IDE들로(비쥬얼스튜디오/이클립드 등..)쉽게 하는것 입니다!

그럼 이제 실행 파라메터를 추가 해 봅시다!

 (실행 파라메터로 hello world 라는 문자열을 썻습니다)

단순하게 hello_world.exe 뒤에 원하는 인자값들을 써주면 됩니다!
hello_world.exe hello world! 를 입력해 실행해 보면, 위와 같은 결과를 얻어보실 수 있습니다.

C의 경우 argv[0]은 항상 실행 프로그램의 이름이 뜹니다. 자바의 경우에는 없워요!

여기까지 따라 쳐 보셨다면, 이제 감이 조금씩 올거에요! 그렇쥬?

언어마다 다르지만 c와 자바를 보자면,

c에서는 argc 와 argv 두개를 받으며,
argc == argument count (int)즉 실행시 받아들인 인자의 갯수
argv ==argumnet value (char[] 의 *)즉 실행시 받아들인 인자들의 값 입니다

자바에서는 args 하나를 받으며,
args == arguments 즉, 인자들 입니다.
c와는 다르게, *argv[] 하나만 있으면 argc는 필요없기 때문에, 하나로 통일되었습니다.

자, 이제 끝입니다. 네? 뭐 어쩌라고요? 그건 저도몰라요. 프로그램을 실행하면서 값을 가져오는것 뿐이에요, 써먹는건 여러분의 몫이죠!

그래도 이렇게 끝내기엔 찝찝합니다..
그러므로 위의 질문자가 올렸던 문제를 보고 써먹을곳을 찾아보죠.



(질문자가 냈건 문제 전문입니다)

조건을 정리해 보니 :
    1. 자바로 구동합니다.
    2. 실행 파라메터로 값을 받으며,
    3. 받은 값은 5와 10 까지의 int만을 받아야 합니다.
    4. 받은 값 j 는 1부터 j까지 짝수들을 더한 값을 출력합니다.


2번을 보면 위의 작동방법을 배웠습니다. easy!
3번을 보니..받은 값은 int여야만 하며, 심지어 범위도 제한되어있습니다!
흠..조금 까다로워 보이네요!
4번? 껌이죠. 이건 넘어가죠.


자 자바로 실행 파라미터를 받고, 그 받은 값이 int인가/5-10사이값인가 를 확인하는것 부터 짜 봅시다!




(자바코드 입니다!)

위와 같이 코드를 작성합시다! 이 코드는 자바로 실행 파라미터를 받는 코드입니다!


(Eclipse IDE에서 실행 파라미터 설정해서 디버깅 방법!)

이클립스의 경우에는, Run -> Run Configurations -> Arguments -> Program arguments 에 작성해 주시면 됩니다!

저는 안녕깐깐징어야! 아하하하핳 -5 1 2 3 4 5 6 7 8 9 10 11
총 15개의 인자를 넘겨봅니다



(15개의 인자값들을 잘 받아오는군요!) 

다음, 어떻게 해야 조건에 부합하는지 .ARABOZA

숫자인가?
특정범위 이내인가?

 

int num = Integer.parseInt(args[i]); 

를 해서 파싱이 되면 숫자, 뻗으면 숫자가 아니겠군요..

try catch로 묶어 봅니다.


 (working well!)

좋네요! 이제간단하게 if문으로 특정 숫자를 제한하면 되네요!
이제 인자값을 하나만 받고, 받은 값이 숫자인가, 5-10 사이인가 를 정리해 보면


(ez ez!)

자알 작동되는군요!

문제의 나머지는 이번 포스트의 핵심내용도 아니고, 누군가 이 문제를 검색하면 배낄수 있게 하는건 원치않으니, 실행 파라미터에 관한 부분인 여기까지 설명을 하고 끝냅니다.
 
애초에 남은 부분이 여기까지 읽으면서 안막힌 사람이라면 못풀게 아니니깐..

댓글 없음:

댓글 쓰기