'개발하는 남자'에 해당되는 글 122건

  1. 2007.12.20 창조경영!! 기업블로그로 무장하라 - (주) 네트빌
  2. 2007.12.18 [Eclipse] Resource is out of sync with the file system : ... 1
  3. 2007.11.19 리틀 엔디안 (Little-Endian) / 빅 엔디안 (Big-Endian)
  4. 2007.11.19 JVM 메모리구조와 스택 - 참조 ^^
  5. 2007.11.19 자바에서 swap 구현하기
  6. 2007.11.19 GET과 POST 차이
  7. 2007.11.19 스코프(Scope)
  8. 2007.09.26 2007 JCO 오픈소스 컨퍼런스
  9. 2007.09.15 name과 id의 차이
  10. 2007.09.07 서블릿을 사용할 경우 js파일 경로

창조경영!! 기업블로그로 무장하라 - (주) 네트빌

|

제목 : 창조경영!! 기업블로그로 무장하라


이 글은 언제나 한발 앞서가는 웹2.0 솔루션 업체인 네트빌(www.netville.co.kr)의 전략마케팅팀 내부 보고서를 옮긴 것임을 밝혀둡니다.


<출처 : ㈜네트빌 전략마케팅팀 “기업형 블로그에 대한 소고” 내부 보고서>


       목  차

(1) 혁신할 것인가! 창조할 것인가!
(2) 프로세스보다 더 무서운 것은 자율이다.
(3) 인터넷, 웹2.0에 도도히 흐르는 사상은 자유와 자율이다.
(4) 창조경영!  기업형 블로그로 무장하라!



(1) 혁신할 것인가! 창조할 것인가 ?

올해 2007년의 벽두에 삼성전자는 창조경영이라는 화두를 던졌다. 그동안 삼성은 쫓가가서 추월하는 능력은 어느정도의 성과에 도달해있지만, 새로운 시장을 만들어 나갈 새로운 아이템을 창조하는 능력은 부족하기에, 삼성이 한단계 더 도약하기 위해서는 창조를 통한 신시장개척이 필요한 시기임을 나타낸 것이라 본다.
창조경영이라는 단어는 많은 것을 담고 있는 듯하다. 이의 구체적인 서술에 앞서 기존에 우리에게 너무도 익숙해져 있는 혁신이라는 단어는, 세계시장에서는 한계가 있음을 먼저 언급하고 싶다.  기존 것을 계속 보완하고, 새롭게 고치는 등 효율성의 달성에 목표를 두고 있는 혁신은 세계로 뻗어나가기에는 역부족이다.  허지만, 우리 사회를 움직이는 핵심세대들은 이에 너무도 익숙해져 있는 것이 사실이며,  우리의 교육, 우리의 기업문화도 크게는 이를 벗어나지 못하고 있다.  그러나 창조는 사고의 변화를 요구하는 단순한 과제가 아니다. 보기에 따라서는 세대의 교체를 요구하는 것이며, 교육의 변화, 문화의 변화를 동시에 요구하는 것이기도 하다.
그렇다면, 세계에서 더욱더 도약하기 위해서는 즉 창조경영을 하기위해서는 무엇이 필요한가 ?  창조경영의 기본이 되는 것이 무엇인가 ? 이 질문에 대답할 수 있어야만 창조경영의 본질에 접근할 수 있을 것이다.
창조경영을 하기 위해서 필요한 것 ? 누구나 쉽게 생각할 수 있는 것은 창조적인 아이디어를 생산해 낼 수 있는 사람이라고 생각할 것이다. 그래서 창조에 익숙한 문화에서 자란 인재들의 영입이 첫번째 답이 될 수 있을 것이다.  이에 따라 삼성이 사력을 다해 추구하고 있는 것도 인재영입에 초점이 맞추어져 있다고 할 수 있을 것이다.  그러나 필자의 생각은 조금은 다르다.  귤이 하수를 건너면 탱자가 된다고 하듯이, 창조경영의 문화적 토대가 갖추어져 있지 않은 곳에 그러한 인재가 온다고 해서 창조경영이 이루어지는 것은 아니다.  문제의 핵심은 창조경영에 어울리는 기업문화란 무엇인가에 초점을 두어야 한다고 본다.
여하튼 이제 대한민국에 새롭게 대두되는 화두는 기존의 혁신의 과제에서 창조의 과제로 발전해야 함은 명백한 것 같다.  왜냐하면 새로운 도약을 위해서는 창조가 없이는 항상 2등이기 때문이다.


