'프로그래밍'에 해당되는 글 6건

  1. 2012.12.31 2012년 미니의 프로그래밍 이야기 블로그 결산 (2)
  2. 2012.07.06 하이브리드 앱 개발을 위한 폰갭(phonegap) 소개 (2)
  3. 2012.05.25 하둡(hadoop) 맵리듀스 프로그래밍을 위한 이클립스 설정 및 맵리듀스 개발 #2 (3)
  4. 2012.04.16 프로그래밍 주석에 대한 정리 및 몇가지 팁~
  5. 2007.07.23 다양한 프로그래밍 언어를 익혀라... (5)
  6. 2007.07.20 Effective Java - 자바 유창하게 말하기

2012년 미니의 프로그래밍 이야기 블로그 결산

|



2011년 제 블로그 결산을 하면서 월 2만 이상의 PV가 나오는 블로그가 되었으면 좋겠다고 했는데요. 

최근 월 PV가 4만을 넘어서면서 총 방문자수가 작년 265,497에서 65만명으로 2배 이상 증가했네요. 



이 블로그를 통해 새로운 내용이나 기억할 만한 내용을 한번 정리하고 추후 찾아볼 수 있도록 활용하고자 했었는데요. 

그러다 보니 부담없이 꾸준히 글을 올리게 되고, 내가 궁금해 하는 내용을 다른 분들도 마찬가지로 찾고 싶어 했던 것 같습니다.


사용자가 접속하는 패턴을 보면 월별로 점차 증가하는 추세이기는 합니다.

그리고 월~금요일에 비해 토, 일요일 접속자가 급격히 떨어져서 굴곡이 심하게 나타나네요. 

IT 관련 글이 주요 내용이다 보니 주말에는 별 관심이 없는 듯 합니다. ^^



구글 Analytics로 분석한 결과를 살펴보면 올해 순 방문자 수는 166,992명입니다.

16만명이 제 블로그를 왔다 갔다는 것인데요. 감사합니다. ^^



평균 방문시간도 작년의 45초에서 1분 11초로 증가했고, 이탈률도 4%정도 떨어졌네요. 

꾸준히 글을 올리다보니 재 방문률이 높아진 듯합니다. 



49,742명의 재방문을 한 분들이 있으니 이 중 10% 정도가 자주 오시는 분이라고 보면 약 4,000명의 구독자가 있다고 봐도 되겠죠. 


마지막으로 유입경로를 살펴보면 지난해와 비슷한데요. 

네이버 모바일 검색을 통해서 들어오신 분들이 7위에서 3위로 껑충 뛰어오른 것을 볼 수 있습니다. 

내년부터는 모바일에서의 접근을 고려해서 글을 작성해야 할 듯 하네요. 



다가오는 2013년 새해에도 꾸준히 글을 올려서 월 PV 5만 이상을 유지하는 블로그가 되었으면 하네요. 

더불어 제 블로그 보시는 모든 분들 새해 복 많이 받으시고 소원하는 것이 다 이루어지는 2013년 되시기 바랍니다. 

감사합니다. 







Trackback 0 And Comment 2
  1. jsh0912 2012.12.31 23:11 신고 address edit & del reply

    축하드립니다ㅎ

하이브리드 앱 개발을 위한 폰갭(phonegap) 소개

|



모바일 앱 개발을 하다 보면, 아이폰 개발자와 안드로이드 개발자가 각각 필요한 경우가 많습니다. 

물론 두 가지를 혼자서 하는 경우도 있겠지만 대부분의 경우에는 전문적으로 나누어져 있지요. 

그러다 보니 개발이나 운영에 있어서 비용이 두 배로 들어가는 경향이 있습니다. 


그래서 모바일 앱 초창기부터 하나의 소스로 모든 앱을 개발할 수 있다는 플랫폼들이 나왔었던 것 같습니다. 

그중에서 폰갭(phonegap)이라고하는 오픈 소스로 이루어진 하이브리드 앱 개발 도구에 대해서 간략하게 소개하려고 합니다. 



모바일 웹앱과 하이브리드 앱

현재 모바일 웹 페이지들을 보면 마치 앱처럼 동작하도록 구성하기도 합니다.

아이폰용 Web App 만들기에서 소개해 드린대로 파이낸셜 타임즈 처럼 HTML5로 앱처럼 구성하는 경우가 있습니다. 

