RAIDMAX CUBIC 블랙 [파워별도,mATX]

http://www.ezguide.co.kr/shop/detail.html?gid=61275


Posted by [czar]
,
확장자 아이콘 모음
Posted by [czar]
,
http://bbs1.agora.media.daum.net/gaia/do/debate/read?bbsId=D003&articleId=475472

난 서초구 주민이다!!!!!

그리고 현재 소유하고 있는 아파트 현시세 9억이다 34평 ㅋㅋ

게다가 이제 곧 재개발예정이다.. 맹바기의집권과 한나라의 압승으로인해 앞으로

일사천리로 진행되고 집값도 오른다는 얘기지 ㅋㅋ

아무튼 재산공개를 전부할순없지만 의보민영화해도 한달에 100만원정도는 부담할수

있을정도라 생각하면 되겠다..

허나 그럼에도 불구하고 난 한나라 안찍었다 물론 맹바기도...ㅋㅋ

왜냐? 옳지 않기 때문이다. 집값 올려준다고 김구선생님,안중근선생님을 테러리스트라고

주장하는 단체와 결탁하고있는 정당을 지지할순 없는거잖냐?

서민을 위한다고 거짓말을 하며 친재벌 정책만 쓰고있는 정당을 지지할순 없는거잖냐?

그리고 난 안다 딴나라를 지지하는게 단기적으론 좋을진 모르겠지만

결국엔 망국의 길로 가는길임을...


그런데 나보다 없는것들은 한나라 왜찍는거냐?? 니들 동네도 서초나 강남처럼 될거 같아서??

꿈도 꾸지 말아라 니들덕에 서초나 강남은 전쟁나지 않는 이상 더욱더 니들이 꿈에도 얼씬못하도록

더 벽이 높아질테니 ㅎㅎㅎ


하여튼 니들덕에 난 엄청 혜택받을게다 ㅋㅋ

집값도 재개발이후에 완공되면 최소15억이상 간다니 개인부담금 2억 빼더라도 최소 4억은

먹는구나 ㅋㅋ

더먹을지도 모르는거고 게다가 종부세 폐지되거나 완화되면 세금도 덜낼것이고 ㅋㅋ

여하튼 우리 서초와 강남구민을 위해 열심히 지지해주는 니들에게 머라 감사해야할지 모르겠다.

니들덕에 이정권이 끝날때쯤이면 전부 정리하면 25억정도는 손에 쥘거 같구나 ㅎㅎ

원래는 10억에서 15억정도 일텐데 말이쥐 ㅎㅎ

암튼 난 그돈쥐고 호주나 뉴질랜드로 갈생각이다 아님 영국으로가던가..

5년후쯤이면 니들이 꼭지돌아서 혜진이 예슬이 같은 아이들이 매주 나올지도 모르거던

게다가 서초나 강남 분당등을 주 타겟으로 해서 말이쥐...

그러니 5년동안 정리하고 외국나가서 니들 고통받는거나 지켜보면서 흐뭇해하는게 낫겠지?


난 오늘 들쥐근성의 국민들은 들쥐처럼 대해야 한다는것을 이번선거를 통해 확실하게 알았다 ㅋㅋ

투표율 46프로 ㅋㅋ 이건 나라가 어떻게 되도 아무 상관도 없다는것이지 ㅋㅋ

들쥐들은 민주주의에서 살아가야할 자격따윈 없는거다 ㅋㅋ

박정희나 전두환 정권때처럼 조금만 까불면 끌려가서 두드려맞고 살아가는게 어울리는거지 ㅎㅎ

여하튼 이글을 끝으로 더이상 민영화니 대운하니 반대도 안할것이고 김구선생님을 테러리스트라

하는 교과서로 애들이 공부를 하던말던 상관 안할것이다..

그동안 니들을 위해서 충분히 노력했고 한나라텃밭에서 우리식구들 포함 30표이상은 확실하게

소신있게 투표하게 했으니 더이상 개념없는 너희들을 위해 내가 열올릴 필요가 없다는것이지..

5년간 잘들버티길 바란다 내걱정은 하지말고 니들 상상이상으로 또 벌테니.. ㅎ

그리고 한가지만 알아둬라 혹 니들이 5년뒤 지금보다 더 나아질지 모르지만 그때

니들이 상상도 못할정도로 더 나아진 우리들 같은 사람들이 있단걸 ㅋㅋㅋ


잘들어라!! 같은 룰로 하는 돈먹기게임에서 없는자들이 있는자들을 이길확률은 제로란다..

있는것들을 이기거나 혹은 따라 잡으려면 방법은 단 하나란다.. 룰을 바꿔야한다는거!!