(2) 프로세스보다 더 무서운 것은 자율이다.
창조가 자연스럽게 탄생할 수 있는 환경, 기업문화란 어떤 것일까 ?
유감스럽게는 우리는 어릴적부터 창조보다는 주어진 길에서의 최선의 노력을 다하는 것이 자연스럽게 몸에 밴 풍토에서 자라왔다.  또한 이런 풍토에서 자란 사람들이 엘리트로서 성장하여 현 사회의 주축을 이루고 있다.  따라서, 이러한 몸에 밴 풍습, 습관들의 개선이 선행되지 않고서는 창조경영으로 나가기가 쉽지 않은 과제 일 것이다.  그러나, 교육이 바뀌어지기만을 기다리기에는 너무도 요원하기에, 한 기업의 문화속에서라도 창조가 조금이나마 싹틀 수 있도록 하는 문화적 환경의 변화가 지금은 필요한 시기이다. 다행히도 다양한 개성을 표현함에 주저함이 없는 최근의 젊은세대들도 잉태되고 있기에 조금은 더 희망적일 것 같다.    기업에서 창조가 싹틀 수 있는 문화는 어디에서 오는가 ? 필자는 단언하건데 이러한 창조는 자율에서 온다고 본다. 우리 기업들은 다년간, 프로세스중심의 체계를 만들어왔고, 이 프로세스를 어떻게 개선하느냐의 문제가 혁신의 중차대한 문제였다고 볼 수 있다.  즉 프로세스를 더욱 효율적으로 하는 방법이 핵심과제였던 기업문화속에서 살아왔다.  프로세스 중심의 업무시스템에 대비하여 볼 수 있는 것은 필자는 자율의 업무시스템이라고 말하고 싶다.  자율이라고 하니, 왠지 기업에는 어울리지 않는 단어인 것 같다.  자율은 언제나 위험을 내포하기 때문이다. 그렇다. 직원들에 대한 신뢰와 믿음이 없이는 절대로 할 수 없는 것이 자율이다.  필자가 볼 때 자율이 올바르게 성립되기 위해서는 정보의 공개가 필수적이다.  자율의 선행조건이 정보의 공개인 것이다.  정보의 공개없이 자율을 기대하는 것은 또다른 과욕에 불과하다.  정보의 공개와 이를 통한 자율의 문화의 정착  이것이 창조경영을 위한 밑바탕이다.   프로세스를 폐기해야 할 필요는 없다.  혁신의 과제가 없어진 것이 아니기 때문이다.   다만 자율의 문화가 필요한 곳, 그리하여 창조가 잉태되기를 바라는 곳에는 프로세스중심의 문화로는 불가능함을 말하고자 한다.
자율의 문화라고 하니, 마치 직원들에게 많은 것을 새롭게 고쳐야 한다고 생각하고 지레 겁을 집어 먹을 것 같다. 허지만 앞서 말했듯이 정보의 공개만 이루어진다면 자율의 문화의 반은 이루어진 것이다.  나머지 반은 신뢰와 믿음을 가지고 지위고하를 막론하고 언제나 열려있는 문을 만드는 것이 중요한 것 같다. 그리고 이러한 문화를 만드는 곳에 웹2.0이라는 훌륭한 파트너가 있다. 다음장을 보기로 하자.


