분류 전체보기
훗~
DSLR
Mac
Reference
private
java에 해당되는 글
2009.02.05
2008.12.22
2008.11.05

[Java] import static .. ..

초 간만에 
저도 Java 관련 포스팅..

코딩을 하다보면..
편의를 위해서 static keyword를 이용하는 경우가 많은데..

1. util method는 일단 static 깔고 들어가고
2. enum을 싫어하는 사람들은 여전히 constant 만들때 static을 즐겨 사용하고.. 
3. static class도 있고..

위에 열거한 방법은 일반적으로 많이 사용되는 것들이고.. 
(물론 절대 추천하진 않는다.. 특히, 1번의 남발은 괴롭다..;;)

Java 5.0부터는 심지어 import 에도 static을 붙여서 사용할 수가 있다
단순 편의를 위한 static 사용에 정점을 찍는 방법이 아닐까 한다..

초 단순 사용예는 다음과 같다.


평소 즐겨 사용하는 Math API를 사용하는 예제인데..
Static Field나 Method에 접근하려면 다음과 같은 문법으로 기술해야 한다.

{ClassName} + {.} + {Method | Field}

매번 사용하려는 API의 Class 명을 기술해야 하는 번거로움을 
위에서 말한 import에 static을 사용하면 
획기적으로 줄일 수 있다..


사용하려는 API를 import에 static을 이용해서 기술하면 된다.
만사 다 귀찮다면
와일드카드를 사용해보자..;;




동일한 Class의 static field나 method를 많이 참조한다면, 
이 방법은 코딩시 번거로움을 확실히 줄여준다.
특히, 내가 생각하는 최악의 코딩 패턴중 하나인 Constant interface 패턴을 억제할 수 있다.

하지만, 
이건 코딩의 수월함은 어디까지나 내가 혼자 작업할때 얘기이고..
만약, 많은 사람의 협업으로 작업이 이루어진다면..
(번거롭더라도) 일일이 다 때려넣는것을 추천하고 싶다.

남의 코드 분석하는 일이 제일 짜증나는 일중에 하나인데..
이게 이놈 메소드인지, 저놈 메소드인지 구분까지 해야 한다면.. 음..



락군
0TRACKBACK, 0REPLIES
name
password
homesite

능률적인 프로그래머 : 프로그래머 생산성의 비밀


능률적인 프로그래머 : 프로그래머 생산성의 비밀
(2009)
  닐 포드


오랜만에 읽은 기술 서적..

먹고사는데 조금이라도 도움이 될까 싶어..
제목만 보고 (그것도 인터넷으로)
후딱 구매한후..

정확히 10분 읽고..
돈 아깝다는 생각이 든 책..ㅡ,.ㅡ;;

ㅆㅆㅂ..

책 사고서 돈 아깝다는 생각은 거의 안 하는데도
이 책은 정말.. 해도 해도 너무하단 생각이..
특히,
번역하신 분의 센쓰는..
가히 탈지구급이라..
저절로 손발이 오그라든다..
(과도한 번역욕구로 이상한 단어가 끊임없이 등장한다..
읽다가 이걸 굳이 번역해야 하나 하는 생각이 수십번 들었다는..;;
끝까지 볼것도 없이 첫장에 시작 패드, 가속 장치만 봐도
이미 오그라들기 시작..ㅡ,.ㅡ;)

..

그래도 무언가 있겠지..하는 마음에
오그라드는 손에 힘을 꾸욱 주며
끝까지 읽은 결과
이 책이 개발자에게 주는 교훈은
"타이핑 하는 시간도 아껴서.. 조낸 코딩하라"
는 것..
이 뿐인듯하다..;;


충동구매 했다..
완전
시 to the 망..





락군
1TRACKBACK, 0REPLIES
name
password
homesite

[Java] AWTEventMulticaster에 대해서

최근에 몇몇 작업을 하다가 알게된 사실..
왜 이제야 알았을까.. 부끄럽다..(-- )( --);;

Swing component에 mouse event를 처리 하려면..
Component class에 정의되어 있는 addMouseListener(MouseListener l)를 이용해서 리스너를 등록해주면 된다.

단순하게 옵저버 패턴으로 생각하면 되는데..
그래서 일까..
당연히 Component에서 등록되는 각 Listener들을 List<>로 관리하고 있을꺼라고 생각했다..

get***Listener()로 Listener를 얻어오면, 당연히 List<>로 되어 있으니..
머.. 지례짐작으로..;;

그런데 오늘 유심히 코드를 들여다 보니..
Component에는 다음과 같이.. 유지할 Listener별로 필드 하나만 덜렁 있다..;;



아.. 멀까..;;

그래서 좀 더 유심히 코드를 살펴보기로 하고..
일단 Listener가 등록되고 제거되는 시점부터 살펴봤다..





결론부터 말하자면..
그렇다..비밀은 AWTEventMulticaster에 있었다..!!