없는놈들에게 유리하게 말이다!!

그 룰을 바꾸는게 정치란 말이다!! 한나라가 니들을 위해서 룰을 만들어줄거라는 발상은 도대체

어떻게 하면 할수있는거냐?? 혹시 걔들한테 노블리스 오블리제의 정신이 충만하다고

생각하는거냐?

종부세폐지는 니들이 도대체 왜 나대신 주장 해주는거냐? 언제고 니들도 6억이상 아파트 갖을까봐서??니들이 유리하게 룰만들어서 달려들어도 힘들판에...

지들위해서 룰 만들어준다는 사람들이 있어도...

(중소기업부, 물가연동제, 부동산원가공개 등등) 암튼 이런사람들은 안뽑고 금산법폐지,의보민영화

종부세인하한다는 한나라를 뽑아?? 종부세 대상자도 아니면서???

아무리생각해도 이해가 안된다 ㅎㅎ


아 하나만 더 추가하자 자사고설립되면 니들 애들이 들어갈수 있을거 같냐??

참고로 나 리라국민학교나왔다..그당시에도 학교내에서 왕따가 심했었지 없는애들위주로다가 ㅎㅎ

수업료 한번 미납해서 담임이 한번 호명하면 그아인 그뒤로 어떤 생일파티도 참석못하게 되는거지

암튼 니들 애들이 자사고에 장학생자격으로 들어갔다 치자.. 견딜수 있을거 같냐? ㅎㅎ

일예로다가 사립고는 교육에 질에 아주 신경을 쓰기때문에 프로그램이 아주 많지 유료로다가..ㅎ

내경우에도 필수로다가 악기하나씩 해야했고(리코더,캐스터네츠,트라이앵글 이딴거 말도 하지마라 바이올린,비올라,트럼펫,플륫,트럼본,첼로,콘트라베이스등등이니).. 빙상부는 제외였을거다 아마

그리고 겨울때마다 대관령 알프스스키장도 3박4일로 가야하고 당시 회비가 6만7천원이였나??

20년전쯤이니 물가대비는 알아서 생각하고..

스키장가서 자기장비없으면 또 애들 눈치보이고 ㅋㅋ 국민학교때도 이랬는데

자사고는 어떨거 같냐? 모르긴 몰라도 수학여행은 당연 해외로 갈것이고...여튼 돈드는 프로그램

들은 정말 많게 될거야 그럼 니들이 그거 다 감당할수 있을거 같냐?

이런대도 불구하고 니들은 니들을 위한 룰을 만든다는 사람들은 무시하고 한나라를 찍거나

둘중에 하나는 놀러를 간단말이지..ㅋ 도대체 어떻게 이해를 해야할지 ㅎㅎ

누구말마따나 그래서 니들이 서민인거라 이해해야하는건지 ㅎㅎ


자 이쯤되면 슬슬 의심이 가기 시작하지? 과연 내가 위에 말한것처럼 정말 한나라의 혜택을 받고

서초구민이고 9억짜리 아파트를 갖고 있으면서 이렇게 한나라를 씹을까하고말이야 그치??

그리고 이해 안돼지? 좋아해야할놈이 왜 흥분해서 글쓰는지 말이야 ㅋㅋ

간단해..상식대로만 생각하면 나같은 생각 하게 된다 그러니 니들 개념을 원망해라

돈이 중요하지만 돈이 젤 중요한건 아니다 요런거 상식이자나 그치???

그러니 난 집값 올려준다고 해도 이렇게 씹어대는거야 옳은게 아니거던

아 어쩌면 한나라가 우린 부자만을 위해요라고 말하면 한 10년후쯤에 내가 원하는만큼에 부를

축적한 이후에 찍어줄지도.. 서민을 위한다고 헛소리하면 물론 안찍고..

왜냐 상식적으로 거짓말을 하는 당이니 찍어줘선 안되는거자나??

이래저래 내가 찍어줄일은 없을거 같네 ㅎㅎ

암튼 마지막으로 해주는 말이니까 새겨듣거라..

니들 측은한 맘에 술한잔 걸치고 쓰니 두서는 없어도 미친듯이 써내려가지는구나 ㅎㅎ

잘걸러서 새겨들어라 ㅋㅋ


내글읽고 기분나쁜것들은 한나라지지자이거나 무개념이라고 본다..

개념있고 제대로 된 사고방식을 가진 분들이라면 내가 왜 이런글을 쓰는지 알테니 말이다..

따라서 인간대접 안해줄테니 기분나쁘네 이런소리 하지말아라..


아 글고 오늘 투표안하고 놀러간것들아~~

기원전 4세기 경에 페리클레스란 사람이 이런얘기를 했다..