아무리 홈 화면에 추가해서 앱처럼 사용할 수는 있지만 이러한 모바일 웹앱은 웹 페이지에 불과하며

HTML5에서 지원하는 것 이상의 스마트폰 자원에 접근할 수 없다는 단점이 있습니다. 


그러나 하이브리드 앱은 HTML5나 CSS와 같은 웹 기술을 똑같이 사용하기는 하지만 

완전한 앱으로 만들어져서 앱스토어나 구글플레이에 등록할 수 있도록 구성된 것입니다. 

즉 XCode로 아이폰 앱을 만들어서 앱스토어에 등록하는 것처럼, 

XCode에 하이브리드 앱을 위한 SDK를 설정하고 웹 기술로 개발한 다음 앱스토어를 통해 배포하는 것이죠. 


즉 동일한 웹 기술을 사용하지만, 모바일 웹앱은 별도로 URL을 홍보하고 "홈화면에 추가" 하도록 유도해야 하지만 

하이브리드 앱은 바로 앱스토어나 구글플레이에 등록할 수 있다는 차이가 있습니다. 

반면에 모바일 웹앱과 달리 하이브리드 앱은 수정한 내용이 반영되려면 등록된 앱을 업데이트해야 하므로 일정 시간이 소요되겠지요. 

또한 현재 하이브리드 앱 기술이 널리 활성화 되지 않은 가장 큰 이유중의 하나는 바로 실행 속도 때문이기도 합니다. 

중간에 어떤 엔진을 통해서 실행해야 하므로 사용자들이 더 느리게 느껴지는 부분이 있습니다. 


이러한 단점에도 불구하고 one-source multi-use를 지원하고, 네이티브 앱처럼 스마트폰의 자원에 쉽게 접근할 수 있다는 장점이 있으므로 

앞으로 점차 폰갭과 같은 하이브리드 앱이 발전할 가능성은 높다고 봅니다. 


폰갭 설치

폰갭을 설치하기 전에 아이폰이나 안드로이드 개발 환경이 갖춰져 있어야 합니다. 

폰갭의 SDK는 총 7개의 플랫폼을 지원하면 각각에 적합한 SDK를 제공하고 있습니다. 



최근에 지원하는 윈도우즈 폰 7, 아이폰, 안드로이드, Black Berry, 바다, 심비안, webOS까지 총 7개 플랫폼을 지원한다고 하네요. 

플랫폼별 폰갭 설치와 관련해서는 아래 링크를 참고하시면 됩니다. 


폰갭 사이트를 보면 Cordova라는 이름을 많이 사용합니다. 버전 1.5인가 부터 phonegap 대신에 cordova를 사용한다고 하네요. 


폰갭 API들

폰갭에서 지원하는 주요 API는 다음과 같습니다. 

각각의 API들은 문서로 제공되는 API Reference를 통해서 확인할 수 있습니다. 


  • Accelerometer

    가속센서 - Tap into the device's motion sensor.

  • Camera

    카메라 - Capture a photo using the device's camera.
  • Capture

    캡처 - Capture media files using device's media capture applications.
  • Compass

    방향 정보 - Obtain the direction that the device is pointing.
  • Connection

    커넥션 - Quickly check the network state, and cellular network information.
  • Contacts

    연락처 - Work with the devices contact database.
  • Device

    단말기 정보 - Gather device specific information.
  • Events

    이벤트 - Hook into native events through JavaScript.
  • File

    파일 - Hook into native file system through JavaScript.
  • Geolocation

    위치 정보 - Make your application location aware.
  • Media

    미디어 - Record and play back audio files.
  • Notification

    알림 - Visual, audible, and tactile device notifications.
  • Storage

    저장소 - Hook into the devices native storage options.























아직 폰갭을 제대로 테스트해보지는 않았지만 기대가 조금 되기는 하네요. ^^

예전에 MarmaladeMotherapp등을 봤었는데요. 현재는 폰갭이 대세를 이루고 있는 것 같습니다. 

앞으로 시간 날때 조금씩 테스트 해보려구 하네요. 






