본문 바로가기

Programming/Java

[자바 강좌] 6화 행운확률 게임 자바공부

[자바 강좌] 6화 행운확률 게임 자바공부




 은 사람들이 왜 번개맞을 확률보다도 희박하다는 로또를 사는 걸까요? 객관적으로 볼떄 승산이 없는 게임인데 말이죠^^ 그러한 이유는 여러가지가 있을수 있겠습니다. 먼저 자신의 인생을 '한방'에 바꿔버리고

싶다는 유형 이 있겠죠. 이런 분들이 위험한 것이 로또에 당첨되도 '돈을 관리하는 능력'이 부족하기 떄문에

다시 원래 상태로 돌아가서 뉴스에 나오는 경우를 저는 꾀 많이 보았습니다. 로또 때문에 가족과 싸우게 되고

오히려 '행운' => '독'으로 바뀐 경우이죠. 


두번째로, 일주일의 '낙(樂)'으로 생각하는 유형 입니다. 한주간 로또에 희망을 품으면서 로또 당첨때

까지 기다리는 것이죠. 그런데 제가 생각 했을 때 이러한 두 유형의 분들이 '돈'을 잘 벌지 못합니다.^^

확률적으로 상당히 지는 게임에 거는 것이 '도박'과도 같고 진짜 돈을 버는 사람들은 이러한 '플랫폼'을

만드는 유형의 사람입니다. 사람의 본성이 원래부터 '도박','게임' 등을 좋아하기 때문이지요.


그 옛날 골드러시때 사람들이 금을 캐로 몰려들때 진짜 금을 캔 사람은 거의없고 오히려 그 금을 캐로 가는 사람들에게 청바지를 팔아서 부자가 된 사람들이 더 확률적으로 이기는 게임 이었습니다.


즉, 개발자 입장에서 응용방법은, 이러한 '플랫폼'을 구축 하는 방법이 있겠죠.

일종의 판을 짜는 건데요. 


몇일전에 제가 인터넷 서핑 하면서 발견한 성공사례를 말씀 드리겠습니다. 이것이 여러분들에게

동기부여가 될것 같습니다.





웬만한 사람의 연봉을 월급으로 버는 방법, 이분도 '롱테일전략' 을 구사 했습니다.

파레토법칙 이라고 아시나요? 매출의 80%는 20%의 히트상품으로부터 나온다는 말입니다

오랫동안 마케팅업계에서 이 전략을 구사해 왔지만, '롱테일전략'을 정확이 이 반대의 개념입니다.


백번 말하는 것보다 '한번 보는것' 이 더 나은것 같아서 아래 짧은 2분 정도의 영상을 

보시길 추천 해 드립니다^^





잘보셨나요?^^ 

위의 저런 수익사례가 바로 인기있는 앱을 만들어서 돈을 버는 기존의 고정관념을 깨는

'양'으로 승부하는 방법 입니다. 이분도 앱을 1년에 수십개씩 만든다고 합니다. 

그렇다고 뛰어난 프로그래머나 천재만 할 수 있는게 아닙니다.


자, 이제 우리가 할일은 프로그래밍을 배워서 다양하게 응용할 수 있다는 것입니다.

앞으로도 차차 강좌를 통해서 이러한 짧은 저의 지식을 사례와 함께 설명드릴 예정 입니다.

나중에 안드로이드 강좌까지 가서 앱까지 만들어 보면 더욱 좋겠지요? 



일단 몇가지 알고 계셔야 할 클래스들을 간단한 실습을 통해서 흡수 해 보도록 하겠습니다.



Calendar 클래스





먼저, 메모장을 여시고 위와 같이 코딩해 줍니다. 여기서 주의 하실점은 '대문자' 구별을 잘하셔야 합니다.


Calendar now= Calendar.getInstance();


▲ 메모장에서 제가 빨간색으로 밑줄친 부분인데요 이 부분을 보시면 캘린더 클래스라는 것이 getInstance()

메소드를 이용해서 생성 합니다. 시스템에서 '시간에 대한 정보'를 얻어 옵니다.


메모장의 확장자는 .java로 해서 우리가 실습하고 있는 java 있는 경로에 저장 시켜줍니다.

cmd창을 열고 해당 경로로 이동 합니다.


그리고 컴파일후 실행해 보겠습니다.




javac Calendarsample.java      // 자바 컴파일 명령어

java Calendarsample     // 자바 실행 명령어


위의 그림과 같이 정상적으로 시간이 출력 되는 것을 확인 할 수 있습니다^^

이 글이 길기 떄문에 계속 쓰다가 저장하고 이어붙이기 식으로 작성하는 중이라 현재시각은 새벽 2시 1분 입니다 ㅠㅠ 일하고 짬날떄 마다 쓰기 떄문에 어쩔수 없죠. 그래도 구독자 분들이 계셔서 keep going ~!