"정치에 무관심한자! 우리는 그들을 자기일만 묵묵히 열심히 하는 사람이라 생각하지 않는다고

 우린 그들을 우리와 무관한사람이다라고 생각한다" 라고 말이다!!

내 개인적인 생각이지만 이게 번역을 하다보니 이렇게 부드럽게 된거고 그가 말하고자 했던건

정치에 무관심한 자들은 민주주의에서 살 자격이 없다라고 말하고 싶었던거 같다.

즉! 니들은 자유민주주의를 수호하는 대한민국에 살 자격이 없는것들이란거지...

투표할 필요도 없고 정치에 관심 안가져도 되는 북한으로 가는건 어떠냐??

이나라 사람들 피해주지말고 말이다..




이런 버릇없는글을 베스트로 올려주신 여러분들의 넓은 아량에 감사드립니다..

그리고 우려했던대로 제글때문에 속상함을 느낀분들이 계신것같아 죄송하다는 말씀드립니다.


베스트간김에 여러분들께 한가지만 제안하겠습니다..

물론 윗글에 더이상 아무 상관도 안하겠다 했습니다만 그건 어제 놀러가고 개념없이

투표한 사람들에게 한말이니 이해해주시면서 제 제안을 들어주셨으면 합니다..


전 지난대선과 어제 총선은 메가바이트와 딴나라의 승리라고 생각하지 않습니다..

아직도 이땅에서 기득권으로 살아가면서 암세포처럼 다른 건강한세포에 전이시키며

살아가는 친일파들의 승리라고 생각합니다..

뉴라이트의 대안교과서를 보셔서 아시다시피 뉴라이트 이들은 딴나라보다 우리가 더욱더

두려워하고 경계해야할 상대라 생각합니다..민족의 정기를 말살하려하기 때문이죠..

우리후손들이 김구선생님과 안중근 선생님을 테러리스트라 배우게 되는순간 과연 이름만

대한민국인것이 의미가 있을까요? 그러나 이 뉴라이트는 두려운존재이기도 하지만

그들의 가장큰약점이기도 합니다.. 그이유는 그어떤 계기만 있다면 우리나라사람처럼

잘 뭉치는 나라는 없기 때문입니다.. 2002년때를 상기해보시면 될듯..

뉴라이트는 정치세력이기도 하지만 동시에 친일세력이란것은 여러분께서 더 잘 아시리라

생각합니다.. 친일세력이란것이 세상에 더 알려질수록 그 약점은 커지겠지요..


그래서 제안합니다 '뉴라이트 제대로 알리기'를 말입니다..

정치에 신물이 나있는 사람들에게 정치 얘기 백날해봐야 씨도 안먹힙니다..

의보민영화 같은 경우도 단지 정치이야기란 이유만으로 에이 설마하고 말아버리니까요

허나 아시다시피 우리나라 식민시절에 대한 반감은 아주 대단하죠..

이감정을 그들이 지난 50년간 반공을 이용한 것처럼 우리도 이용해야한다고 생각합니다..

단 반친일파 감정이어야지 반일감정으로 번지는것은 안되겠죠?

제 개인적인 생각으론 반친일파감정말고는 우리나라가 다시 하나되는 일은 없다고 봅니다..


하여튼 가장 중요한건 국민들이 정치에 관심을 갖게 되고 똑똑해지는것인데 그러려면

자연스럽게 정치에 관심을 갖게 하는것이 중요한데 저와 마찬가지로 님들또한 그동안 쉽지

않으셨을거란 생각이 드네요.. 정치얘기하면 바로 치를 떨어버리니까말이죠..


예를 들자면 이런겁니다. 저같은경우 술자리에서 '야 한나라당이....' 이렇게 시작하니까

다들 싫어하더군요 허나 "김구랑 안중근이 테러리스트라던데?"로 시작하니까 관심을 갖더군요

아주 광분하면서 말이죠 ㅎㅎ 그리곤 근거를 대라고 하길래 뉴라이트 대안교과서만 검색창에

쳐보라고 일러주었죠.. 그랬더니 고맙게도 뉴라이트녀석들이 대놓고 친일발언을 일삼고 있으니

이를 벅벅 갈더군요 ㅎㅎ(사석에서 하는말이라 존칭 생략하였습니다)

그리고 지금은 저만큼은 관심을 갖게 되었습니다.. 게중엔 매트릭스 속에서 자신을 깨워줬다고

아주 고마워하는 사람들도 있더군요 ㅎㅎ


36년간 일본에게 지배를 받던 우리나라에서 늦게나마 반일감정과는 확연히 구분되어지는