Trackback 0 And Comment 2
  1. 소중한너 2012.08.15 23:40 address edit & del reply

    잘보았습니다 제 블로그에 미니님의 블로그 링크를 추가하였습니다.

    • 미니~ 2012.08.16 17:30 신고 address edit & del

      감사합니다. 블로그 주소도 알려주세요.. ^^

하둡(hadoop) 맵리듀스 프로그래밍을 위한 이클립스 설정 및 맵리듀스 개발 #2

|



하둡과 관련되어 작성한 글 목록을 먼저 보여드립니다. 참고하시기 바랍니다. 

2012/02/29 - [리뷰/블로그] - BigData 처리를 위한 맵리듀스(MapReduce)에 대하여~

2012/05/18 - [프로그래밍/Java] - 하둡(Hadoop) 설치부터 테스트까지 정리~

2012/05/22 - [프로그래밍/Java] - 하둡 맵리듀스 프로그래밍을 위한 이클립스 플러그인 설정 #1


지난 시간에 Mac에 이클립스 플러그인을 설치하는 과정을 살펴봤는데요. 

마지막에 설명한 것처럼 플러그인의 장점을 충분히 살리지 못하고 있으며 약간의 버그들도 존해하기 때문에 큰 의미가 없었습니다. 

그래서 이번에는 일반적인 자바 프로젝트로 개발 환경을 설정하고 word count를 처리하는 예제를 실제로 실행해 보도록 하겠습니다. 


이클립스 하둡 맵리듀스 개발 환경 설정


새 프로젝트 생성

먼저 Hadoop 이라는 이름으로 새로운 프로젝트 생성을 하는데요. 일반적인 자바 프로젝트로 진행하시면 됩니다. 

create java project in eclipse

create java project named hadoop

다음과 같이 프로젝트가 생성된 것을 볼 수 있습니다. 

생성된

Hadoop에서 제공하는 conf/ 파일들이 필요하므로 복사할 수 있도록 conf/라는 폴더도 하나 생성하도록 하죠.. 

프로젝트에서 우클릭한 후, New > Folder > conf 라고 만드시면 다음과 같이 나타납니다. 

conf 폴더 생성


개발 환경 설정

이제 하둡 이클립스 플러그인으로 생성한 것과 비슷하게 각종 jar 파일들을 적용하는 환경 설정을 해보도록 하겠습니다. 

프로젝트에서 우클릭 한 후, "Properties"를 실행합니다. 

그리고 좌측에서 "Java Build Path"를 선택하고 우측의 탭 중에서 "Libraries"를 선택하면 다음과 같은 화면이 나타납니다. 

java build path의 Libraries 설정

