2010. 2. 27.

계산기

Calc.zip

계산기 소스파일


자바와 안드로이드는 처음이라고 봐도 무방할 정도의 실력이므로
가벼운 마음으로 계산기를 만들어봤다.

 
회사를 다니면서 틈틈히 만들다보니 약 3주정도 걸렸는데 구현보다 에러처리하는 부분에서 더 오래 걸렸다.

 
이번 프로젝트를 하면서 오랜만에 헤드퍼스트 자바를 다시 보고 안드로이드 책을 사서 봤기 때문에 정말 많은 공부가 되었다.

 
---------------------





2010. 2. 24.

명령 프롬프트에서 d:로 이동하기.

윈도우 - 시작 - 실행에서 cmd라고 입력하면 명령프롬프트 창이 나옵니다.

기본 드라이브가 아닌  d:\로 이동을 하고 싶은 경우 사진을 참고하세요.

우연히 발견한 사실이지만 은근히 필요한 정보라고 생각되어 글을 썼습니다.

2010. 2. 22.

java BigDecimal 사칙연산

Float이나 Double로 사칙연산을 하는 경우 정확한 값을 얻지 못할 때가 있고,
이는 소수점 이하의 값을 제대로 읽지 못하기 때문이다.

예를 들어 0.2 * 0.4 의 결과가 0.0800000005 이렇게 나오는 경우이다.

이럴때는 BigDecimal을 이용하자.
java.math.BigDecimal 을 import해야한다.

// 예제에서는 String 타입을 인자로 넣었다.
BigDecimal preNum = new BigDecimal("6");
BigDecimal postNum = new BigDecimal("2");

// 곱하기
mutipleResult = preNum.multiply(postNum);
// 나누기, 반올림해서 소수점 둘째자리까지 보여준다.
divideResult = preNum.divide(postNum, 2, BigDecimal.ROUND_UP);
// 더하기
addResult = preNum.add(postNum);
// 빼기
subtractResult = preNum.subtract(postNum);

2010. 2. 17.

네이트 앱스토어에 대한 고찰

네이트 앱스토어가 작년 9월 말 오픈할 때부터 지켜봤고, 앱스토어에 앱을 올려놓기도 했습니다. 네이트 앱스토어의 앱은 대부분 플래시 기반의 앱이더군요.

사실 국내 유저들에겐 페이스북이나 마이스페이스에서의 흥행 앱들보단 그래픽적인 요소가 많이 담긴 플래시 기반의 앱들이 익숙합니다. 미국보단 국내의 인터넷 인프라가 잘 발달한 이유가 크다고들 하지만 제 생각엔 미국에서의 스마트폰 사용도 상당히 영향을 미친다고 봅니다.

윈도우모바일이 아닌 스마트폰에서 플래시는 작동하지 않고, 그 대표적인 예가 아이폰의 사파리입니다. 스마트폰으로 페이스북이나 마이스페이스를 접속하는 유저 중 몇 퍼센트가 플래시 기반의 앱을 사용할 수 있을까요?

앞으로 해외 뿐 아닌 국내에서도 스마트폰의 사용자가 늘어날 것이며, 스마트폰에서의 인터넷 접속률도 상당히 늘어날 전망이라고 합니다. 비 윈도우 계열에서 플래시는 ActiveX와 비슷한 취급을 받는 입장이고, HTML5에서는 플래시를 대신할 video 태그를 준비했고 성능도 뛰어나다. 그렇다면 아이폰이나 안드로이드의 스마트폰 시장 점유율이 높아질텐데 플래시기반의 앱들은 어떻게 될까요?

제 생각입니다만 아마도 모바일용 앱으로 따로 개발이 되지 않을까 싶네요. 플래시와 같은 그래픽 기반이 가져다 주는 즐거움을 포기할 수는 없기 때문이죠. 그렇게 되면 앱스토어에서는 어떻게 준비를 해야 할까 상당히 궁금해집니다. 플래시 앱들을 계속 가져갈 것이냐, 아니면 자바스크립트 기반의 앱들을 장려하고 사용자에게 교육을 시킬 것이냐 궁금해지는군요.

------------