여기서 확연히 구분되어지는이란 성숙한 반친일파감정이란 이야기입니다..

즉 그들에게 어떠한 빌미도 제공되지 않는 감정말이죠.. 연좌제의 성격을 띤다거나 맹목적인

반일감정으로 이어지지 않는 그런 감정 말입니다..

그런 반친일파감정이 일어나고 그래서 그것이 정치로까지 자연스럽게 연결되어진다면 그 파괴력은 엄청나지 않을까 생각되네요.. 그리고 그것은 우리의 첫단추라 생각합니다..


자 이제 정리해서 다시 제안하겠습니다. 온라인과 병행하여 오프라인에서도 뉴라이트의 실체에

관해 알려주세요.. 그리고 듣는사람이 동의한다면 꼭 다른사람에게도 알려달라고 당부해주세요.

꾸준히만 된다면 언젠가 우리의 이 작은 노력이 빛을 보게 될거라 확신합니다..

그리고 이런 노력들이 여러분들이 꿈꾸는 세상을 만드는데 해가 되진 않으리라 확신합니다..


마지막으로 답답한마음은 이제 접으시길 바랍니다..

지금시기는 그들보다 더 뚜렷하고 냉철하게 세상을 바라보셔야할 시기이지 절대

포기하거나 내가 왜 저들때문에 피해를 봐야하나 이런 작은생각들 때문에 증오스러운 눈길로

세상을 바라보셔야할 시기는 절대 아닙니다.. 그들이 그걸 가장 노리고 있으니까요...

영악한자들입니다.. 그들보다 더 영악해지시길 바랍니다.. 여러분...

긴글 읽어주셔서 감사합니다..  

Posted by [czar]
,
http://chans.tistory.com/58

java.sun.com에 아래와 같은 java의 Gerneric에 대한 설명 문서가 있습니다.

Generics in the Java Programming Language

--------------------------------------------------------------------
아래는 문서를 읽고 그냥 적어본 것이니 내용이 반드시 정확한 것은 아닙니다. 틀린 부분이 있다면 지적해주세요.


위 문서는 java의 generics에 대한 설명입니다.

JDK 1.5부터 Gernerics라는 개념이 추가되었습니다. type을 명확하게 정하지 않고도 type을 처리할 수 있는 C++의 템플릿과 비슷한 기능으로 사용법은 비슷합니만 다른 점은 <> 사이에 들어가는 type의 수만큼 class를 만드는 C++과는 달리 java에서는 하나의 class로 여러 type들을 처리합니다 (java compiler에서 어떻게 처리하는지는 더 깊은 내용이라 파악해보진 않았습니다).

상속을 많이 사용하는 java에서는 매우 유용할 기능을 보이지만, JDK 1.5 아래 버전들에서 사용하던 소스, 라이브러리들과 같이 사용하는 것은 주의가 많이 필요할 것으로 보입니다.  

Object를 이용하여 method의 파라미터나 리턴값을 처리하는 경우 compile time에서는 type 검사가 어려웠으나, gernerics를 사용하면 compile time에서 type 검사가 수행됩니다.

추가로 크기가 큰 소스인 경우에 가독성과 안정성이 증가한다고 본문에 나와있습니다 (아직 해보진 않았으니 그런가 보다 합니다).


본문의 간단한 사용예:
List<Integer> myIntList = new LinkedList<Integer>();
myIntList.add(new Integer(3));
Integer x = myIntList.iterator().next();
여기에 사용된 "List<Integer>" 형태는 parameterized type 이라고 합니다.

본문의 다른 사용예:

public interface List<E> {
   void add(E x);
   Iterator<E> iterator();
}
여기에 사용된 "List<E>" 형태는 formal type parameter 라고 합니다.


type parameter로 E, T, S 등의 한글자로된 대문자를 주로 사용하는데 기존의 type과 구분하기 위해서 입니다.


(1)

List<String> ls = new LinkedList<String>();
List<Object> lo = ls;
(1)의 코드는
(2)

lo.add(new Object());
String s = lo.get(0);  // (3)
(2)의 코드와 같이 사용할 경우 (3)에서 Object type을 String 변수에 할당하려고 했기 때문에 compile error 가 발생합니다.


Collection의 모든 요소를 출력하는 것은 아래의 코드로 할 수 있습니다.
void printCollection(Collection<?> c) {
   for (Object o : c)
       System.out.println(e);
   }
}
<?>와 같이 사용하는 것을 wildcard type이라고 합니다. 어떤 type이라도 들어올 수 있다는 의미입니다. Object는 java에서 모든 class의 최상위 class이기 때문에 위의 코드는 type safe 합니다.