Date 클래스



▲ 메모장을 여시고 위와 같이 코딩을 해줍니다.

여기서 주의할점은 역시 대문자 이시고 제가 밑줄친 부분도 유념해 주시길 바랍니다.



import java.util.Date; 


import 단어의 뜻은 ① 수입하다 ② 들여오다 ③ 중요하다 라는 정도인데요. 

불러온다는 의미 입니다. 


이 명령어는 코딩하실떄 가장 앞에 나와야 합니다.  html 코딩할떄 <head> 태그는 가장 위에 가듯이 말이죠.

파이썬 코딩 하실떄도 import 로 해당 패키지를 호출 하죠. 여러가지 언어에서 거의 똑같은 의미로 쓰입니다.

자바도 마찬가지 입니다. 필요한 패키지를 먼저 import 명령으로 불러오고 시작해야 합니다.


Date today = new Date();


클래스를 쓰는 형태는 자연스럽게 체득이 되실텐데요 기본형은 다음과 같습니다.


Apple                banana    =     new Apple();

(클래스이름)        (변수이름)            (클래스이름)


Date 클래스도 이러한 기본형에 따라서 생성하시면 현재날짜와 현재시간을 시스템에서 알아내서

자신이 만든 변수에 저장해서 바로 사용하실 수 있는 것입니다.

그런데 이러한 Date 클래스를 사용하기 위해서는 이 클래스가 java.util 패키지 과자봉지 안에 들어 있기 떄문에

이 과자를 먹기 위해서는 import로 불러와서 손을 넣고 과자를 꺼내서 먹어야 겠죠?

그래서 import 선언을 미리 해줘야 한답니다.


자, 코드 설명이 끝났으니 컴파일후에 결과를 확인해 보죠^^





정상적으로 컴파일이 되었으며 현재 날짜와 시간을 출력 해 줍니다^^

그런데 사용자 입장에서는 저러한 형태로 출력해주면 좋아하지 않습니다.

좀 더 가독성 있게 출력해 주는 걸 좋아하거든요. 그럴떄 필요한 클래스가 아래와 같습니다.


SimpleDateForm 클래스




위와 같이 코딩 해보세요.

여기서 제가 빨간친 부분에 대해서 설명 드리겠습니다.


y => 연도(year)

M => 월(month)

d => 일(day)

h => 시(hour)


m => 분(min)

E => 요일(day in week)

a => 오전/오후(am/pm) 


여러가지 수정 해 보면서 만져보시면 금방 이해가 되실 것입니다^^




마찬가지로 컴파일 하신후 실행 시키면 결과가 매우 잘 나옵니다.

사용자들이 쉽게 파악할 수 있는 가독성있게 출력 해 주죠. ㅎㅎ 




Random 클래스



랜덤 클래스는 개념은 타언어에서도 많이 쓰입니다. '랜덤함수' 등 말이죠^^

위에서 제가 빨간색으로 위에서 먼저 랜덤 클래스 객체 생성후에 빨간색 밑줄친 부분은 

abs() 메소드를 통해 양의 값을 표현 합니다. abs() 메소드 => 값을 양수로 바꾸는 역할 입니다.


게임에서도 많이 쓰이는 부분 입니다. 

가령 제가 어릴적에 즐겨 했던 레전드 게임 '스트라이커즈 1945' 같은 경우도 랜덤으로 움직이니까

재밌는거죠 ㅎㅎ



지금은 추억이된 전설의 게임 '스트라이커즈 1945'



그리고 코드에서 nextInt() 메소드가 랜덤으로 숫자를 돌려주는데 음수도 출력이 될수 있기에

양수만 받기 위해서 abs() 메소드를 사용한 것입니다.


그리고 %를 사용했는데요. 

이것은 나머지 연산자 입니다.


나머지(mod) 연산자는 나누고 남은 나머지를 돌려주는 역할을 합니다.

즉, 10을 5로 나누면 2이지만   , %를 사용해서 10%2 는 0이 됩니다. 나머지가 없기 떄문입니다. 

위 코드에서 100으로 %연산이 들어가면 나머지 값이 나오기에 0 ~ 49 사이의 값이 나오는 것이죠.



오늘의 행운확률 구하는 자바게임 만들기


우리가 위에서 배운 클래스 들을 가지고 오늘의 행운확률을 구해 보겠습니다.

위와 같은 코드인데 몇번씩 반복해 보시고 이걸 갖고 계속 갖고 놀아보면서 이해를 하면 좋습니다.^^




컴파일후 드디어 첫번째 게임의 결과 출력 완성! 
모두 수고하셨습니다^^



7화에서 만나요 +_+