HTML5가 2022년정도 되야 거의 모든 브라우져(90%)에서 지원한다는 얘기가 있군요. 그리고 스마트폰에서의 플래시 지원은 내년에는 35%, 2012년에는 53%정도 라고 예상하고 있습니다.

제가 너무 일찍 단정지어버린건 아닌가 싶네요. HTML5와 플래시에 대해서는 좀 더 지켜봐야 겠군요.

2010. 2. 15.

사칙연산 정규식(Regular Expression, Java)

안드로이드용 계산기 프로그램을 만들고 있습니다.
허접하지만 어느정도 구현이 되었구요.
계산기 프로그램을 만드는 중에 정규식을 쓸 일이 있었습니다.
정규식을 이용하면서 많은 공부가 되었습니다.


String s = "3+12X9-4/2";

정규식을 이용해서 String에서 숫자와 사칙연산 기호를 분리하려고 합니다.

처음에 썼던 방식은 다음과 같습니다.

String regExp = "[^0-9]";
String[] operands = s.split(regExp);

숫자가 아닌 것들을 구분자로 해서 operands에 3, 12, 9, 4, 2를 넣었습니다.


사실 사칙연산에서 쓰인 '+', '-', 'X', '/' 를 구분자로 하고 싶었는데 '-'가 문제가 되었습니다.

String regExp = "[+-X/]";

위에서 처럼 하면 '-'기호가 문제가 되어 파싱이 안되더군요.

escape 문제인가 싶어서

String regExp = "[+\-X/]";

위의 방법으로 해봤는데 역시나 안되었습니다.

한참을 고민하다가 다른 시도를 해봤는데

String regExp = "[+\\-X/]";
String[] operands = s.split(regExp);
위에 있는 정규식으로 하니 숫자만 파싱이 되더군요.

생각해보니 \\는 \로 인식이 되어서  \\-는 \-로 알아들을테니

'-'기호 문제가 해결되었습니다.

String regExp = "(-|X|/|\\+)";
String regExp = "[-X/+]";

위에서처럼 해도 마찬가지로 파싱이 되었습니다.

============================<결론>=============================
String s = "3+12X9-4/2";
String regExp = "[^0-9]";
String[] operands = s.split(regExp);

위와 같이 하면 숫자만 파싱할 수 있다.
아래와 같은 정규식을 써도 숫자만 파싱할 수 있다.
String regExp = "[+\\-X/]";
String regExp = "(-|X|/|\\+)";
String regExp = "[-X/+]";

2010. 2. 10.

String vs StringBuffer

Java에서 String은 Object로서 넣은 값을 변경할 일이 별로 없는 경우 쓰인다.

즉, 상수로 쓰기 쉽다는 말이고 final을 붙여서 선언을 해도 괜찮다고 생각한다.

 

String c = "STRING"; 를 C에서는 이렇게 표현한다.

char *c = "STRING";

StringBuffer는 값을 변경할 수 있는 문자열을 다룰 때 쓰이는 편이 좋다.


StringBuffer c; 를 C에서는 이렇게 표현할 수 있다.
char c[128];
c[3] = 'I';

2010. 2. 9.

그룹 지니어스

그룹 지니어스

한명의 천재가 세상을 이끌어 가는게 아니라, 여러명의 집단이 힘을 모아 창조적인 일은 한다는 내용이다. 뛰어난 개인이 무엇인가 창조했다고 믿지만 사실 그를 도운 많은 사람이 주변에 있다. 기업에서도 혁신적인 일을 하기 위해 여럿을 그룹으로 묶어 창의력을 요하는 일을 시킨다. 다만 너무 강제적이지도 않고, 동기부여가 될 수 있게 컨트롤 하는 일이 매우 중요하다고 한다. 집단의 사람들이 너무 부담스럽지도 않고 가볍게 의견을 얘기할 수 있는 환경은 중요하고 그로 인해 많은 성공담을 확인할 수 있다.

사용자 참여형 아이디어도 마찬가지라고 생각한다. 사용자의 니즈를 파악하기 위해 사용자에게 물어보는 것 만큼 효과적인 일은 없다고 생각한다. 간단한 하나의 주제나 아이디어를 사용자들에게 던져주어 그들의 의견을 모으는 것은 산 위에서 눈덩이를 굴려 모으는 일과 동일하다고 생각한다. 그들의 의견을 모아 정제하면 혁신적인 무엇인가가 창조된다고 믿는다.