Collection<?> c = new ArrayList<String>();
c.add(new Object()); // (4),  compile time error
위의 코드는 c가 어떤 type인지 알 수 없는데 Object type 값을 할당하려고 하기 때문에 compile error가 발생합니다. c의 subtype을 할당해야 하는데 최상위인 Object를 할당하려고 했기 때문이라고 이해했습니다.



Shape의 child로 Circle, Rectangle class를 만들고 Canvas에서 모든 도형 list를 출력하는 경우는 다음과 같이 사용합니다.

본문 예제 참고:
public class Canvas {
   public void drawAll(List<? extends Shape> shapes) {
       for (Shape s : shapes)
           s.draw(this);
   }
}
<? extends T>와 같은 형태를 upper bounded wildcard라고 합니다. T의 child type만을 사용할 수 있다는 것을 의미합니다.
위의 경우엔 drawAll()의 argument로 List<Circle>, List<Rectangle>, List<Shape>가 모두 올 수 있습니다.

그러나 아래와 같은 코드는 compile error가 납니다.
public void addRectangle(List<? extends Shape> shapes) {
   shapes.add(0, new Rectangle()); // compile error
}
addRectangle의 argument로 List<Shape>가 넘어올 수 있는데 거기에 Rectangle type의 값을 할당하려고 하기 때문에 compile error가 납니다.



method 선언부에 generic 을 사용하는 것을 generic method라고 합니다.
static <T> void fromArrayToCollection(T[] a, Collection<T> c) {
   for (T o : a)
       c.add(o);
}
method 앞에 <T>라고 해두면 method의 다른 부분에서 T type을 사용할 수 있습니다.


다음과 같이 사용할 수도 있습니다. 다음의 (5)와 (6)은 같은 내용을 다르게 표기한 것입니다. (5)는 generic method 와 wildcard를 같이 사용한 것입니다.
(5)

class Collections {
   public static <T> void copy(List<T> dest, List<? extends T> src) {
        ...
   }
}

(6)

class Collections {
   public static <T, S extends T> void copy(List<T> dest, List<S>) {
       ...
   }
}

다음은 wildcard와 generic method로 같은 내용을 표기한 것입니다.
(7)

interface Collection<E> {
   public boolean containsAll(Collection<?> c);
   public boolean addAll(Collection<? extends E> c);
}


(8)


interface Collection<E> {
   public <T> boolean containsAll(Collection<T> c);
   public <T extends E> boolean addAll(Collection<T> c);
}

어떨 때 wildcard를 쓰고, 어떨 때 generic method를 사용할까?
- generic method는 method에서만 사용할 수 있다. 그외의 경우는 wildcard를 사용한다.
- method 내에서도 복잡하지 않게 한군데에서만 typed parameter가 사용되는 경우는 wildcard를 사용하는 것이 좋다. (generic method는 보기가 복잡하다 <- 취향일지도...)
- type들 사이에 구분이 명확하게 필요한 경우(method 여기 저기에 "?"가 있으면 헷갈릴 듯함)는 generic method를 사용하자.


기존의 Legacy code(generic을 사용하지 않는 code)를 generic code에서 사용하는 예입니다.
(Legacy Code)

package com.Fooblibar.widgets;

public interface Part { ... }
public class Invectory {
   public static void addAssembly(String name, Collection parts) { ... }
   public static Assembly getAssembly(String name) { .... }
}
public interface Assembly {
   Collection getParts(); // returns a collection Parts
}
(Generic code)

package com.mycompany.inventory;
import com.Fooblibar.widgets.*;

public class Blade implements Part {
   ....
}
public class Guillotine implements Part {
   ....
}
public class Main {
   public static void main(String[] args) {
       Collection<Part> c = new ArrayList<Part>();
       c.add(new Guillotine());
       c.add(new Blade());
       Inventory.addAssembly("things", c);
(9)   Collection<Part> k = Inventory.getAssembly("things").getParts();
   }
}
Generic code 관점에서 Legacy code의 Collection과 같이 <>없는 type을 raw type 이라고 합니다. 개념상으로는 Collection<?>와 같이 unknown type으로 생각하면 될 것 같습니다. compile은 되지만 위의 예에서 (9)의 위치에서 unchecked waring이 뜹니다. method의 argument로 넘어갈 때는 Collection<?>로 보고, (9)와 같이 리턴 타입으로 받을 때는 내부적으로 Collection<Part>로 해석해 준다고 합니다.

기존의 Legacy code와 함께 사용할 경우에는 unchecked warning에 대해서 매우 주의해서 사용해야 하고, 여러 가지 문제들은 사실상 프로그래머가 해결해 줘야 합니다.


