Languages/Java2014.09.05 12:23

이펙티브 자바(Effective Java)의 2판이 다시 번역되어 재출간되었습니다. 출판사는 인사이트입니다. 





원래 대웅출판사에서 번역되어 출간되었다가 절판된 것을 이번에 인사이트에서 다시 번역해서 출간했습니다. 원래 번역본을 전혀 참고하지 않은, 전면적인 재 번역입니다. 


참고하시라고, 118페이지의 본문을 발췌해 보았습니다. 


규칙 16은 계승을 위한 설계와 문서를 갖추지 않은 “이질적(foreign)” 클래스의 하위 클래스를 만들 때 생기는 문제점을 설명하고 있다. 그렇다면 계승을 위한 설계와 문서를 갖춘다는 것은 어떤 의미일까?


우선, 메서드를 재정의하면 무슨 일이 생기는지 정확하게 문서로 남겨야 한다. 다시 말해, 재정의 가능 메서드를 내부적으로 어떻게 사용하는지(self-use) 반드시 문서에 남기라는 것이다. public이나 protected로 선언된 모든 메서드와 생성자에 대해, 어떤 재정의 가능 메서드를 어떤 순서로 호출하는지, 그리고 호출 결과가 추후 어떤 영향을 미치는지 문서로 남기라는 것이다. (재정의 가능하다는 것overridable은 public 또는 protected로 선언된 비-final 메서드라는 뜻이다.) 좀 더 일반적으로 이야기하자면, 재정의 가능 메서드가 호출되는 모든 상황을 문서로 남기라는 것이다. 예를 들어, 후면(background) 스레드가 호출할 수도 있고, static 초기화 구문(initializer) 안에서 호출할 수도 있다.


관습적으로, 재정의 가능 메서드를 어떤 식으로 호출하는지는 메서드 주석문 마지막에 명시한다. 주석은 “이 구현은”이라는 문구로 시작한다. 릴리스에 따라서 달라질 수 있다는 뜻으로 하는 말은 아니며, 메서드 내부 동작 원리에 관한 주석이라는 뜻이다. 아래에 java.util.AbstractCollection 명세에서 가져온 예제를 보였다.


170페이지, 규칙 26 관련 본문도 한번 보겠습니다.


컴파일러는 프로그램의 형 안전성을 입증할 수 없을지 모르지만, 프로그래머는 할 수 있다. 무점검 형변환(unchecked cast)을 하기 전에 개발자는 반드시 그런 형변환이 프로그램의 형 안전성을 해치지 않음을 확실히 해야 한다. 위에서 문제가 되고 있는 배열 elements는 private 필드이고 클라이언트에 반환되지 않으며 다른 어떤 메서드에도 전달되지 않는다. push 메서드에 전달되는 원소만이 배열에 저장되며, 그 타입은 전부 E다. 따라서 무점검 형변환을 해도 아무런 문제가 없다.


무점검 형변환이 안전함을 증명했다면, 경고를 억제하되 범위는 최소한으로 줄여야 한다(규칙 24). 위의 예제의 경우, 생성자에 있는 코드라고는 무점검 배열 생성을 하는 코드가 전부이므로 생성자 전체적으로 경고를 억제해도 무방하다. 경고를 억제하는 어노테이션을 추가하고 나면 Stack 클래스는 아무 문제없이 컴파일 될 것이며, 명시적인 형변환이나 ClassCastException이 발생할 걱정없이 사용할 수 있게 된다.


Java 1.8이 공개된 시점이지만, 이 책의 많은 부분은 아직도 유효한 교훈들을 담고 있습니다. 최신 Java와 많이 달라진 부분에는 제한적이지만 주석이 달려 있어서, 1.8에서 해결된 것이 무엇인지 살펴볼 수 있도록 약간의 배려도 하고 있습니다.