AWTEventMulticaster  class의 add(MouseListener, MouseListener)를 따라가보면..
각각의 Listener가 AWTEventMulticater 인스턴스로 wrapping되어
트리 구조로 저장되고 있었다.

즉, A, B, C, D, E 순서대로 Listener를 등록하면..
A, B까지는 하나의 AWTEventMulticaster 인스턴스로 저장이 되고..
이후에 C가 등록되면, 이전의 AWTEventMulticaster 인스턴스가 a가 되고, 최근에 등록된 C가 b가 된다..
((A, B), C)
E까지 순서대로 등록이 되면..
결국 다음과 같은 모냥이 된다는 말이다..



어떻게 이런 형태가 가능 하냐면..

AWTEventMulticaster의 생성자를 보면 대충 알 수 있는데..



무식하게도 거의 모든 Listener란 Listener는 모두 구현하고 있는 걸 볼 수 있다..

그럼,
이벤트가 발생하면.. 어떻게 각 Listener를 순서대로 call해줄까??

이 부분은 Listener가 등록 & 제거 되는 과정에 비하면 매우 간단한데..
Listener interface를 다음과 같이 구현하고 있다..



따라서,
현재 Listener가 AWTEventMulticaster이면 recursive call이 되고..
결국 맨처음 등록된 Listener부터 순서대로 call이 된다.. 후덜덜..

하여튼 알면 알수록 무서븐 넘들..;;

그런데..
결국 풀리지 않는 신비는..

도대체.. 왜.. 왜..
이따구로 열심히 머리를 돌려서 구현해 놓은 걸까..??
바보같은 내 머리로는 도무지 이해가 되지 않는다..


설마..설마..
초 절정의 Collection Package가 없던 시점이라 구런건 아니겠지..ㅋ;
락군
0TRACKBACK, 0REPLIES
name
password
homesite

자바 성능을 결정짓는 코딩 습관과 튜닝 이야기


자바 성능을 결정짓는
         코딩 습관과 튜닝 이야기

Blog2Book


제목에 낚인 대표적인 예..

SWT관련해서 참고할 만한 책이 있을까..하고 서점을 방황하다가
제목이 눈에 들어와서 바로 구매해 버린 책인데,
애초에 큰 기대는 안했지만. 읽고난 후의 소감은
정말 해도해도 너무한다는 생각이다.

당연히 자신이 아는 필살의 비법(?)은 누구라도 안 가르쳐주겠지만, 이 책에서 나열하고 있는 (실제로 저자가 필드에서 직접 본 예라고 하는) 것들은 정말이지 눈을 뜨고 볼 수 없을 정도의 예가 대부분이었다..

지금 생각나는 예를 하나 들자면,

공백을 넣기 위해서 이런식의 코드가 무한 반복되어 있는 경우가 있었다고 한다.

for(int i=0 ; i < 200 ; i++) {
        System.out.println(" ");
}

누가 이런 짓을 할지..ㅋ;

시스템 튜닝일을 하다 보면, 이렇게 말도 안되는 경우를 자주 보게 되는지를 모르겠지만,
성능에 막대한 영향을 주는 나쁜 습관으로 주어진 예제가 전혀 와닿지도 않을뿐더러
설명도 그다지 기술적이지 않다.
그렇다보니 책 자체에서 얻은건 거의 없는거 같다.

물론,
책 자체가 완전 쓰레기인건 아니고..
구냥 다루는 주제에 비해서,
주어진 예나 기타 설명이 부실했었다는 말이다..

그냥 가볍게 몇몇 주제에 대해서 휙 한번 보고 지나가기에는 나쁘지 않을지도~~




락군
0TRACKBACK, 0REPLIES
name
password
homesite

난감하다..

A를 B로 바꾸는업에서..
대략 이런 상태가 되어버리면, 말 그대로 난감하다..


메모리가 1Gb가 안되면,
OutOfMemoryError가 발생할테니, 메모리를 1.5Gb정도 확보하면 널널하게 실행은 되겠지만..

해당 작업 이후 상태를 보면, 0.5Gb도 사치로 보인다.
급격하게 메모리 사용량이 증가하는 각 단계 (그래프가 급격하게 증가하는 부분)에서
해결책을 찾아야 한다..

어떻게..??
락군
0TRACKBACK, 0REPLIES
name
password
homesite

[Java] JRE runtime parameter는 어디서??

Where
Windows
c:\Document and Settings\[User-Name]\Application Data\Sun\Java\Deployment
Mac or Unix
/Users/[User-Name]/Library/Caches/Java

What
deployment.properties


물론.. 대략적인 설정은
Window의 경우 제어판에서 설정이 가능
Mac은 1.5까지는 Application/Utilities/Java에서 설정이 가능.. 그런데 1.6 설치하고 나면 없어짐..;;
사실 내가 못찾는거라 믿고 싶은데.. 도저히 안 찾아진다..아 어딨을까..