public String loophole(Integer x) {
   List<String> ys = new LinkedList<String>();
   List xs = ys;
   xs.add(x); // compile time uncheced waring
   return ys.iterator().next(); // (10)
}
위의 코드는 compile 후엔 내부적으로 다음과 같이 바뀝니다.
public String loophole(Integer x) {
   List ys = new LinkedList();
   List xs = ys;
   xs.add(x);
   return (String)ys.iterator().next(); // (11) run time error
}
이러한 행위를 erasure라고 합니다. <>를 제거하고, 나머지 부분에서 사용된 type variable들은 type variable의 upper bound(최상위 type)으로 변환됩니다. 대부분의 경우 Object일 것입니다. 그리고, type에 맞지 않는 곳에는 type cast(예에서는 (String)) 코드를 집어 넣습니다.
위의 예에서는 (10), (11)에서 ClassCastException이 발생할 것입니다. 프로그래머는 unchecked warning을 주의깊게 봐야 합니다.


Generic code를 Legacy code에서 사용할 경우도 본문에는 예가 있습니다. 제가 볼 땐 Legacy code를 Generic code에서 사용하는 것과 type 관련 처리 방식은 같아 보입니다. uncheck warning을 주의하면 될 것 같습니다.

generic class는 마치 static type 처럼 <>안의 내용과 관계없이 하나의 class에서 모두 처리합니다. 아래 예의 출력값은 true 입니다.

List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass());

추가적으로 generic class에 대해서는 type casting 이나 instanceof와 같은 것들이 불가능하다.
(instanceof 오류)

Collection cs = new ArrayList<String>();
if (cs instanceof Collection<String>)
   ...
(type casting 오류)

Collection<String> cstr = (Collection<String>)cs;

array obejct (배열)에 대해서는 wildcard가 아닌 parameterized type이나 type variable을 적용할 수 없습니다.

List<String>[] lsa = new List<String>[10]; // (12) compile time error
Object o = lsa;
Object[] oa = (Object[])o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[1] = li;
String s = lsa[1].get(0);
위의 코드는 (12)에서 compile error가 발생합니다.


wildcard를 사용하여 아래와 같이 하면 compile은 되지만 (13)에서 run time error가 발생합니다.
List<?>[] lsa = new List<?>[10];
Object o = lsa;
Object[] oa = (Object[])o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[1] = li;
String s = (String)lsa[1].get(0); // (13) ClassCastException


JDK 1.5의 java.lang.Class class에는 generic이 적용되어 있습니다. 뿐만 아니라 JDK 1.5의 다른 class 들(본문에 자주 나오는 Collection 계열 등)에도 필요한 곳에는 generic이 적용되어 있습니다.

Class class의 newIntance()는 public T newIntance();와 같은 형태로 선언되어 있고, 리턴 type이 T가 됩니다. T는 Class의 선언부에 class Class<T>와 같은 type이 넘어온다.
결과로 아래와 같이 reflection 코드에서 기존보다 정확한 type을 넘겨받아서 처리가 가능하다.
public static <T> Collection<T> select(Class<T> c, String sqlStatement) {
   Collection<T> result = new ArrayList<T>();
   /* run sql query jdbc */
   for (/* iterate over jdbc results */) {
       T itme = c.newInstance();
       /* use reflection and set all of item's fields from sql results */
       result.add(item);
   }
   return result;
}


upper bounded wildcard의 반대 개념으로 lower bounded wildcard를 사용할 수 있습니다.
public static <T extends Comparable<? super T>> T max(Collection<T> coll);

wildcard capture는 이해하는데 실패했기 때문에 언급하지 않겠습니다.



java.util.Collections class의 JDK 1.4 버전의 코드는 아래와 같습니다.
public static Object max(Collection coll);
위의 코드가 JDK 1.5 에서는 아래와 같이 generic을 적용한 버전으로 바뀝니다.
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)

"<T extends Object & Comparable<? super T>>" 부분은 multiple bounds라고 하고 "&" 기호로 각 type parameter를 구분합니다. <>안의 모든 부분을 만족하는 subtype 이라는 의미입니다.

"<T extends Object & Comparable<? super T>>"와 같이 복잡해진 이유는 JDK 1.4 에서 max()의 return type이 Object이기 때문에 호환을 위해서 입니다. JDK 1.5에서는 Ojbect를 상속하고, Comparable을 구현한 type을 return type으로 갖습니다.



본문을 대략 정리해봤는데, 영어도 짧고 해서 정확하게 정리가 되었는지 모르겠습니다.
JDK 1.5를 계속 쓰면서 숙달해야 할 것 같습니다.
Posted by [czar]
,
==============================================
복사
==============================================

import java.io.*;