(3) 인터넷, 웹2.0에 도도히 흐르는 사상은 자유와 자율이다.
웹2.0 !! 가슴설레게 하는 단어이다. 인터넷이 우리 삶의방식에 대변혁을 불러왔다면, 웹2.0은 이에 상응하는 문화의 변화를 표현하는 단어라고 생각한다.  흔히들 웹2.0은 참여, 개방, 공유라고 하는 3개의 단어로 나타낸다. 너무도 적절한 표현이라고 여겨진다. 허지만 이와 더불어 웹2.0이 우리기업에게 던지는 시사점은 자유와 자율이다.  기업에서는 받아들이기 어려운 이 단어가 왜 중요한가 ? 웹2.0이 광의의 인터넷에서 언급이 될 경우에는 자유와 자율은 너무도 기본적인 것이기에 언급할 필요조차 없다.  집에서 내가 자유롭게, 자발적인 의지로 인터넷에 접근하는 것을 통제할 사람은 아무도 없기에, 자유와 자율은 기본이었었다.  허지만 기업이라는 테두리속에서는 달라진다.  자유롭게 ? 왠지 쉽지않은 단어로 변해버린다.  자율 ? 이 또한 어색해 보이는 단어이다.  웹2.0의 문화적 조류를 창조와 연결하여 말하고자 하는 것은 이 때문이다.  창조는 다시금 말하거니와 문화적 토대위에서만 의미가 있는 것이지, 문화적 토대를 이루지 못한 상태에서의 창조는 설령 한 두건의 창조는 있을 수 있을지 모르나, 영속적으로 자리잡지 못한다.   이러한 문화적 토대는 자유와 자율이며, 이는 웹2.0이라는 거대한 조류와 직결되기에   웹2.0이 기업인에게는 가슴뛰게 만드는 단어라는 것이다.
자유와 자율위에서, 참여와 공유가 발생할 수 있기 때문이다. 이러한 참여와 공유가 어우러져 웹2.0의 거대한 결과를 초래하는 것을 우리는 구글에서, 아마존에서 보아오지 않았는가 ?  참여와 공유를 통해 만들어내는 결과는 절대로 단편적이지 않다. 영속적이다.  이러한 문화를 어떻게 만들어내고, 이러한 문화속에서 이를 어떻게 이끌어내는 가를 창조경영을 추구하는 기업은 고민해야 한다.


(4) 창조경영!  기업형 블로그로 무장하라!
자유와 자율의 바탕 위에서 참여와 공유를 만들어내는 웹2.0 !
그 웹2.0의 대표적인 도구가 블로그라고 생각한다.  블로그의 특징은 인간의 본성적인 표현욕구를 자연스럽게, 강요하지 않은 자신만의 글로 남기는 도구이다.  어쩌면 기업이라는 문화와는 어울리지 않지만 창조라고 하는 단어와는 좀 더 친숙해진다.
기업이 고민해야 할 것은 어떻게 개인의 자발적인 글들이 블로그에 풍성하게 올라올 수 있도록 할 것인가 ? 또한 좀더 업무와 관련한 자신만의 생각들이 자연스럽게 표출되게 할 것인가 (물론 강요해서는 안 된다)를 고민해야 한다.  이는 블로그를 기업의 소유로 생각하지 말고, 개인의 소유라는 사고에서 출발해야 한다.  개인의 소유이기에 어떠한 글이 올라오더라도 기업이 관여해서는 안 된다. 기업의 관여가 들어가기 시작하면 자발성은 무너지게 된다. 그리고 블로그가 스스로 진화해 나갈 것이라는 것을 믿어라.  신뢰와 믿음! 자율의 문화가 형성되는 곳에서 창조의 싹이 튼다는 믿음을 가져야만 한다.
블로그에 올라오는 글의 수준에 대한 고민은 일단 하지 말자.  블로그의 진화에 대한 믿음만 가지면 된다.  허지만 고민하지 않을 수 없는 것은 보안의 문제이다.  기업비밀에 해당하는 사항들이 블로그에 올라오면 어떻게 하나? 필자의 생각은 이 또한 직원들의 자율적인 힘에 맡기는 것이 좋아 보이나, 때론 심각한 문제를 유발할 수 있기에 이 부분에 대한 대책은 기업내의 블로그 관리자들의 주된 고민이 되지 않을까 판단된다.  허지만, 기업내 블로그가 미치는 영역은 기업내이기에, 직원들의 자율과 자발적인 보안의 정화과정을 믿고 싶다.    기업내의 직원들의 블로그는 기업 내에서 철저히 개방하고, 비관여를 원칙으로 삼고 가야 한다고 본다.
이러한 문화가 정착이 되면  블로그속에서 옥석을 가려내어 이를 창조와 연결하는 것은 모두의 몫 특히 관리자의 몫이 되리라 본다.
블로그 문화가 성숙해지면, 블로그를 통한 협력작업이 가능한 팀블로그 등도 고려해 볼 수 있을 것이다.



