EJ2E Item 15. 변경을 최소화하라

참조: Effective Java 2nd Editio Item 15: Minimize mutability

자바에는 다양한 Immutable 클래스들이 있는데, 그 이유는.. 불변 클래스가 변하는(mutable) 클래스보다 설계하고 구현하고 사용하기 쉽기 때문이다.

불변 클래스를 만드는 다섯 가지 규칙
1. 객체의 상태를 바꾸는 메소드를 제공하지 말라.
2. 클래스를 확장할 수 없도록 해라.
3. 모든 필드를 final로 하라.
4. 모든 필드를 private으로 하라.
5. 변경 가능한 요소에는 상호 배타적으로 접근하도록 하라.(불변 클래스가 변하는 필드를 가지고 있을 때, 클라이언트가 해당 객체에 대한 레퍼런스를 가지지 못하게 하라. defensive copies를 생성자나 aceessor에서 만들고 readObject 메소드를 만들어라. @_@)

별로 안 간단해 보이는데;;; 간단하데요

불변 객체는 당연히 쓰레드-세이프 하다. 따라서 동기화 필요 없다. 자유롭게 공유해서 쓰면 된다.

단점은 매번 별도의 객체를 필요로 한다는 것이다. 비싼 객체는 좀.. 글켔군요.

상속을 막는 방법이 클래스를 final로 만드는 거 말고 좀 더 유연한 방법이 있다. 모든 생성자를 private 또는 package-private으로 만들고 public static 팩터리를 만드는 거다. 같은 패키지에서는 상속해서 다양한 구현체를 만들 수 있지만 해당 패키지 밖에서 참조할 땐 final 클래스와 마찬가지니깐… 오호.. 천젠데;;

어떤 클래스를 불편 불변 클래스로 만들어야 할까? 고민해본 적이 없네… 집에 가면서 생각해보자.. 굳이 바뀔 필요가 없는 클래스도 필요 없이 setter를 전부 만들진 않았을까..

번역 품질을 높이는 방법?

전 잘 모릅니다. 번역을 꾸준히 하고는 있지만 잘 한다고 생각하지도 않으며 잘 하려고 연구를 해보지도 않았습니다. 그럴 시간에 하나라도 더 번역을 해야하기 때문에… 그래도 한 번 생각난 김에 정리해보면 다음과 같습니다.

먼저 번역하는 사람의 문장력이 좋아야 합니다. 번역자가 문장력이 좋고 한글 표현을 잘 사용할 줄 안다면 그만큼 품질 좋은 번역 기사나 번역서가 나올 겁니다.

다음으로 번역자가 영어를 감당할 수 있어야 합니다. 영어를 잘 몰라도 주변에 영어를 잘 알고 있는 친구나 사전을 이용해 가면서 문맥에 비슷한 표현이 나오도록 할 수 있어야 합니다. 기술 서적 중에 쉬운 책들은 중학교 수준 영어 실력만 있어도 번역이 가능하죠.

세번째로는 번역하려는 내용을 알고 있어야 합니다. 저 같은 경우 짧은 글을 번역할 때는 이 규칙은 보통 무시합니다. 새로운 기술이 알고 싶어서 번역할 때도 있거든요. 대신 책이나 레퍼런스 같이 분량이 많아서 일관성이 있어야 하고 어떤 기준이 필요할 때는 해당 기술을 얼마나 잘 이해하고 있는가가 번역 품지을 좌우하기도 합니다. 실제로 제가 메이븐을 하나도 모를 때 메이븐 튜토리얼을 번역한 적이 있는데.. 요즘 들어 가끔보게 되면 민망해 죽을 지경입니다.

네번째로는 재벌이 중요합니다. 다시 한 번 전체 내용을 읽어보면서 날림 번역으로 어색한 문장이나 문맥에 맞지 않는 내용이 눈에 띄면 다시 원문과 비교해서 손보는 작업입니다. 이 작업을 하면서 자신이 읽어도 이해가 된다. 싶을 정도면 일단 OK 입니다. 저는 보통 짧은 글은 재벌도 잘 하지 않는 편입니다. 짧은 글은 애초에 처음 번역할 때 날림 번역을 하지 않고 문맥에 맞추면서 하기 때문에 자잘한 오타와 한 두 문장을 고쳐야 하는데 시간을 소비하고 싶지 않아서 입니다.

마지막으로는 번역을 꾸준히 해서 감을 잃지 말아야 하는건데 이건 잘 지키고 있습니다. 꾸준히 하다보면 비슷한 문장이 등장했을 때 번역 패턴이 생기기도 하고 더 좋은 한글 표현이 떠오르기도 합니다. 예를 들어 오늘 GMP를 듣다가 알게 된건데 All I want for cristmas is you 같은 경우. “내가 크리스마때 원하는 전부는 너야.” 라고 All 을 곧이 곧대로 번역하는 거 보다 “내가 크리스마스때 원하는 건 오직 너 뿐이야.” 라고 All의 의미를 반전시키면 훨씬 깔끔한 문장이 되는거죠. 이런 건 꾸준히 하다보면 하나 둘 씩 생기는 스킬 같은 거라고 생각합니다.

