본문 바로가기

[Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. Cloneable 인터페이스는 복제를 허용하는 객체라는 것을 알리는 목적으로 사용하는 믹스인 인터페이스(mixin interface) 아무런 method도 없는 Cloneable 인터페이스는 어디에 쓰이는 것일까? 이 인터페이스는 Object 클래스의 protected 메소드인 clone의 행동 방식을 규정한다. 만약, clone 메소드가 호출된 객체가 Cloneable 타입이라면, Object.clone 메소드는 이 객체의 모든 필드를 그대로 복사한 복제본을 리턴한다. 하지만 Cloneable 타입이 아니라면 CloneNotSupportedException을 던진다. java.lang.Object.clone의 명세(Sp..
[CouchDB] Apache CouchDB 0.10.0 이 나왔답니다. Apache CouchDB가 0.9.1버젼에서 0.10.0 버젼으로 뛰었다. 11시간전에 DAMIEN KATZ 블로그에 올라왔다. 이번 버젼 개선사항은 Added modular configuration file directories. Miscellaneous improvements to build, system integration, and portability. 이렇다고 한다. 조금 더 편리하게 만들기 위해 노력한 것 같다. 그 외에도 Show와 List API에 변화가 생겼다. 자세한 건 좀 더 살펴봐야겠다.
소니 알파 550 광고 속 '김영갑 갤러리' 개인적으로 소니 카메라를 써보지 않아서 잘 모르지만, 소니의 광고는 참 좋아한다. 카메라 자체를 좋아하게 만드는 광고와 배경음악 선곡도 참 좋고, 또! 소지섭이 나오니깐~ 이번에 새로 나온 준중형급 DSLR인 알파550 광고가 내가 제일 존경하는 사진작가 김영갑 작가님의 일생이 담긴 용눈이오름에서 촬영되었다. 역시 이번에도 실망시키지 않는다. 간접적으로나마 광고 속 김영갑 작가님의 사진을 볼 수 있어서 좋고, '내가 좋아하는 작가가 그 소니 광고에 나오는 그 작품을 찍는 작가분이셔~' 라고 주위사람들에게 말할 수도 있으니.. 광고를 한번 봐볼까? 출처 : http://alpha.sony.co.kr/event/a550/index.html 메이킹 필름 '소지섭, 김영갑을 말하다' 알파 550 관심을 갖고 구..
[CouchDB] HTTP view API CouchDB wiki에 있는 내용을 보고 정리한 내용입니다. 제가 하고싶은걸 실습한 것이기 때문에 삭제된 내용도 있습니다. view(뷰)는 Couch document를 쿼리하거나 리포팅할때 사용되는 주요툴이다. 뷰는 자바스크립트 function으로 정의된다. function(doc) { emit(null, doc); } Creating Views permanent view를 만들기 위해 function은 특별한 design document에 먼저 저장되어 있어야 한다. design document의 id는 _design으로 시작하고 view attribute는 map과 optional하게 reduce를 갖는다. design document의 모든 view는 index되어 있다. design docume..
[Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. Java API Object.hashCode 메소드 spec에 명시 - 애플리케이션 실행 중에 같은 객체에 대해 한 번 이상 호출되더라도 hashCode 메소드는 같은 정수를 일관성있게 반환해야 한다. - equals(Object) 메소드 호출 결과 두 객체가 동일하다면, 두 객체 각각에 대해 hashCode 메소드를 호출했을 때 같은 정수 값이 나와야 한다. - equals(Object) 메소드 호출 결과 두 객체가 다르다고 해서 두 객체 각각에 대해 hashCode 메소드를 호출했을 때 반드시 다른 정수 값이 나올 필요는 없다. 그러나 같지 않은 객체들에 대해 hashCode 메소드에서 서로 다른 정수 값을 ..
[Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. equals메소드를 오버라이드 하지 않고 써야할때 - 클래스의 각 인스턴스가 본래부터 유일한 경우 - 두 인스턴스가 논리적으로 같은지 검사하지 않아도 되는 클래스의 경우 - 수퍼 클래스에서 equals를 이미 오버라이딩 했고, 그 메소드를 그대로 사용해도 좋은 경우 - private나 패키지 전용 클래스라서 이 클래스의 equals 메소드가 절대 호출되지 않아야 할 경우 그럼 언제 해야하나? 객체 참조만으로 인스턴스의 동일 여부를 판단하는 것이 아니라, 인스턴스가 갖는 값을 비교하여 논리적으로 같은지 판단할 필요가 있는 클래스로써, 자신의 수퍼클래스에서 equals 메소드를 오버라이드하지 않았을 때다. 일반적으로 값(value) 클래스..
[Effective Java] 5. 불필요한 객체 생성을 피하자 5. 불필요한 객체 생성을 피하자 불변(immutable) 객체는 항상 재사용가능하다. String s = new String("buri"); 이렇게 쓰지 말고 String s = "buri"; 이렇게 쓰자는거 실행될 때마다 새로운 인스턴스를 생성하지 않고 하나의 String 인스턴스를 사용하며 같은 JVM에서 실행되는 어떤 코드에서도 동일한 문자열 리터럴(literal)을 갖도록 재사용될 것이다. 불변 클래스의 불필요한 객체 생성을 막으려면 생성자보다는 static 팩토리 메소드를 사용하는 것이 좋다. 생성자인 Boolean(String)보다는 static 팩토리 메소드인 Boolean.valueOf(String)을 사용하는 것이 더 좋다. 생성자는 호출될 때마다 새 객체를 만드는 반면, static ..
[Windows] Vista에서 명령프롬프트창의 글꼴 바꾸기 Vista에서 기본으로 제공해주는 글꼴이 영~ 맘에 들지않아, 구글링을 해보니, 역시나 맘에 안드는 사람이 많나보군요. 간략하게 정리해보자면, 한글 Vista인 경우!!!를 전제로, 실행(Run) -> regedit 명령어를 치면 레지스트리 편집가능하게 되고 HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont 경로로 가서 키가 949인 변수의 값을 바꿔준다. (원하는 글꼴로, 글꼴은 이미 설치되어있어야겠죠~) 그리고 재부팅하면 끝~ 저는 한글 Vista인데 영문 Vista인 경우의 글을 따라해서 자꾸 실패했는데, 그거에 따라 키가 다릅니다.(아마도~) 자세한 건 여기를 참고하세요. 정리가 잘 되어있는듯 해요~
[Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 static 메소드나 static 필드만을 모아 놓은 클래스를 만들필요가 있는 유틸리티성 클래스는 인스턴스 생성이 무의미하다. 그러나 그런 클래스라도 명시적으로 지정한 생성자가 없을때 컴파일러가 디폴트 생성자 (public 이며 매개변수가 없는)를 만들어주기 때문에 javadoc 프로그램으로 생성하는 API 문서에도 나타나기 때문에 인스턴스 생성이 가능한 클래스로 오인될 수 있다. 생성자 호출을 통한 인스턴스 생성을 방지하고 API 문서에도 나타나지 않도록 하려면? private 생성자를 정의하면 인스턴스 생성이 불가능한 클래스를 만들 수 있다. public class UtilityClass { //이 클래스는 인스턴스 생성이 불가능하다라..
Eclipse Galileo에 어떤 프로젝트가 있을까? Eclipse Galileo가 릴리즈 된지 좀 되었다. 릴리즈가 되어 업데이트 할 때마다 어떤 프로젝트가 들어있는지 관심있게 살펴보지 않았는데, 이렇게 다양한 프로젝트들이 있구나.. dW에 있는 아티클을 보고 한번 알고 가는게 좋을 듯 하다. Eclipse Galileo 살펴보기최신 버전의 오픈 소스 다목적 IDE 및 애플리케이션 플랫폼의 새로운 기능 표 1. Galileo 릴리스 트레인 프로젝트 프로젝트 개요 웹 사이트 ACTF(Accessibility Tools Framework) 장애가 있는 사용자를 위한 애플리케이션 및 컨텐츠 개발 http://www.eclipse.org/actf/ BIRT(Business Intelligence and Reporting Tools) 보고서 생성 http://ww..
[Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. 싱글톤(singleton)은 정확히 하나의 인스턴스만 생성되는 클래스. 싱글톤은 본질적으로 유일한 시스템 컴포넌트를 나타낸다. 예를 들면, 윈도우 매니저나 파일 시스템 등 자바 1.5 이후 싱글톤 구현하는 가장 좋은 방법 //열거형( Enum) 싱글톤 public enum Elvis { INSTANCE; public void leaveTheBuilding() { ... } } 복잡한 직렬화나 리플렉션 상황에서도 직렬화가 자동으로 지원되고, 인스턴스가 여러 개 생기지 않도록 확실하게 보장해준다.
[Mac] Mac 에서 화면 캡쳐 단축키 유용하지만 별로 캡쳐할 일 없는 저로썬, 자꾸 까먹어서...포스팅합니다. 맥 OS 에서 캡쳐 단축키 shift + command + 3 : 전체화면 캡춰 shift + command + 4 : 부분 캡춰 파일은 바탕화면에 저장됩니다.
[Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. Static 팩토리 메소드와 생성자의 공통적인 제약은 선택 가능한 매개변수가 많아질 경우 신축성 있게 처리하지 못한다는 것인데, 흔히 나도 그러한데 텔리스코핑 생성자(telescoping constructor)패턴을 사용한다. 필수 매개변수들만 갖는 생성자, 필수 매개변수들과 선택 매개변수 하나를 갖는 생성자, 선택 매개변수 두개를 갖는 생성자 등등의 형태로 오버로딩을 통해 여러개의 생성자를 겹겹이 만드는 것이다. public class User{ private String id; private String pw; private String address; // .......15 more field public User(String id, String pw){ this(id, pw, null); } pu..
[Jersey] WebApplicationException and Mapping Exception to Responses 이전에 블로깅했던 2009/06/05 - [나만의 작업] - Jersey의 Exception Handling 에 대해 조금 더 자세히 블로깅을 해봅니다. Jersey에서 Excpetion Handling하는 방법들 1) WebApplication을 상속한 새로운 클래스인 NotFoundException을 생성하여 던지기 NotFoundException을 throw하는 예 Example 1.25. Throwing Jersey specific exceptions to control response 1 @Path("items/{itemid}/") 2 public Item getItem(@PathParam("itemid") String itemid) { 3 Item i = getItems().get(itemid..
[책] 나~ 밑줄긋는 여자야~ 밑줄 긋는 여자 - 성수선 지음/웅진윙스 위드블로그에서 신청받았던 책 "밑줄 긋는 여자". 제목이 참 신선하여 호기심에 간략하게 내용을 보았다. 내용을 본 순간 요즘 한창 책읽기에 재미붙인터라 더욱 의미가 있을것같아 신청하였는데 냉큼 당첨이 되었다. 아마 배송되고 삼일만에 책을 다 읽은 것 같다. 회사원인 작가는 어렸을때부터 독서를 좋아하는데 그동안 읽으며 감동받았던 글귀를 통해 자신의 인생을 돌아보고 많은 생각들을 풀어 적어놓았다. 처음엔 비슷비슷한 책이구나 생각했는데 점점 너무 공감되는 내용도 많고 다른 책의 글귀를 통해 삶의 다양성을 다시한번 고민하게 된듯하다. 최근에 많이 생각하는 고민들에 대해 '맞아~맞아~ 나만 그런게 아니구나' 하여 공감을 이끌어내기도 하고, 똑같은 상황에 다르게 생각하는구나..
[Jersey] Building URIs REST의 중요한 점 중의하나가 URIs이다. java.net.URI를 이용해서 URI를 만들고 쓰는 법은 쉽지 않다. 만약, baseUri로 "http://localhost:8080/base"가 있고, 여기에 상대경로를 다음과 같은 상대경로를 추가하고 싶다. "a:b;param=matrix/hello world" 그래서, "http://localhost:8080/base/a:b;param=matrix/hello%20world" 결과적으로 이런 URI가 되야 한다. java.net.URI를 이용해 이런 상대경로를 만들수가 없다. new URI("a:b;param=matrix/hello world"); new URI(null, null, "a:b;param=matrix/hello world", null);..
충무아트홀에서 느낀 두모악의 흔적.. 전에 올린 글중에 2009/05/13 - [책과 영화,음악이야기/책] - [책/사진] 그 섬에 내가 있었네 의 리뷰를 쓰면서 고 김영갑 작가의 유작전에 꼭 다녀오겠다는 말을 7월에야 겨우 실행에 옮겼다. 다녀오신분들의 이야기가, 작품의 수도 얼마 없고 두모악갤러리의 감동을 느낄수 없으리란 말을 들은 터라 큰 기대는 하지 않고 집을 나섰다. 모처럼 여유로운 일요일에 기대감을 안고 잠에서 일어났는데 천둥번개와 비가 무섭게 내리고 있었다. 나가면 고생하겠군... 이렇게 5분 생각하고 그래도 비에 꺾일수 없어! 하고 집을 나섰다. 충무아트홀은 집에선 지하철로 30분이내 거리여서 그나마 용기(?)를 낼 수 있었던 듯 하다. 사람이 꽤 있었다. 연인들도 많았고.. 그러나 조용한 가운데 이야기 소리 들리지 않는 분위..
[Jersey] Building Responses Jersey에선 Response를 다음과 같이 할 수 있다. POST 메소드인 경우의 예를 들면, Jersey에선 POST는 작업을 수행한 후 정상적으로 처리되면 201 상태코드를 리턴하고 Location Header에는 새롭게 생성된 리소스의 URI값을 리턴할 수 있다. 이렇게 자바의 내용이 이렇다면, @POST @Path("post") public Response post(String id) throws URISyntaxException{ URI createdUri = new URI("http://localhost:8080/user/" + id); create(id); return Response.created(createdUri).build(); } @POST @Path("postEntity") p..
내 시간 누가 훔쳐가나... 살아가면서 아직까지 답을 못찾고 있고 쉽게 찾아지지 않을 것 같은 주제가 있다. 그건.. "어떻게 시간을 도둑맞지 않을까?" 물론 나뿐만 아니라 전세계 많은 사람들이 고민하는 주제이기도 하겠지만.. 나의 하루가 너무 짧고, 언제 시간이 이렇게 흘렀지? 세월 참 빠르다...라는 말을 참 많이 하는 것 같다. 그말을 할 때마다 시간의 노예가 된듯 하고 시간이라는 녀석이 참.. 야속하기만 할 뿐이다. 요즘엔 해결책을 다른때보다 더 강구중이고, 그 시간이라는 녀석을 내것으로 만들기 위해 구애중이기도 하다. 언제까지 해야할지는 모르겠지만(아마 평생??) 그래도 매력적인 것 같아서 놓칠 수가 없다. 지난주에 도서관에서 여러책을 찔러보던 중 흔하디 흔하고 널리고 널린 시간관리에 대한 책을 속는 셈치고 집어들어봤다. ..
[Jersey] Representation and Java Types 참고 : Jersey 1.0.3 User Guide중의 내용 전에 올린 2009/06/02 - [나만의 작업] - JAX-RS @Produces와 @Consumes 에서 많이 본 Java type은 "String"인데, 거기서 본 String은 JAX-RS 구현을 지원하기 위해 필요한 많은 Java type들 중의 하나일뿐이다. Java type은 byte[], java.io.InputStream, java.io.Reader, java.io.File등이 있다. 게다가 JAXB beans도 지원해준다. 참고로 JAXB의 beans들은 JAXBElement나 @XmlRootElement 나 @XmlType라고 annotation 붙여진 클래스이다. Example 1.17. Using File with a s..