창조경영, 웹2.0, 블로그, 앞으로의 기업의 변신에 가슴이 띈다.   자율이 가지는 힘, 직원들의 자발적인 표현수단의 제공, 이러한 문화적인 변신 속에서 새로운 창조의 희망이 보이지 않을까 ?

'거미줄세상' 카테고리의 다른 글

URI? URL? URN?  (0) 2008.02.20
제9회 한국 자바 개발자 컨퍼런스  (0) 2008.02.03
[담아온글] 자바 웹 프로그래머의 기본  (0) 2007.12.22
GET과 POST 차이  (0) 2007.11.19
2007 JCO 오픈소스 컨퍼런스  (0) 2007.09.26
And

[Eclipse] Resource is out of sync with the file system : ...

|

커넥션 풀을 사용하기 위해 JOCL 파일을 이클립스가 아닌
(이클립스에서는 인식을 하지 못한다..왜!!)

워드패드를 통해 수정을 한 이후

이클립스에서 톰캣을 구동하려고 하니 저런 에러가 발생하였다.

이클립스와 파일 시스템간의 싱크가 안맞아서 생긴 문제 인 듯 한데...

이해 할 수 없음 ㅡ.ㅡ;;

아무튼 Project > Clean으로 깔끔하게 다시 리빌드 시켜주면 해결된다.

MyEclipse를 쓰면 신경안써도 된다던데..

그럴 필요성 까지는 못느끼겠다.

And

리틀 엔디안 (Little-Endian) / 빅 엔디안 (Big-Endian)

|
원본 http://blog.naver.com/milkclub/60005272811


데이터 저장/전송에서 주의할 바이트 순서 (리틀 엔디안 / 빅 엔디안)

글. 오상문 (sualchi@yahoo.co.kr  /  sualchi@daum.net )

-----------------------------------------------------------------------


컴퓨터에서 어떤 크기의 데이터를 메모리에 저장할 때 바이트 단위로 나누어 저장한다.
그렇다면 2바이트나 4바이트 크기의 데이터는 어떤 바이트 순서로 저장할까?


먼저 본론부터 말하면 CPU 유형에 따라 바이트 저장순서가 달라질 수 있다.
크게 두 가지로 나뉘는 데 그것이 바로 ‘리틀 엔디안’과 ‘빅 엔디안’ 방식이다.



1. 리틀 엔디안 (Little-Endian)


시작 주소에 하위 바이트부터 기록

( Intel 80x86 (IBM-PC),  DEC VAX,  DEC PDP-11 )
주로 SCO 유닉스나 MS 윈도우가 돌아가는 Intel 프로세서 계열 시스템


-----------------------------------------------------------------------

사용자 삽입 이미지

-----------------------------------------------------------------------



2. 빅 엔디안 (Big-Endian)


시작 주소에 상위 바이트부터 기록
( IBM370,  Motorola 68000,  Pyramid )
상용 UNIX가 주로 돌아가는 RISC 프로세서 계열 시스템


-----------------------------------------------------------------------

사용자 삽입 이미지

-----------------------------------------------------------------------