어쩃거나.. 결론은 번역 품질을 높이려면 번역자가 번역을 잘 해야 한다는 거… 그렇지 않고 베타리딩에 모든 걸 건다?? 글쎄요. 저 같은 경우 베타리딩 할 때 품질이 영 아니면 대충 해버리거나 중간에 포기해버립니다. 베타리더가 돈을 받는 것도 아니고 명예가 생기는 것도 아닌데 감수자나 번역자 역할을 대신 해줄 순 없으니까요.

20081223 GMP

News

lay off 임시 해고

When people are loosing their jobs, being layed off, uncirtain about what the economy is going to bring, they turned to higher education.

Movie

마스터: I need your help master.
사부: No. you just need to believe. Promise me sifu. Promise you’ll believe.
마스터: Good. My time has come. You must continue your journey without me.
사부: What what wa wa wa. Master you can’t leave me.

Song

I just want you for my own more that you could ever know.
Make my wish comes true. All I want for cristmas is you.

Expression

Do you have any ~?
Do you have any luggage?
Do you have any vacancy?
Do you have any change?
Do you have any questions?
Do you have any good ideas?
Do you have any suggestions?
Do you have any specific plans?
Do you have any special reasons?

이번 주 할 일

이번 주는 크리스마스에 보트 타러 갈 거고 주말에도 보드  타러 갈지 모르기 때문에 일정이 완전 빠듯해.. 정신차려 백기선. 다 할 수 있어!!! 파이팅!!

이번 주에 매일 할 일
– GMP(, , 목, 금, 토, 일)
– EJ2E(, 수, 목, 금, 토, 일)
– 홀럽 온 패턴(화, 수, 목, 금, 토, 일)
– 피아노 연습(, 수, 목, 금, 토, 일)
– 큐브 연습(화, 수, 목, 금, 토, 일)

화(23)
유지보수 적용
레거시 분석
게시판 코드 완성
피아노 이번 주 레쓴 미루기
Pro Spring 2.5 재벌
– IBM DW 기사 번역
시즌권 구매
시즌방 예약
아래 고민 해결해야 함

수(24)
레거시 분석
IBM DW 기사 번역 완료
보드 장비 구입
보드 타러 ㄱㄱ

목(25)
– 보드 당일 치기.

금(26)
– 레거시 분석
– Pro Spring 2.5 재벌

토(27)
– 보드 당일 치기
– Pro Spring 2.5 재벌

일(28)
– 스터디에서 게시판 마무리
– Pro Spring 2.5 재벌 마무리
– IBM DW 기사 번역 마무리

잠깐 정리 좀;;

주업
– 레거시 분석
– 유지보수

부업
– Pro Spring 2.5 번역
– Java Persistence with Hibernate 번역
– IBM DW 기사 번역(한 달에 2~3개)
– 스크린캐스팅 한 달 걸러 하나씩

학습
– GMP
– 게시판 만들기
– 스프링 웹 플로우
– 스프링 배치
– Grails
– Effective Java 2nd
– 홀럽 온 패턴

취미
– 피아노
– 큐브
– 스노우보드

주업

레거시 분석
– 새 프로젝트가 레거시 시스템과 비슷하기 때문에 거의 완벽하게 분석해야 함.
– 도메인 모델의 주요 속성과 관계를 UML로 그리기(주요 영역 별로 쪼개서.)
– 주요 비즈니스 로직 분석하기

유지보수
– 구현은 끝났으니까 적용하고 실무자에게 확인 받기

부업

Pro Spring 2.5 번역
– 이번 주 내로 맡은 부분 재벌 마치기

JPWH 번역
– 이건 당분간 신경 못 씀. Pro Spring 2.5 끝나면 다시 시작.

IBM DW 기사 번역
– 이번 주 내로 기사 하나 번역 해야 함.

스크린캐스팅
– 2월에 올라갈 거니깐 아직 급하진 않지만 미리 주제 선정하고 학습해 둘 것.

학습

GMP
– 매일 하나씩 들으면서 요약 정리.
– MP3 받아서 귀에 꽂고 다니기.
– 친구한테 써먹기.

게시판 만들기
– 이번 주말 스터디에서 마무리.
– 그전까지 페이징만 구현.

스프링 웹 플로우
– 게시판 예제 코드 가지고 하나씩 해보기.
– 새 프로젝트 적용할 수 있을 정도로만 해두자.
– 대충 1월 ~ 2월 사이에.
– 이걸 주제로 스크린캐스팅을 제공하는게 좋겠다.

스프링 배치
– SWF랑 마찬가지.

Grails
– 아직 대책 없음.

EJ2E
– 매일 한 아이템씩 정리.

홀럽 온 패턴
– 자기 전에 한 챕터씩 읽고 자기.

취미

피아노
– 학원은 이제 그만. 이번 달이 마지막 레쓴.
– 하농, 체르니 꾸준히.
– 하고 싶은 곡 하나씩 마스터.

큐브
– F2L 출력해서 출 퇴근 길에 마스터 할 것.

스노우보드
– 그냥 한 번 질러 보자.
– 지금 아니면 언제 해보겠어.