class  FileCopyTest
{
 public static void main(String[] args)
 {
  try{
  FileInputStream fis = new FileInputStream ("sing.jpg") ;
  FileOutputStream fos = new FileOutputStream ("sing1.jpg");
  int n = 0;
  while ((n=fis.read())!=-1)
  {
   fos.write(n);
  }
  fos.close();
  fis.close();
 
  }catch(Exception e){}
 }
}
==============================================
다른 복사
==============================================

import java.io.*;

class  FileCopyTest1
{
 public static void main(String[] args)
 {
  try{
  byte[] bt = new byte[1024];

  FileInputStream fis = new FileInputStream ("sing.jpg") ;
  FileOutputStream fos = new FileOutputStream ("sing21.jpg");
 
 
  int i;
  while((i=fis.read(bt))!=-1) fos.write (bt,0,i);
  fos.close();
  fis.close();
 
  }catch(Exception e){}
 }
}
==============================================
txt파일을 화면에 출력
==============================================

import java.io.*;
class  InputStreamReaderTest
{
 public static void main(String[] args)
 {
  try{
  InputStreamReader isr = new InputStreamReader(new FileInputStream("InputStreamReaderTest.java"));
  int i=0;
  while((i=isr.read ())!=-1){
   System.out.print((char)i);
  }

  }catch(Exception e){}

 }
}
==============================================
BufferedReader를 이용하고 bufferedWriter를사용하여 파일복사
==============================================

import java.io.*;
class  BufferedReaderTest
{
 public static void main(String[] args)
 {
  try{
   int i;
   BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream("InputStreamReaderTest.java")));
   BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(new FileOutputStream("a1.java")));
   
   String line = null;

   while((line=br.readLine())!=null){
    bw.write (line,0,line.length());
    bw.newLine();
   }
   bw.close();
   br.close();

  }catch(Exception e){}

 }
}
==============================================
url 에 해당하는 html 카피
==============================================

import java.net.*;
import java.io.*;

class  URLTest
{
 public static void main(String[] args)
 {
  try{
   int i;
  URL url = new URL("http://www.yahoo.co.kr/");
  URLConnection uc = url.openConnection ();
  InputStream is = uc.getInputStream ();
 
  BufferedReader br = new BufferedReader( new InputStreamReader(is));
  BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(new FileOutputStream("a.html")));
  String line = null;
  while((line=br.readLine())!=null){
   //System.out.println(line);
   bw.write (line,0,line.length());
   bw.newLine();
  }
  bw.close();

  }catch(Exception e){}

 }
}
==============================================
url 이미지 가지고와서 저장하기
==============================================

import java.io.*;
import java.net.*;

class GetURLImage
{
 public static void main(String[] args)
 {
  try{
   URL url = new URL("http://wstatic.naver.com/w/n_c600.gif");
   URLConnection uc = url.openConnection ();
   InputStream is = uc.getInputStream ();
   
   BufferedInputStream bs = new BufferedInputStream(is);
   
   FileOutputStream fos = new FileOutputStream ("a.gif");
   
   int n = 0;
   while ((n=bs.read())!=-1)
   {
    fos.write(n);
   }
   fos.close();


  }catch(Exception e){}
 }
}

=============================================================

Posted by [czar]
,
JSP 실행시 다음과 같은 에러가 발생했을 경우에는 JSTL 태그 라이브에 선언한 URI를 변경해줘야 한다.

org.apache.jasper.JasperException: /WEB-INF/jsp/search_item.jsp(10,3) According to TLD or attribute directive in tag file, attribute test does not accept any expressions
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)


/make_index.jsp(6,0) According to TLD or attribute directive in tag file, attribute url does not accept any expressions



왜냐하면 JSTL1.0과 JSTL1.1의 URI가 다음과 같이 변경되었기 때문이다.



즉 JSTL1.0을 JSP 페이지에서 사용하는 경우라면

JSTL1.1를 JSP 페이지에서 사용하는 경우라면
Posted by [czar]
,
SELECT @rownum:=@rownum+1 rownum, t.*
FROM (SELECT @rownum:=0) r, mytable t;
Posted by [czar]
,

출처 : http://www.otl.pe.kr/my/view.php?idx=940


한동안 안써서 까먹어서 새로 학습합니다.

버전이 1.6이 나왔었군요.

http://prototype.conio.net
http://openframework.or.kr/framework_reference/prototype_js/1.5.0/prototype.js.html

2가지 방법으로 구현합니다.

* index1.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<script src="prototype.js"></script>

<script>

function send(){
 var pars = 'content='+$F('content');
 var ajax = new Ajax.Request(
  'insert.jsp',
  {
   method:'post',
   parameters:pars,
   onFailure:reportError,
   onComplete:showList
  });
}