네트웍에서 데이터 전송을 할 때도 이러한 엔디안  방식에 주의해야 한다.
서로 다른 데이터 저장 방식의 시스템끼리 통신하게 되면 전혀 엉뚱한 값을
주고받기 때문이다. (저장순서가 서로 반대임)


네트웍 데이터 통신에서는 네트워크 바이트 순서(network byte order, 빅 엔디안)를
따르도록 데이터의 바이트 순서를 변경해야 한다.
(TCP/IP, XNS, SNA 규약은 16비트와 32비트 정수에서 빅 엔디안 방식을 사용함)


클라이언트측 : 네트워크 바이트 순서(빅 엔디안)로 변경하여 전송한다.
      htonl 같은 함수(host to network)를 이용해서 변경시켜주면 된다.

      data = htonl(data);   // data : 전송할 4바이트 값
      write(client_sockfd, (void *)&data, sizeof(int));


서버측 : 받은 값(네트웍 바이트 순서(빅 엔디안))을 자신에게 맞게 변환하여 사용한다.
        ntohl 같은 함수(network to host)를 이용해서 변경시켜주면 된다.

        printf("%d\n", ntohl(data));   // data : 전송 받은 4바이트 값
        close(client_sockfd);


<이상>


참조 : ‘endian에 대해서, 윤 상배(dreamyun@yahoo.co.kr)’ 등 인터넷 문서 일부



---------------------------------------------------------------------------

다음 코드를 이용하여 여러분의 프로그램이 수행될 시스템의
Endian(바이트정렬) 정보를 알 수 있습니다.
 
int x = 1;
 
if (*(char *)&x == 1) {
  /* Little-Endian */
  /* printf("Little-Endian\n"); */
}
else {
  /* Big-Endian  */
  /* printf("Big-Endian\n"); */
}
 
 
참조 : C Programming FAQs, By Steve Summit, January/1/2001
And

JVM 메모리구조와 스택 - 참조 ^^

|

원본 http://blog.naver.com/solleil7829/30023682694


JVM의 메모리구조와 호출스택에 대해서 설명합니다.


호출스택은 예외처리(Exception Handling)를 바르게 이해하는데 꼭 필요하므로


잘봐두시기 바랍니다.

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


응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
그 중 3가지 주요영역(Method Area, 호출스택, Heap)에 대해서 알아보도록 하자.



[참고] cv는 클래스변수, lv는 지역변수, iv는 인스턴스변수를 뜻한다.

1. 메소드영역(Method Area)
- 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이타)를 Method Area에 저장한다.
이 때, 그 클래스의 클래스변수(class variable)도 이 영역에 함께 생성된다.


2. 힙(Heap)
- 인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이 곳에 생성된다. 즉, 인스턴스변수(instance variable)들이 생성되는 공간이다.

3. 호출스택(Call Stack 또는 Execution Stack)
호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간결과 등을 저장하는데 사용된다. 그리고, 메서드가 작업을 마치게 되면, 할당되었던 메모리공간은 반환되어 비워진다.
각 메서드를 위한 메모리상의 작업공간은 서로 구별되며, 첫 번째로 호출된 메서드를 위한 작업공간이 호출스택의 맨 밑에 마련되고, 첫 번째 메서드 수행중에 다른 메서드를 호출하게 되면, 첫 번째 메서드의 바로 위에 두 번째로 호출된 메서드를 위한 공간이 마련된다.
이 때 첫 번째 메서드는 수행을 멈추고, 두 번째 메서드가 수행되기 시작한다. 두 번째로 호출된 메서드가 수행을 마치게 되면, 두 번째 메서드를 위해 제공되었던 호출스택의 메모리공간이 반환되며, 첫 번째 메서드는 다시 수행을 계속하게 된다. 첫 번째 메서드가 수행을 마치면, 역시 제공되었던 메모리 공간이 호출스택에서 제거되며 호출스택은 완전히 비워지게 된다.
호출스택의 제일 상위에 위치하는 메서드가 현재 실행 중인 메서드이며, 나머지는 대기상태에 있게 된다.
따라서, 호출스택을 조사해 보면 메서드 간의 호출관계와 현재 수행중인 메서드가 어느 것인지 알 수 있다.
호출스택의 특징을 요약해보면 다음과 같다.