2010. 2. 6.

안드로이드 개발환경 세팅(JDK, Eclipse, Android SDK)

1. JDK설치하기

 

http://java.sun.com에 접속한 뒤,

 

Downloads => Java SE => JDK 6 Update 18 (본인이 설치한 버전임.)

 

제어판 => 시스템 => 고급 => 환경변수 =>시스템 변수 에 가서

 

PATH 에 C:\Program Files\Java\jdk1.6.0_18\bin를 추가하고,

 

CLASSPATH에 C:\Program Files\Java\jdk1.6.0_18\lib;.;을 추가한다.

 

.은 현재폴더를 나타낸다. 반드시 추가할 것.

 

환경변수 등록이 정상적으로 되었는지 확인하려면 커맨드창을 띄운다.

 

c:\Documents and Settings\junp>javac -version

javac 1.6.0_18                       => 정상

 

 

2. Eclipse 설치하기

 

http://www.eclipse.org/에 접속한 뒤,

 

Downloads => Eclipse Classic 3.5.1(맨밑)

 

압축을 풀고 원하는 위치로 옮긴다.

ex) D:\eclipse

 

 

3. Android SDK 설치하기

 

http://developer.android.com/sdk/index.html에 가서 OS에 맞게 다운받는다.

 

압축을 풀고 원하는 위치로 옮긴 후, SDK Setup.exe를 실행시킨다.

 

팝업창이 두개 나올텐데 다 끄면 된다.

 

1) Settings => Misc => Force https://...sources to be fetched using http://...

에 체크하고, Save & Apply를 클릭한다.

 

2) Available Packages 메뉴로 가면 버전별 SDK가 나온다.

모두 체크하고 Install Selected를 클릭한다.

(SDK 버전별로 Class 사용범위가 다르기 때문에 다 받아놓고 변경하는게 좋겠다.)

 

3) Choose Packages to Install 창이 나타나면 Accept All 선택하고,

Install Accepted 클릭한다. (설치하는데 40분 이상 필요하다)

 

설치가 완료되면 D:\android-sdk-windows\platforms에 생성이 된다.

 

4) 환경변수 PATH에 D:\android-sdk-windows\tools을 추가한다.

 

 

4. Eclipse에 ADT(Android Development Tools) Plug-in 설정

 

1) eclipse 실행 후 메뉴에서 help > install new software... 클릭한다.

 

2) install 팝업창에서 상단 오른쪽의 Add를 클릭하고, Name 에 Android Plugin 입력하고

    Location에 http://dl-ssl.google.com/android/eclipse 입력 및 OK를 클릭한다.

3) 중간에 설치 리스트 나오는데 모두 선택하고 Next > Next > Accept > Finish를 선택한

    다.

4) 재부팅 후, eclipse를 다시 실행을 하고 file > new > project를 클릭하면 안드로이드 용

   프로젝트를 만들 수 있다.

 

5)  Window > Preferences > Android > SDK Location에서 Browse 클릭하고

     D:\android-sdk-windows를 선택한 뒤 확인을 클릭한다.

 

6) 그리고 Apply를 클릭한 뒤 OK를 클릭한다.

 

 

5. Virtual Device 생성

 

1) D:\android-sdk-windows\SDK Setup.exe를 실행한다.

 

2) Virtual Devices에서 New...를 클릭하고 Name은 '2.1' Target은 'Android 2.1 - API Level 7'을 선택하고 Create AVD를 클릭한다.(Android 버전 선택은 자유이다.)

 

3) 생성된 2.1버전의 AVD를 선택하고 Start... 를 클릭한다. 에뮬레이터가 실행된다.

출발!

2월부터 LG전자 CTO 인턴연구원으로 있게 되었습니다.

 

맡은 일은 안드로이드 개발이구요.

 

입사 전날 몸살 나는 바람에 정신없는 주중을 보냈는데 제대로 쉬질 못하니

 

편도선이 붓고 두통에 잇몸이 부었더군요.

 

우선은 연구원으로 있으면서 많은 글을 올렸으면 하는 바램이 있네요.

 

우선 편도선이 빨리 가라 않았으면 하구요 ^^;;