락군
0TRACKBACK, 0REPLIES
name
password
homesite

[Java] Image resize

Java를 이용해서
Image Resize를 하는 몇가지 방법..

1. Java Advanced Imaging API 사용
RenderingHint는 적절하게 혼합해서 사용하믄 땡..
변환 품질은 좋으나 속도는 별루..

2. BufferedImage에 쌩(live)으로 resize
이게 품질이 좋을리 만무..;;
단순한게 King王짱..!!

3. BufferedImage에 피라미드틱하게 resize
적절하게 step ratio를 조정해서 사용..
의외로 품질과 속도 나름 쓸만함..
but, 그래봐야 JAI보다 못함..




락군
1TRACKBACK, 0REPLIES
name
password
homesite

[Java] State를 more stylish하게 유지 하려면?

State를 more stylish하게 유지 하려면..
이라.. 제목은 거창한데 사실 별거 아니고,
역시나 초보적인 고민인데.. (-- )( --);;

일단 아래 코드를 보면..
각 situation에 따라서 State class의 'State'를 바꾸어 주는건데..
참 단순무식하게 코딩해놨다..;;


머, 사실 이렇게 하는게 틀렸다거나 하는건 아니지만..
이런 코드가 여기저기 난립하게 된다면,
유지보수에 있어 큰 문제가 생길것이다..
(사실 지금 생겼었다..)

"몇몇 필요로 하는 'State'에 대해서 한군데 모아놓고 처리할 좋은 방법이 없을까?"

결국 이 고민에 대한 답을 찾고자 하는것인데..

단무지틱한 생각으로 접근하면..
정말 단순하게 해결(?)된다..


한군데서 모아서 처리해야 한다는 전제를 충족시켜 주기에..
머 나쁘지 않다..하지만 Stylish하지는 않다..

그렇다면
Enum type을 써서 만들어 보면 어떨까..??


움..해놓고 보니..
썩 좋아보이지는 않는다.. ;;
more Stylish 보다는 more '귀찬아'질듯..ㅎㅏ하하하하


일단 고민 좀 더 해봐야 할듯..ㅋ;




락군
0TRACKBACK, 2REPLIES
  2008.12.22 12:31 신고 | link | edit or delete | write reply 
사실 정답은 없지만 위 코드만을 보고 몇가지 추천해보자면 ~

1. primitive나 자바 타입이 아닌 형식에 대한 Util성의 static method는 최소화되는게 좋아보임
2. 대부분의 switch case는 상속, 구현, 위임 등 을 통해 좀더 확장석있게 OOP 스러워질수 있음
3. enum을 일반적인 객체 처럼 사용하는건 별로 좋지 않은듯 함~

머 결론은...

StateUtil.setAllState(state, Situation.A);

라고 불리던게

Situation a = new SituationA();
a.situate(state);

이런식으로 바뀌어서 switch case 분기를 제거하는 형태 정도가 될듯
  2008.12.22 14:40 신고 | link | edit or delete  
아하~
name
password
homesite

[Java] 도대체 왜 있는지 모르겠다는..

Java SE 5.0에 추가된 유용한 문법이 여러가지 있다..
개인적으로 유용하게 사용하는 Enum이라든가.. Genric이라든가..
String.format() (이건 5.0에 feature가 아니던가??)이라든가.. 등등

그런데,
도대체 왜 이딴걸 추가했는지 의문이 가는게 하나 있다..



이러한 문법을 머라고 부르는지도 모르겠는데..
method의 parameter의 갯수를 가변하게 줄 수 있는 방법이다.

위에 예처럼 사용하면 strings가 사실상 String[]의 형태로 들어가게 되어서,
parameter를 몇개고 넣어줄 수 있다..
대략 이런식으로..
setMember(1, "a", "b", "c", "d", "e");

이런식이라면..
아래와 같은 예와 다를게 무엇일까?? (-- )( --);;



Array든 List건 instancing을 해서 거기에 각 value를 셋팅하고
parameter로 넘겨야 하는 수고를 덜어주는게 목적일까??

모르겠다..;;
구글링 잠깐 하다가 귀찮아서 포기..ㅡ,.ㅡ;;


웹서핑하다 발견한 '바디에 인공미 넘치는' 처자..
근데 이름을 모르겠다는..





락군
0TRACKBACK, 1REPLIES
  2008.11.26 18:35 신고 | link | edit or delete | write reply 
예기한데로 쓸만한 점이라곤 배열등의 컬렉션 생성없이 함수를 바로 호출하게 되는 점과 코드 가독성 정도일듯 -0-ㅋ

아마 내부적으로 배열로 표현을 하게 되니 구현이 워낙 간단해서 그냥 추가한게 아닐까 하는...
name
password
homesite

[Java] Enum..

Enum..
이렇게 사용할 수도 있구나..






락군
0TRACKBACK, 0REPLIES
name
password
homesite
*1  *2