- 언제나 호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.
- 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.


반환타입(return type)이 있는 메서드는 종료되면서 결과값을 자신을 호출한 메서드(caller)에게 반환한다. 대기상태에 있던 호출한 메서드(caller)는 넘겨받은 반환값으로 수행을 계속 진행하게 된다.

[예제6-6] CallStackTest.java

class CallStackTest {
      public static void main(String[] args) {
            firstMethod();
      }

      static void firstMethod() {
            secondMethod();
      }

      static void secondMethod() {
            System.out.println("secondMethod()");            
      }
}
[실행결과]
secondMethod()

위의 예제를 실행시켰을 때, 프로그램이 수행되는 동안 호출스택의 변화를 그림과 함께 살펴보도록 하자



(1)~(2) 위의 예제를 컴파일한 후 실행시키면, JVM에 의해서 main메서드가 호출됨으로써 프로그램이 시작된다. 이때, 호출스택에는 main메서드를 위한 메모리공간이 할당되고 main메서드의 코드가 수행되기 시작한다.
(3) main메서드에서 firstMethod()를 호출한 상태이다. 아직 main메서드가 끝난 것은 아니므로 main메서드는 호출스택에 대기상태로 남아있고 firstMethod()의 수행이 시작된다.
(4) firstMethod()에서 다시 secondMethod()를 호출했다. firstMethod()는 secondMethod()가 수행을 마칠 때까지 대기상태에 있게 된다. seoundMethod()가 수행을 마쳐야 firstMethod()의 나머지 문장들을 수행할 수 있기 때문이다.
(5) secondMethod()에서 println메서드를 호출했다. 이때, println메서드에 의해서 화면에 "secondMethod()"가 출력된다.
(6) println메서드의 수행이 완료되어 호출스택에서 사라지고 자신을 호출한 secondMethod()로 되돌아간다. 대기 중이던 secondMethod()는 println메서드를 호출한 이후부터 수행을 재개한다.
(7) secondMethod()에 더 이상 수행할 코드가 없으므로 종료되고, 자신을 호출한 firstMethod()로 돌아간다.
(8) firstMethod()에도 더 이상 수행할 코드가 없으므로 종료되고, 자신을 호출한 main메서드로 돌아간다.
(9) main메서드에도 더 이상 수행할 코드가 없으므로 종료되어, 호출스택은 완전히 비워지게 되고 프로그램은 종료된다.

[예제6-7] CallStackTest2.java

class CallStackTest2 {
      public static void main(String[] args) {
            System.out.println("main(String[] args)이 시작되었음.");
            firstMethod();
            System.out.println("main(String[] args)이 끝났음.");
     }
      static void firstMethod() {
            System.out.println("firstMethod()이 시작되었음.");
            secondMethod();
            System.out.println("firstMethod()이 끝났음.");            
     }

      static void secondMethod() {
            System.out.println("secondMethod()이 시작되었음.");
            System.out.println("secondMethod()이 끝났음.");            
     }

}
[실행결과]
main(String[] args)이 시작되었음.
firstMethod()이 시작되었음.
secondMethod()이 시작되었음.
secondMethod()이 끝났음.
firstMethod()이 끝났음.
main(String[] args)이 끝났음.

'작업노트 > JAVA' 카테고리의 다른 글

CSV파일  (0) 2009.03.02
자바 5 에서의 반복자와 컬렉션(for/in 반복문)  (0) 2008.02.28
Java API Map  (0) 2008.01.05
자바에서 swap 구현하기  (0) 2007.11.19
Vector or ArrayList -- which is better?  (0) 2007.05.29
And

자바에서 swap 구현하기

|

자바에서는 두 프리미티브 변수의 값을 바꾸는 메소드인 swap을 구현하기가 까다로운 듯 하다

왜냐하면 자바에서는 프리미티브 타입에 대해서는 call by value만 지원하기 때문에