저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 지나가던개발자

    예로 보여주신, Item17대목요...

    Inheritance를 계승이라 번역하시고, foreign class를 '이질적 클래스'라고 하셨는데..
    inheritance는 이제 '상속'이라는 말로 통용되고,
    foreign class는 이전 아이템(16)의 주제를 보면 '패키지 외부의 클래스' 정도로 이해되는데..

    다른 의도가 있으셨던 건가요?

    2014.09.22 15:19 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 내가 설계하지 않은 클래스라는 의미를 좀 더 잘 전달할 용어를 찾았던 것인데, 지금 다시 살펴보니 좀 오버한 것 같기도 합니다. 그래서 가급적이면 영어 원문을 병기하였사오나, 혼란이 있으셨다면 사과드립니다.

      2014.09.24 11:54 신고 [ ADDR : EDIT/ DEL ]
  2. 여전히 지나가는 개발자

    2017년임에도 이 책을 가지고 스터리를 하고 있습니다. 몇몇 오타가 보이는데 오정표가 따로 있는지요? 아니면 재판계획이 있으신지요? 워낙에 명저라 관심이 많습니다.

    2017.03.19 17:54 신고 [ ADDR : EDIT/ DEL : REPLY ]

Thoughts2013.10.11 08:30

트위터를 다양한 용도로 사용하는 사람들이 많습니다만(http://mashable.com/2013/10/10/twitter-creative-uses/), 오늘 소개해드릴 사용법은 그 가운데서도 가장 '기술적'인 사용 방법이라고 할 만 합니다. 이 기술은 센서와 네트워크, 그리고 트위터를 조합한 기술입니다. 화분에 언제 물을 주는 것이 좋을지 잘 모르시겠다구요? 그럼 이 키트를 화분에 설치해 보세요. 이른바 Botanicalls Kit입니다. (http://www.botanicalls.com/kits/)



Botanicalls KitBotanicalls Kit



이 기술은 원래 휴대전화와 연동하여 화분에 물을 줘야 하는 시점이 되면 휴대전화로 메시지를 보내주는 기술이었는데, 지금은 트위터 메시지를 보내줍니다. (헐)






자세한 기술적 사항이 궁금하신 분들은 이 링크를 방문해 보시면 되겠습니다. (http://www.botanicalls.com/archived_kits/twitter/) 그러나 기술개요가 궁금하신 분들을 위해서 간단히 요약해보자면 (1) 센서를 이더넷 포트가 달린 네트워크 카드에 연결하고(사실은 아두이노 카드입니다) (2) 센서와 네트워크 카드를 연결하고 (3) 네트워크 카드를 프로그래밍합니다. 따라서 약간의 아두이노 지식이 필요한데요.



내 집 프로그래밍하기!내 집 프로그래밍하기!



아두이노 지식을 활용해서 화분과 소통하고 싶으신 분들은, 인사이트에서 출간된 아두이노 관련 서적들을 살펴보시는 것이 어떨까요? 아래 링크에서 구경하실 수 있습니다. http://www.insightbook.co.kr/?s=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8



저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Extremely Agile/General2013.10.07 09:11

아마 대부분의 개발자들은 둘 중 하나일 겁니다. 오픈 소스를 쓰고 있거나, 아니면 오픈 소스를 개발하고 있거나. 물론 오픈 소스를 사용하기만 하는 개발자들이 대부분이겠죠. 오픈 소스 소프트웨어 개발에 직접 관여하는 사람은 드뭅니다. 


그런데 최근 개발자들 사이에서는, 오픈 소스 프로젝트에 참여하는 것이 능력치를 올리는 좋은 방법일 뿐 아니라, 좋은 직장을 구하는 방법이 될 수 있다는 것에 공감대가 형성되고 있습니다. Netty 프로젝트를 진행한 이희승씨의 사례는 귀감이 되고 있죠. (관련기사 참조: http://article.joins.com/news/article/article.asp?total_id=9364915&cloc=olink|article|default


최근, 인사이트(www.insightbook.co.kr)에서 대한민국 오픈소스 개발자들과의 인터뷰를 모은 책을 내려고 준비하고 있다고 합니다. (http://www.insightbook.co.kr/post/6600 참조) 잘 엮여지면 오픈소스 개발자를 꿈꾸는 많은 사람들에게 좋은 참고서가 될 법 한데요. 책으로 묶이기 전에 현재 책 내용의 일부, 그러니까 대담 가운데 일부가 온라인으로 공개되고 있습니다. http://osdi.insightbook.co.kr/ 로 들어가 보시면 내용을 확인하실 수 있습니다. 


최근 저도 오픈 소스 프로젝트를 진행하고 GItHub를 통해 공개하는 작업을 하고 있어서, 관심있게 지켜보고 있습니다. 오픈소스 개발을 꿈꾸는 다른 분들께서도, 진행 상황을 지켜보시면 좋을 것 같아요. 


제가 진행하고 있는 오픈 소스 프로젝트는 SDN (Software Defined Networking) 컨트롤러에 관한 것으로, 현재 http://openiris.etri.re.kr 에 공개되어 있습니다. Openflow를 사용한 네트워크 제어 기술에 대해서 관심 있는 분들께서는 둘러보시면 좋을 것 같네요. 






저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 오픈IRIS

    질문드려요 IRIS를 해보려고 하는데 튜토리얼봐도 잘 모르겠어요 알려주실수있나요?
    설치까지는 했는데.. 그다음부터는 잘 안되네요

    2014.08.26 15:57 신고 [ ADDR : EDIT/ DEL : REPLY ]

Extremely Agile/General2013.09.22 21:05


GitHub가 오픈소스 공유 플랫폼으로 각광받으면서 덩달아 Git 또한 버전 콘트롤 시스템으로 각광받는 분위기인데요. Git은 처음에 배우기가 그다지 만만치 않습니다. SVN이나 CVS 쪽에 다양한 경험이 있어도, 배우기가 썩 편하지 않습니다.


하지만 다음 참고자료들을 '순서대로' 일별하면 쉽게 능통해 질 수 있습니다. 


1. Git 간편 안내서 - 어렵지 않아요!


http://rogerdudler.github.io/git-guide/index.ko.html





슬라이드 쇼 형식으로 필수적인 Git 명령어들을 아주 알기 쉽게 설명합니다. 여기 소개된 명령어들만 알아도 일단 Git을 시작할 수 있죠. 


2. Git Cheat Sheet


Git의 명령어들을 일목요연하게 정리해 놓은, 일종의 참조표입니다. 


http://www.insightbook.co.kr/wp-content/uploads/2013/04/git-%EC%B9%98%ED%8A%B8%EC%8B%9C%ED%8A%B8%ED%94%84%EB%A6%B0%ED%8A%B8.png





3. Git Book - 가장 자세한 Git 안내서


이렇게 해서 감 잡기가 끝나고 사용 경험이 붙었다면, 이제 좀 더 깊이 있게 공부할 순서입니다. 


http://git-scm.com/book/ko


뭐니 뭐니 해도, 이 온라인 안내서만큼 친절하고 자세한 교제는 아직 없죠. '인사이트' 출판사에서 'Pro Git'이라는 제목의 도서로도 출간되어 있습니다. 책을 구입해서 보셔도 좋겠어요. 사실 위의 참조표는 이 책의 부록이에요. 




저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 사랑을구걸하는거지

    정말 좋은 정보 감사합니다.

    2013.09.23 11:42 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 오..이런 자료를 찾고 있었는데..감사합니다!

    2015.10.12 11:21 신고 [ ADDR : EDIT/ DEL : REPLY ]

Thoughts2009.06.14 21:50
작년 말에 시작하기로 했던 FIT 번역을 올해 초에 시작해서 오늘 밤에 출판사로 넘겼다. 당초에 약속했던 기한은 아마 두달가량 화끈하게 오바한듯... ㅎㅎ

약속은 중요한데 잘 지키지 못하는 일이 생긴다. 그 약속에 얽힌 당사자들에게는 항상 미안하고 죄송스럽다. 그 분들은 애써 태연하게 '괜찮습니다'라고 하는데, 그 말 뒤에 때로 이해 대신 짜증과 분노가 섞이기도 한다는 사실을 잘 안다.
 
돌이켜 보면 이런 저런 약속들을 참 많이도 어기며 살았다. 능력 부족 탓에 벌어지는 일이기도 하고 (빈약한 기억력 탓에 놓친 약속만 해도 대체 몇 건인가) 내가 나쁜 인간이라 벌어지는 일이기도 하다. 그래도 항상 앞으로는 그러지 말아야지... 하고 다짐하게 된다. 이 지면(?)을 빌어, 필자가 깬 약속 때문에 열받았던 모든 분들에게 고개숙여 사죄드린다.

사용자 삽입 이미지


FIT과 관련해서 베타리더 몇 분에게 민망한 초고를 검토해 주십사 죄송한 부탁을 드렸다. 그 중 네 분 께서는 진작에 답을 주셨다. 역시 이 지면(!)을 빌어 감사드린다. 하지만 다른 두분께서는 아직 아무런 답도 주고 계시지 않고 계신다. 그 두 분 께는, 이제 원고도 넘겨 버렸으니 부담은 털어버리시고 책의 출간을 즐거운 마음으로 기다려 주십사 말씀드리고 싶다.
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Languages/JavaScript2008.10.02 16:18

어제 "프로그래밍 jQuery" (인사이트. 원제 jQuery in Action)를 완독했습니다. 개인 프로젝트로 시작한 웹 사이트 구축에 필요할까 해서요. 이 책을 읽으면서 존 레식의 "프로 자바스크립트 테크닉"을 띄엄띄엄 보기도 했는데, 자바스크립트라는 언어와 자바스크립트 라이브러리에 대해 새로운 것을 깨달은 느낌입니다.

"프로그래밍 jQuery"라는 책의 최대 강점은 굉장히 알기쉽게 쓰여져 있고, 예제가 잘 구축되어 있다는 점입니다. 예제 파일들이 하나로 패키징되어 있는데, 덕분에 예제를 참고하고 공부하기가 쉽습니다. 프로그래밍을 배우는 사람들이 쉽고 잘 짜여져 있는 예제에 목마르다는 점을 감안한다면, 아주 대단한 장점이라고 할 수 있겠습니다. 거기다 설명까지 잘 되어 있으니, 금상첨화라고도 할 수 있겠죠.

사용자 삽입 이미지

그런데 이 책이 갖는 그런 장점은 jQuery라는 라이브러리가 갖는 장점 때문에 생기는 것이기도 합니다. jQuery 라이브러리는 일관된(consistent), 잘 조직되고(well-organized) 잘 짜여진(well-written) 라이브러리거든요. 사용법도 간단해서 (복잡하게 사용하는 것도 물론 가능하겠지만 말입니다) 프로그래머가 신경쓸 일이 대폭 줄어듭니다.

jQuery가 오랫만에 만나는 잘 짜인 라이브러리라고 한다면, 이 책은 그야말로 오랫만에 읽어보는, 모든 면에서 균형이 잘 잡힌 책입니다. 번역까지도요.

신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Thoughts2008.04.07 11:03
인사이트의 신간, "소프트웨어, 누가 이렇게 개떡같이 만든거야"는 부제가 보여주는 대로, "사용성을 제대로 이해하는 유쾌한 통찰"에 관한 책입니다.

예전에, (그게 대학시절이니 십년도 더 넘은 일입니다) 마이크로소프트 프레스에서 출간된, 윈도우 프로그램의 사용자 인터페이스에 관한 책을 읽은 적이 있습니다. 사용자 인터페이스를 어떻게 설계해야 하느냐는 문제에 관한 책이었죠. 안타까운 것은, 그 책에서 프로그램의 사용성에 대한 쓸만한 이야기는 거의 찾아볼 수가 없다는 점이었습니다.

이 책에는, "일반적인 프로그래머들은 알지 못하는" 사용성에 대한 문제들이 풍부하게 담겨져 있습니다. 그리고 그런 문제들을 바라보는 저자의 식견도 풍부히 접할 수 있지요. 어조가 좀 냉소적이긴 합니다만, 그게 큰 흠이 되지는 않습니다. 사실 시중에는 "개떡같은" 인터페이스를 가지고도 장사를 하는 "개떡같은" 프로그램들이 꽤 많거든요.


이 책의 백미는 "사용자는 웹 사이트를 사용하기 위해 로그인을 할 수 있다"는 단순한 스토리를 웹 사이트들이 어떻게 구현하고 있고, 그 결과물들이 보여주는 문제들로 어떤 것이 있는지를 설명하는 부분입니다. 아이디와 패스워드를 입력하고 로그인하는 것은 꽤나 간단한 절차인 것 같습니다만, 그 이면에는 사용성에 관한 문제들, 보안성에 관한 문제들, 정치적/경제적 문제들까지 꽤나 복잡하고 까다로운 문제들이 숨어 있습니다. 최선은 모든 사람들이 비밀번호를 웹 사이트별로 달리 관리하는 것이 되겠습니다만, 사람은 그렇게 많은 패스워드를 어떤 패턴 없이도 기억할 수 있을 만큼 부지런하지는 못하다는 것이 문제입니다. 결국 그래서 "마이크로소프트 패스워드"같은 솔루션이 등장했습니다만, 아시다시피 실패했습니다. 이 기술은 궁극적으로는 모든 사람들이 원하는 기술이 될 뻔 했습니다만, 사람들은 마이크로소프트라는 공룡이 개인 정보까지 통합적으로 관리하는 것을 원하지 않았습니다.

자세한 내용은 책을 읽어보셔야겠습니다만, 저자는 결국 이 모든 문제들을 해결하는 해법은 "고객의 관점"에서 나와야 한다고 역설합니다. 고객은 소비자인데, 지금껏 소비자들은 거지같은 소프트웨어에 대해서만큼은 큰 목소리를 내지 못해 왔습니다. 고객은 왕이라는 흔한 모토가 소프트웨어에서 만큼은 그다지 먹히지 못한 것이죠.

물론, 거지같은 소프트웨어를 내놓는 회사는 망합니다. 망하지 않더라도, 손해를 보긴 합니다. 소프트웨어라는 것은 기업의 운영 효율성을 증진시키기 위해 사용되기도 하는데, 거지같은 소프트웨어는 그런 점에서 전혀 도움이 안되거든요. 그렇게 보면 "왜 우리가 굳이 소프트웨어의 사용성에 대해 불평을 해야 하느냐"는 질문도 나올수 있겠습니다만, 조금만 생각해 보면 문제가 그렇게 단순하지만은 않다는 것을 알 수 있습니다. 최악의 경우, 사용성 면에서 거지같은 일군의 소프트웨어들 가운데 "그나마 나은" 하나를 골라 써야만 하는 일이 생길 수도 있거든요.

어떤 한 회사가 시장의 대부분을 점유하고 있는 상황에서는, 그런 거지같은 인터페이스를 울며 겨자 먹기로 써야만 하는 일이 빈번히 벌어질 수 있습니다. 이 책에서 마이크로소프트 라는 거대기업을 빈번히 언급하고 있는 것은 아마 그래서 일 것입니다. 그런 면에서 본다면, 소프트웨어의 사용성을 개선한다는 행위는 고객과 생산자간의 단순한 피드백 고리를 넘어서는 모종의 경제적/정치적 투쟁으로까지 확대 해석될 수도 있습니다.

하지만 그런 거창한 해석에 넋놓고 있어서는 문제가 해결이 안되겠죠. 결국 이 문제를 해결하는 방법은, 계몽입니다. 개발자를 계몽시켜야 하고, 사용자를 무시하는 기업을 계몽시켜야 하죠. 저자는 다음과 같은 해결책을 제시합니다. 냉소적이지만, 먹힐 것 같지 않습니까?

[전략] ... 따라서 다음번에 개떡같이 설계된 사용자 인터페이스를 보면 잠시 멈추고 살펴보십시오. 잠시 가지고 놀면서 프로그램이 왜 마음에 안들고 어떻게 개선할 수 있을지, 정확하게 특정 부분을 콕 찍어 생각해 보기 바랍니다. 그리고 이런 목적을 위해 있는 '부끄러움의 전당(Hall of shame)' 웹 사이트에 개떡같은 설계에 대한 글을 올리는 겁니다. 이 책의 웹 사이트인 www.whysoftwaresucks.com 이 좋은 시작이 될 수 있습니다. 그러고 나서 애플리케이션 개발사에 메일을 보내 당신의 평가를 볼 수 있게 알려줍니다. 더 바보 같은 것을 찾아낼 수록, 그게 공개되는 것에 더 크게 당황할 것입니다. 그리고 결국은 사용자가 자신들과는 다르다는 것을 이해하게 될 것입니다.
번역서입니다만, 이 책의 번역은 IT 서적 답지 않게 유쾌합니다. 요령부득인 문장도 적은 편이고, 무엇보다 쉽게 읽어내려갈 수 있다는 점에서 마음에 듭니다. 사용성에 대한 통찰을 가벼운 마음으로 얻고자 하는 분이라면, 한번 읽어보시는 것이 좋겠습니다.



신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 한번쯤 읽어볼만한 책이네요. 좋은 책 소개해주셔서 감사합니다. ^^

    2008.04.10 23:05 신고 [ ADDR : EDIT/ DEL : REPLY ]