function reportError(request){
 alert('error');
}

function showList(request){
 $('content').value = '';
 $('list').innerHTML = request.responseText;
}
</script>

<div id=list></div>

<form name=frm>
<textarea name=content rows=5 cols=80></textarea>
<input type=button onclick="send();" value="확인">
</form>



* index2.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<script src="prototype.js"></script>

<script>

function send(){
 var pars = 'content='+$F('content');
 var ajax = new Ajax.Updater(
  {success: 'list'},
  'insert.jsp',
  {
   method:'post',
   parameters:pars,
   onFailure:reportError
  });
}

function reportError(request){
 alert('error');
}
</script>

<div id=list></div>

<form name=frm>
<textarea name=content rows=5 cols=80></textarea>
<input type=button onclick="send();" value="확인">
</form>


* insert.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.*" %>
<%

 List list = (List)session.getAttribute("list");
 
 if(list == null) list = new ArrayList();
 
 String content = request.getParameter("content");
 System.out.println(content);
 list.add(content);
 session.setAttribute("list", list);
%>
<table border=1 width=100%>

<%
 for(Object o:list){
%>
<tr>
<td><%=o.toString() %></td>
</tr>
<%  
 }
%>
</table>

Posted by [czar]
,
Posted by [czar]
,

보내는사람,받는사람 한글 정상이면
제목, 내용한글 깨지고

제목, 내용 한글 정상이면
보내는 사람, 받는 사람 한글 깨지고

대략 난감이다.


해결은

<%@ page contentType="text/html; charset=EUC-KR" import="java.util.*,javax.mail.*,javax.mail.internet.*,java.io.*" %>
<%
 //request.setCharacterEncoding("EUC-KR");
 Properties msgProperties = new Properties();
 msgProperties.put("mail.smtp.host", "localhost");
 //msgProperties.put("mail.mime.charset", "euc-kr");
 
 Session msgSession = Session.getDefaultInstance(msgProperties, null);

 try {
  Enumeration params = request.getParameterNames();
  while (params.hasMoreElements()) {
   String name = (String) params.nextElement();
   String value = request.getParameter(name);
   out.println("[" + name + "  =  " + value + "]<br>");
  }

  MimeMessage msg = new MimeMessage(msgSession);

  // 보내는 사람
  String mailfrom_name = request.getParameter("from_name");
  String mailfrom = mailfrom_name + "<" + request.getParameter("from_mail") + ">";
  InternetAddress from = new InternetAddress(mailfrom);
  msg.setFrom(from);

  // 받는 사람
  String mailto_name = request.getParameter("to_name");
  String mailto = mailto_name + "<" + request.getParameter("to_mail") + ">";
  InternetAddress to = new InternetAddress(mailto);
  msg.setRecipient(Message.RecipientType.TO, to);

  // 날짜
  msg.setSentDate(new java.util.Date());//보내는 날짜 설정

  // 제목
  String title = request.getParameter("title");
  msg.setSubject(new String(title.getBytes("iso-8859-1"), "euc-kr"));
 
 
  // 내용 설정
  String content = request.getParameter("content");
  String tmpFile = "/member/email.html";
  BufferedReader br = new BufferedReader(new FileReader(new File( request.getSession().getServletContext().getRealPath(tmpFile))));
  StringBuffer sb = new StringBuffer();
  String ch = null;
  while ((ch = br.readLine()) != null) { // 파일에서 한문자(2바이트)씩 읽음

   if (ch.indexOf("##CONTENT##") > -1) {
    sb.append(ch.replaceAll("##CONTENT##", content));
   }

   else if (ch.indexOf("##TITLE##") > -1) {
    sb.append(ch.replaceAll("##TITLE##", title));
   }

   else {
    sb.append(ch);
   }
  }
 
  msg.setContent( new String(sb.toString().getBytes("8859_1"),"euc-kr"), "text/html;\n\tcharset=\"ks_c_5601-1987\"" );
  msg.setHeader("Content-Transfer-Encoding", "base64");

  Transport.send(msg);
%>
<script>
 alert('메일이 정상적으로 발송되었습니다.');
 history.back();
</script>
<%
 } catch (MessagingException e) {
  out.println(e.getMessage());
 } catch (Exception e) {
  out.println("error : " + e.getMessage());
%>
<script>
 alert('메일 발송이 실패하였습니다!');
 history.back();
</script>
<%
 }
%>


빨간색 부분만 잘 보면 될듯..

메일솔루션마다 차이는 있을듯 한데
이건 나누미넷에 맞춰진것..

Posted by [czar]
,