파라메터로 받은 값들은 서로 바꿀 수가 없다는 것이다.


어떻게 하면 좋을 것인가? 대략 생각할 수 있는 아이디어는 다음과 같다


1. swap함수에 넘어갈 파라메터를 배열로 구현한다

즉,

void swap(int[] values) {

   int temp;


   temp=values[0];

   values[0]=values[1];

   values[1]=temp;

}

문제점: 파라메터가 실제로 프리미티브 타입(기본 타입) 인데도 불구하고 배열을 만들어서 swap을 해야 한다


2. swap함수의 파라메터로 래퍼 클래스를 사용한다

void swap(Integer a, Integer b) {

     int temp;

     temp=a.intValue();

     a.setXXX(b.intValue()); // <-- Integer클래스에 setXXX에 해당하는 메소드가 없다!!!!

     b.setXXX(temp);           // <-- Integer클래스에 setXXX에 해당하는 메소드가 없다!!!!

}

문제점:

1. Integer 클래스에는 set계열 메소드가 없어서 새로운 Integer 인스턴스를 생성하지 않는한

값을 변경할 수 없다.

2. 기본 타입을 래퍼 클래스에 싸서 넘겨야 한다


3. swap 함수에 파라메터를 넘기지 않고, 멤버 변수로 넘겨서 값을 교환하도록 한다

class XXXX {

  int x, y;


  void setX(int newX) {

     x=newX;

  }

  void setY(int newY) {

     y=newY;

  }


  void swap() {

     int temp;

     temp=x;

     x=y;

     y=temp;

  }


  int getX() {

     return x;

  }

  int getY() {

     return y;

  }

};

문제점:

1. 이건 배보다 배꼽이 더크다... 사용하기 어려워 보인다 ㅡㅡ;


4. swap함수에 인덱스에 해당하는 파라메터 한개를 더 받는다

즉,

int swap(int a, int b, int index) {

   if(index==0) return a;

   if(index==1) return b;

   else return a;

}

사용할 때는

int a=100, b=90;

a=swap(a, b, 0);

b=swap(a, b, 1);


문제점:

1. 실제 돌려보면 알겠지만 이건 작동을 안한다 --;


5. 스택에 차례대로 저장했다가 꺼낼때 순서를 바꾸어서 받는다

Stack st=new Stack();


st.push(x);

st.push(y);


x=st.pop();

y=st.pop();


///////////////////////////////////////////////////////////////////////////////////

찾아서 나온 해답은 다음과 같다

///////////////////////////////////////////////////////////////////////////////////


6. JDK에서는 다음과 같이 해결했다~

swap함수에 첫번째는 배열에 해당하는 파라메터이고, 두번째와 세번째는 바꾸길 원하는 배열의

원소 번호이다. 이것의 특징은 앞에서의 swap함수는 x,y와 같이 단순한 값을 바꾸기 위한 목적이었다면 여기의 함수는 여러개 값이 있는 배열에서 특정한 값을 서로 바꾸기 위한 목적으로 사용된다는 것이다.

java.util
Class Collections

java.lang.Object | +--java.util.Collections 

...

swap

public static void swap(List list, int i, int j)
Swaps the elements at the specified positions in the specified list. (If the specified positions are equal, invoking this method leaves the list unchanged.)
Parameters:
list - The list in which to swap elements.
i - the index of one element to be swapped.
j - the index of the other element to be swapped.
Throws:
IndexOutOfBoundsException - if either i or j is out of range (i < 0 || i >= list.size() || j < 0 || j >= list.size()).
Since:
1.4

7. 흠.... 이건?

swap함수에 call by reference로 넘어 갈 수 있는 사용자 정의 객체를 만들어 넘기고

이 객체의 값을 바꿈으로써 swap 함수가 작동하도록 되어 있다.