먼저 "Add External JARs..."를 선택해서 Hadoop 관련된 다음 jar 파일들을 추가해 주시면 됩니다. 

  • /hadoop-1.0.1/hadoop*.jar
  • /hadoop-1.0.1/lib/*.jar

Add External Jar

그리고 "Add Class Folder..."를 클릭해서 위에서 생성한 conf/ 폴더를 지정합니다. 

add class folder

마지막으로 하둡이 설치된 곳에서 conf/ 하위의 파일들을 현재 프로젝트의 conf/ 폴더로 복사합니다. 

copy files to conf folder

자.. 개발 환경 설정이 모두 종료되었습니다. 

이제부터는 맵리듀스 프로그래밍을 시작해 보도록 하죠. 

예제는 hadoop 설치 소스에 포함된 wordcount를 가지고 실제 만들어서 진행해 보도록 하겠습니다. 


wordcount 맵리듀스 테스트

하둡 설치 폴더에 보면 /hadoop-1.0.1/docs/index.html 파일을 실행해 보시기 바랍니다. 

뭐든지 제작사가 직접 만든 Document가 가장 신뢰성있는 정보를 제공하는 것 같습니다. 

첫 화면은 다음과 같습니다. 

hadoop documents

여러가지가 있는데요.. 필요한 분들은 추후 천천히 살펴보시기 바랍니다. 

여기에서는 맵리듀스에 관심이 있으므로 MapReduce Tutorial을 따라서 진행해 보도록 하겠습니다. 

MapReduce tutorial


맵리듀스 소스 코딩

맵리듀스 튜토리얼을 살펴보면 중간에 Example: WordCount v1.0이라는 부분이 있습니다. 

이 예제를 가지고 위에서 세팅한 이클립스로 코딩을 해보도록 하죠.. ^^

위에서 설정한 hadoop 프로젝트에서 src/ 하위에 새로운 패키지와 자바 파일을 만들도록 하겠습니다. 

패키지명: kr.acronym.wordcount

클래스명: WordCount

create java package

create java class

그리고 나서 WordCount.java에 다음과 같이 소스 코드를 넣습니다. 

이 소스는 hadoop의 mapreduce tutorial에서 가져온 내용입니다. ^^

이클립스에서 보면 에러 표시가 안 나타나는 것을 볼 수 있습니다. 

혹시 에러가 나는 분들은 앞부분의 개발 환경 설정이 잘못된 경우이니 처음부터 다시 따라해 보시기 바랍니다. 


컴파일 및 jar 파일 생성

튜토리얼에는 콘솔 명령어로 컴파일하고 jar 파일을 생성하는 것을 설명하고 있습니다. 

이클립스와 같은 툴을 사용하는 이유는 이런 작업을 좀 편하게 하기 위함이죠.. 

이클립스를 통해서 컴파일하고 jar 생성하는 것은 잘 알겠지만 여기에서 한번 더 진행해 보도록 하겠습니다. 

먼저 프로젝트에서 우클릭한 후, Export..를 선택하면 나오는 화면에서 JAR file을 선택합니다. 

create Jar file

이어지는 화면에서 조금 전 코딩한 WordCount 클래스를 포함한 패키지를 선택합니다. 

그리고 필요한 경우 "Select the export destination"에서 저장할 경로를 지정합니다. 

Jar file specification

이제 "Finish" 버튼을 클릭하면 wordcount.jar 파일이 만들어집니다. 

("Next>"를 클릭해서 각각 세부 정보를 설정할 수도 있습니다. 이건 각자 살펴보세요 ^^)


WordCount 실행으로 결과 확인

지금부터 실행하는 것은 콘솔 명령어로 하도록 하겠습니다. 

추후 기회가 되면 ANT 빌드로 만들어서 이클립스에서 한번에 처리할 수 있도록 구성할 수도 있겠죠.. 


지난번 하둡(Hadoop) 설치부터 테스트까지 정리~ 예제를 따라 했다고 생각하고 시작하도록 하겠습니다. 

(위 예제를 모두 따라 했다면 HDFS의 input/ 폴더와 output/폴더가 이미 생성되어 있을 겁니다.)

먼저 조금전 jar 파일이 생성된 폴더로 이동을 합니다. 

# cd /Users/minikim/Dev/jar/

그리고 이전에 생성된 HDFS의 input/과 output/ 폴더의 내용을 모두 삭제하도록 하겠습니다. 

# hadoop dfs -rm input/CHANGES.txt

# hadoop dfs -rmr output/

첫번째 라인은 앞선 예제에서 실행한 CHANGES.txt 파일만 지운 것이구요. 

두번째 라인은 output/ 폴더 전체를 삭제한 것입니다. 


맵리듀스를 한번 실행하고 난 뒤 다시 실행하면 "org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory  .... already exists" 라는 에러 메시지가 나타납니다. 

이 경우, output 폴더의 내용을 지우거나 결과를 저장하는 위치를 변경해야 한다고 하네요. 


이제 단어 숫자를 셀 파일들을 한번씩 만들어 보겠습니다. 

# vi file01

Hello World Bye World

# vi file02

Hello Hadoop Goodbye Hadoop

텍스트 파일 만드는 것이야 어렵지 않으니 쉽게 따라 하실 수 있을 것 같네요.. ^^

이렇게 생성된 파일들을 HDFS의 input/ 폴더에 복사하도록 할께요. 

이어서 잘 복사가 되었는지도 확인해 봤습니다.

# hadoop dfs -put file01 input/

# hadoop dfs -put file02 input/

# hadoop dfs -ls input/

Warning: $HADOOP_HOME is deprecated.

Found 2 items

-rw-r--r--   3 minikim supergroup         22 2012-05-23 18:08 /user/minikim/input/file01

-rw-r--r--   3 minikim supergroup         28 2012-05-23 18:13 /user/minikim/input/file02

이제 앞에서 만든 wordcount를 실행해서 실제 결과가 나오는지 확인해 보도록 하죠.. 

# hadoop jar wordcount.jar kr.acronym.wordcount.WordCount input/ output/

mapreduce result

제대로 실행이 됩니다. 그럼 결과를 확인해 보도록 하죠^^

output/ 폴더를 보면 part-00000 파일이 생성된 것을 볼 수 있구요. 

이 파일의 내용을 보면 단어 갯수 체크가 되어 있습니다. 

# hadoop dfs -ls output

# hadoop dfs -cat output/part-00000

이제 이클립스에서 맵리듀스 프로그래밍을 하고 결과가 제대로 나오는 것 까지 확인을 했네요.. 

이번 글은 정말 길었습니다. 하나하나 자세히 설명하다보니~

저도 처음 해보면서 너무 정신없었던 기억에 이렇게 정리를 한번 해봅니다. 

추후 기회가 되면 jar 생성 이후 과정을 자동화 하는 것도 한번 처리해 보도록 하죠.. 

그럼.. 좋은 하루 되세요~





Trackback 0 And Comment 3
  1. 셰브첸코 2012.07.16 11:28 address edit & del reply

    잘 보았습니다. 하나하나 따라하기 쉽게 정리해 주셔서 감사합니다.
    이클립스 플러그인을 생성하는게 어려웠는데 여길 보니 굳이 플러그인을 만들지 않아도 원하는jar파일을 만들수 있네요,

    고맙습니다!

    • 미니~ 2012.07.17 15:45 신고 address edit & del

      항상 시간이 지나면 잊어버리는 경우가 많아서 이렇게 정리해 두면 저한테도 도움이 되더라구요.

      어쨌든 댓글 달아 주셔서 감사합니다. (요새 통 반응이 없어서 걱정했네요.. ^^)

  2. hare 2013.02.01 13:30 address edit & del reply

    ^-^ 감사합니다. 여기까지 정상적으로 잘되네요!
    처음에 hadoop dfs -rmr output 을 몰라서 왜 않되는지 몇일을 헤맸네요.ㅎ
    확실히 플러그인보다 이 방법이 편하고 좋습니다.
    글 정말 감사합니다.

프로그래밍 주석에 대한 정리 및 몇가지 팁~

|



주석이 왜 필요한가? 

프로그래밍을 배울 때 변수, 제어문 등에 앞서 주석을 지정하는 방법에 대해서 가장 먼저 설명하는 것을 볼 수 있습니다. 

특히 예전에는 주석을 잘 활용하는 것이 중요하다는 이야기를 많이 했었는데요. 

요즘에는 프레임워크가 발달하면서 상대적으로 주석이 필요 없다는 의견도 많은 것 같습니다. 

실제 프로그래밍을 하다보면 6개월에서 1년 정도 지난 후 자신의 소스를 봐도 생소하게 느껴질 것입니다. 

이럴 때 초기에 주석을 달아놨더라면.. 하는 생각을 한번쯤은 해 봤을 겁니다. 

즉, 주석은 다른 사람이 소스를 봤을 때 빨리 이해할 수 있도록 적는 것이 중요합니다. 

가끔 프로그램 소스보다 주석이 많은 경우가 있는데 이는 오히려 가독성을 떨어뜨리는 결과를 가져오기도 합니다. 

그래서 꼭 필요한 부분에 간결하게 적는 습관을 들이는 것이 중요하다고 생각하네요. 


주석으로 문서화를 ~

또한, Javadoc이나 Doxygen과 같은 툴을 활용하면 주석을 그대로 개발 문서로 변경할 수도 있습니다. 

이를 위해 체계적으로 주석을 설정하는 방법도 팀 내부에서는 고민을 해 볼 필요도 있겠지요. 

예를 들면, Javadoc을 통해서 컴파일하면 java api와 같은 형태의 HTML 문서를 생성해 주게 됩니다. 

이클립스에서 컴파일된 Javadoc을 살펴보면 다음과 같이 나타납니다. 

Javadoc에 대해서는 기회가 되면 다시 한번 정리해 보도록 하죠.. ^^

                 

주석 팁 하나~

마지막으로 간단한 주석의 우선 순위를 활용한 팁을 하나 적어볼께요. 

90년대에 C언어 프로그래밍 할 때 처음 사용했던 방식인데, Java에서도 역시 잘 되더라구요. 

위와 같이 사용하면 윗 부분이 주석이 되고, 맨 위의 주석의 앞부분에 /를 하나 추가하면 윗 부분이 주석이 됩니다.

위와 같은 Test 계정을 잠시 설정할 때 유용하게 활용했었네요~~





Trackback 0 And Comment 0

다양한 프로그래밍 언어를 익혀라...

|



개인적으로 올 초에 Ruby on Rails를 좀 살펴봤었습니다.

10년 전에 만들어진 Ruby라는 언어와.. 일종의 프레임워크를 적용하여 웹 어플리케이션을 개발할 수 있는 환경을 제공하는 Rails라는 것이었는데요...
물론 실전에서는 한번도 써보지 못하고.. 걍 예제 프로그램 정도만 만들어 봤었죠~

요즘은 Groovy라는 언어와 Grails라는 것을 보고 있습니다.
자바와 같은 바이트 코드를 만들어 주는 스크립트 언어인 Groovy에.. rails와 비슷한 MVC 환경을 만들어 주는 Grails가 있다고 하더군요..

아무래도 자바 환경에서 동작하므로 ruby on rails 보다는 쓰임새가 많을 것 같아.. 살펴보고 있습니다.

오늘 이런 이야기로 시작하는 이유는.. 제 개인적인 욕심 때문입니다. -.-
개인적으로 프로그래머는 언어에 구애를 받으면 안된다고 생각합니다.
또한, 최소한 1년에 하나씩 새로운 언어를 익히려고 노력해야 한다고 생각합니다.

제가 처음 대학에서 컴퓨터공학을 전공할 때만 해도..
언어는 Fortran, Basic, C 가 있었습니다.
이때는 C만 잘하면, 어디서든지 큰소리를 칠 수 있는 환경이었었죠..

하지만, 지금은 환경이 다릅니다.
매일 매일 새로운 언어가 나오고 있고.. 기존의 언어들도 끊임없이 업그레이드 하고 있습니다.

특정언어에 대해 아무리 잘 알고 있다고 하더라도..
다른 언어를 활용하면 더욱 쉽고 빠르게 구현할 수도 있는 것입니다.

그래서 구현에 얽매이지 말고.. 아키텍트나 알고리즘에 좀 더 신경을 쓰는 것이
바람직하지 않을까 하는게.. 제 생각입니다.
그러기 위해서 새로운 언어를 받아들이는데 거부감이 없어야 한다고 생각하구요..

그러나 현실적으로 쉽지는 않습니다.~~
또한 다른 프로그래머들에게 물어보면..
저에게 전형적인 프로젝트 관리자 적인 마인드라고 합니다.

개발자 입장에서는 새로운 언어를 익히는 것이 새로운 외국어를 익히는 것 만큼 낯설게 느껴지기 때문이기도 하는가 봅니다.

정리하면 제 생각은 이렇습니다.
"먼저 기본이 되는 프로그래밍 언어를 하나정도 아주 깊게 이해해야 합니다.
개인적으로는 C언어를 추천하지만, Java나 C++도 괜찮습니다.
그리고 난 후, 다른 언어들을 1년에 하나씩만 추가해 나가면.. 최고의 프로그래머가 되지 않을까요?"

과연 제 생각이 맞다고 보시나요?
또 최고의 프로그래머가 되면 그 다음은.....??




Trackback 0 And Comment 5
  1. 폐인의세계 2007.07.23 21:51 address edit & del reply

    저도 미니님과 비슷한 생각을 가지고 있습니다.
    거기다가 약간의 의견을 추가하고자 합니다.
    프로그래밍 언어를 익히는 것도 중요하지만 자신의 생각을 그 프로그래밍 언어로 표현할수 있는 방법이 가장 중요한 것이라고 친한 교수님께서 언어선택으로 방황하고 있는 저에게 말씀하셨습니다. 왜냐하면 하나의 프로그래밍 언어로 표현된 프로그래머의 생각은 Pseudo Code로 작성될수 있기때문에 다른 언어로 옮겨가기가 쉽기 때문입니다. 그래서 한 언어라도 깊게 파놓는다면 다른 언어도 쉬운것이라고 저는 생각합니다.

    • 미니~ 2007.07.24 11:17 신고 address edit & del

      네~~ 저도 한가지 언어를 깊게 파야 한다는 점이 정말 중요하다고 생각합니다.
      얇고 넓게 아는 것은 바람직하지 않다고 봅니다.
      한가지 언어는 자유자재로 구사할 수 있도록 깊게 알면서.. 다른 언어로의 확장이 필요하다는거죠..

      의견 주셔서 감사합니다. ^^

  2. yundream 2007.07.24 09:40 address edit & del reply

    언어에 구애 받지 않는다는 것은 두가지로 해석할 수 있을 거 같습니다.
    1. 언어의 문법에 구애받지 않는거.
    2. 언어의 환경에 구애받지 않는거.

    언어에 대한 구애를 받지 않는다면, 1번보다는 2번의 의미가 더 클것이라 생각됩니다.
    그렇다면 언어에 구애받지 않는다는게 생각보다 쉽지 않다는 것을 경험하게 될 수 있습니다.
    알고리즘 프로시져 이전에 언어의 환경을 이해하는건 별개의 문제이기 때문입니다.

    대게 알고리즘, 자료구조이해, 이를 구체화시키는 프로시져코드의 작성등은 플랫폼과 언어, 기계에 상관이 없습니다.

    반면 언어는 그렇지가 않죠. PHP와 C언어가 문법이 거의 동일하지만, C언어를 하게 되면 전혀 다른 문제를 해결해야 합니다.
    웹환경이 아닌, 시스템/네트워크 환경을 이해해야 하기 때문이죠.
    마찬가지로 C에서 Java를 하는건 또다른 문제입니다.

    이런 환경 문제외에도 여러가지 사정으로 인해서 1년에 하나씩 추가해 나간다는건 - 문법만 익힐거라면 모르지만 - 거의 불가능합니다.

    • 미니~ 2007.07.24 11:16 신고 address edit & del

      음.. 언어의 환경을 이해하기 위해서는 프로젝트를 진행하면서 경험을 쌓아야 가능할 거라고 생각합니다.

      그러기 위해서는 본인의 업무와 별도로.. 스스로 필요한 프로그램을 끊임없이 만들어 보는 것은 어떨까요?

      배운걸 써먹어 보자는 것인데.. 쩝~ 현실의 업무도 벅찬데.. 너무 가혹할까요?

      어쨌든 좋은 의견 감사합니다.

    • yundream 2007.07.24 11:58 address edit & del

      음.. 2가지 언어정도를 주력으로 하고...
      여기에 2가지 언어정도를.. 유틸언어로 하는 정도면 어떨까요.
      다양한 페러다임과 환경을 경험할 수 있도록 말이죠.

      이를테면 C, Java ==> 주력 아마 이경우 C++까지
      유틸언어로는 Python, Ruby, Perl, PHP등에서 선택정도.

Effective Java - 자바 유창하게 말하기

|



Effective Java Programming Language Guide
조슈아 블로치 지음, 이해일 옮김/대웅미디어

 VC++ 위주의 프로그래밍을 하다가 자바를 시작한지는 몇년 되지 않았기 때문에..
기본적인 문법을 다루고, 시스템을 구축하기는 어렵지 않았지만
자바 언어 자체에 대한 이해는 부족했던 것이 사실입니다.

Effective Java란 책을 읽어 보면서 자바 언어에 대해 좀 더 이해하게 됐다는 느낌이 들었습니다.
솔직히 equals나 hashCode의 재정의 같은 부분은 클래스를 수없이 만들면서도 한번도 생각하지 못한 것이었거든요 -.-

다만, 아쉬웠던 점은 번역서들이 대부분 그렇듯이.. 난해한 번역투의 문장이 많은 것이죠 ^^
아마도 원서의 내용은 매우 좋았을 것 같은데~~ 영어가 부족하니.. 감안하고 보는 수 밖에요.

그럼 책 내용을 간략하게 정리해보도록 하겠습니다.

1. 객체를 생성하고 파괴하기

Static Factory MethodSingleton과 같은 것은 디자인 패턴에 대한 책을 잠시 볼 때도 나왔었기에 이해하기가 쉬웠고요..

쓸데없는 객체를 중복 생성하지 않는 문제.. 다음과 같이 하지 말라는 거죠~
String s = new String("바보");
경우에 따라 간과하기 쉬운 것 같았슴다~~

그리고 finalize()를 사용하지 말라는 것..
가비지 컬렉터가 객체를 파괴하기 전에 호출하지만, 문제는 언제 객체를 파괴할 지 모르기 때문에 호출되는 시점을 알 수 없다는 것이죠..
음... C++에서는 소멸자를 매우 유용하게 썼었는데.. 자바에서는 실제로 거의 못봤던 것이죠..

2. 모든 객체의 공통 메소드 구현하기

여기에서 equals()와 hasCode()의 재정의에 대해서 봤습니다.
toString()의 재정의는 실제로 많이 사용하기는 했지만,

equals()나 hasCode()를 직접 재정의해 본 적은 없었네요..
표준 구현계약을 지켜서 재정의 하면 된다고 나와 있구요~~

clone() 메소드는 신중하게 재정의하라고 되어 있네요..
재정의 자체보다는 각 공통 메소드가 하는 일들을 다시 한번 정리한 점이 괜찮았던 것 같네요~~

3. 클래스와 인터페이스

OOP를 하면 나오는 것이고.. 자바 프로그래밍을 하려면 필수적인 것이라.. 색다른 내용은 없구요.
다만, final을 이용한 불변 클래스 (immutable class)를 많이 쓰라고 하는 점이 기억에 남네요..

4. C 구문 바꾸기

C언어에서 사용하는 구조체, union, enum 구문을 자바로 어떻게 변경해야 하는지 나타내고 있습니다.

구조체는 클래스로..
union은 클래스인데.. 계층구조로 즉, 추상클래스와 extends를 이용해서 바꾸라고 되어 있네요..
열거형(enum)은 클래스로 바꾸는데.. 타입안전 열거(typesafe enum) 패턴을 사용하라고 하네요..

타입안전 열거 패턴은 처음 들어봤는데요.. 나름 유용한 것 같네요. 왜 필요한지는 설명이 잘 되어 있슴다.

5. 메소드

코딩 규칙.. 즉, 메소드의 시그니처나 문서화를 위한 주석 (javadoc 같은 거겠죠..)을 하라는 이야기가 있구요.

중요한 부분으로는 방어복사(defensive copy)라는 것이 나오는데요..
메소드 내에서 인자(argument)를 처리할 때..
1. 메소드 내 인자 확인
2. 메소드 내 인자를 가지고 처리 후 결과 리턴

위 과정 사이에.. 즉 1.5 정도에 사용자가 인자의 내용을 바꾸면.. 원하는 결과가 나오지 않을 수 있다는 것이죠~
매우 간발의 차로 이루어지는 경우겠지만, 프로그래밍에서는 고려해야 하는 부분이겠죠..
그러므로 1번을 하기 전에 인자를 내부적으로 복사하라는 것이 바로 방어복사라고 합니다.

또하나.. 메소드에서 배열을 결과로 리턴할 때, 값이 없을 경우 null을 리턴하는 경우가 있는데..
null보다는 길이가 0인 배열을 리턴하는 것이 호출한 곳에서 받아서 처리할 때 좋다고 되어 있네요.
(음.. 이부분은 이렇게 사용해 왔던 것 같은데.. 다시 염두해 두어야 겠네요)

6. 프로그래밍 일반

일반적으로 고려해야 하는 사항들이 잘 정리되어 있습니다.
라이브러리를 잘 활용해야 한다는 이야기도 있구요..
정확한 계산에 float이나 double을 사용하면 안된다는 이야기
객체에 대한 참조는 인터페이스로 해야 확장성이 좋다는 점도..
신중하게 최적화하라는 이야기도 있네요.. (요건 프로젝트 관리 부분에서 한번 다루려고 합니다. ㅋㅋ)

7. 예외처리, 쓰레드, 직렬화

예외를 어떻게 처리해야 하는지.. 잘 설명되어 있구요..
쓰레드에 대해서는 조심해야 하는 부분들에 대해 간단히 설명되어 있습니다.
마지막으로 자바에서 많이 사용하는 직렬화(serialize)에서 주의사항들도 정리되어 있네요..

휴.. 내용을 간단히 정리해 봤습니다.
다음에 책 내용이 뭐더라~~ 하지 않으려고 한번 써보네요.. ㅋㅋ

그럼.. 좋은 하루 되세요!!





Trackback 0 And Comment 0
prev | 1 | next