class  Swap {
    public  int  x ,  y ;
    public  static  void  swap ( Swap  obj ) {
        int  temp ;
        temp  =  obj.x ;  obj.x  =  obj.y ;  obj.y  =  temp ;
        System.out.println ( “   swap :  x  =     +  obj.x  +  “,  y  =     +  obj.y ) ;
    }
}
public  class  CallByReference {
    public  static  void  main ( String [ ]  args ) {
        Swap  a  =  new  Swap ( ) ;
        a.x  =  1,  a.y  =  2 ;
        System.out.println ( “before :  x  =    +  a.x  +  “ , y  =    +  a.y ) ;
        Swap.swap ( a ) ;
        System.out.println ( “after :  x  =    +  a.x  +  “ , y  =    +  a.y) ;
   }

'작업노트 > JAVA' 카테고리의 다른 글

CSV파일  (0) 2009.03.02
자바 5 에서의 반복자와 컬렉션(for/in 반복문)  (0) 2008.02.28
Java API Map  (0) 2008.01.05
JVM 메모리구조와 스택 - 참조 ^^  (0) 2007.11.19
Vector or ArrayList -- which is better?  (0) 2007.05.29
And

GET과 POST 차이

|

GET은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용

POST는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용


GET을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.

반면에 POST 방식은 전달되는 데이터가 보이지 않는다.


GET방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생

HTTP/1.1 명세에서는 GET도 데이터의 양에 제한이 없음


하지만 이전 명세를 지원하는 서버, 프록시 서버, 블우저에서는 지원 안할 수도있음


따라서 웹서버에 많은 데이터를 전송하기 위해서는 POST메소드를 사용하는 것이 바람직

And

스코프(Scope)

|

page

- 하나의 JSP페이지에서만 사용할 수 있다는 의미.

- scope가 page인 디폴트 객체(response, out, config, page, exception)는

다른 곳에서는 사용될 수 없음.


reqeust

-다른 페이지로 전달(이동, forward)되는 경우에 이동된 페이지에서도 사용할 수 있다.

-이동전 페이지에서 setAttribute()메소드로 정보를 저장하면 이동후 페이지에서 그 정보를 사용.


session

-세션이 사용되는 한, 여러 페이지에서 사용할 수 있다.

-session객체에 저장하면, 다른 페이지들에서도 원하는 정보를 활용할 수 있게 된다.

(로그인 정보 등)


application

-웹 응용 프로그램에 소속된 모든 페이지들이 사용 가능.

'작업노트 > JSP & Servlet' 카테고리의 다른 글

커스텀 태그 라이브러리 사용시  (0) 2008.10.09
멱등(Idempotent)  (0) 2008.01.05
[미해결] 이미지 태그 한글 파일명 경로 처리문제  (0) 2007.09.04
request.getSession()  (0) 2007.05.27
JspWriter  (0) 2007.05.27
And

2007 JCO 오픈소스 컨퍼런스

|
And

name과 id의 차이

|
name : 서버스크립트에서 주로 사용된다.
id : 자바스크립트같은 클라이언트사이드 스크립트에서 주로 사용된다.

자세한 내용은...
http://user.chollian.net/~spacekan/source/form/useForm.htm#useForm2
And

서블릿을 사용할 경우 js파일 경로

|
만약 자바스크립트를 직접 jsp파일 안에 기입한 것이 아니라

.js파일 안에 기입하고 jsp파일과 같은 디렉토리 안에 두고

script태그의 src 프로퍼티로 포함을 시킨 경우라면

그때의 상대경로는 jsp파일이 있는 디렉토리(sub/a.jsp)를 기준으로 하는 것이 아니라

서블릿의 경로명(/a.do)을 기준으로 하는 것이므로,

경로명에 jsp파일이 있는 디렉토리 명을 추가 해주어야 한다.

<script type="text/javascript" src="sub/httpRequest.js"></script>

이런식으로 말이다.

별것도 아닌데 삽질아닌 삽질을 하고야 말았다.

왠지 나중에도 까먹고 삽질할 것 같아 기록을 남긴다.-_-
And
prev | 1 | ··· | 7 | 8 | 9 | 10 | 11 | 12 | 13 | next