'java'에 해당되는 글 3건

  1. 2008.01.05 Java API Map
  2. 2008.01.05 Head First Java (뇌 회로를 자극하는 자바 학습법)
  3. 2007.11.19 자바에서 swap 구현하기

Java API Map

|
사용자 삽입 이미지
And

Head First Java (뇌 회로를 자극하는 자바 학습법)

|
 
사용자 삽입 이미지












신선한 책이다.

부제목의 문구대로 뇌 회로를 확실히 자극시켜준다.

웹쪽으로 진로를 정하면서 자바를 공부하기 위해 책을 고르던중,

재미있다는 서평들을 읽고 빨리 읽을 수 있을 것 같아 고른 책이다.

이런 이론서들은 대부분 지루하기 짝이 없다는 건 누구나 다 겪어봐서 잘 알것이다.

하지만 이 책은, 공부하다가 뇌의 구동이 멈추려 할때면 신선한 바람을 공급해준다.

읽어보면 알 것이다.

나는 끝까지 읽는데에 2주 정도 걸렸다.

(하루에 7-8시간씩 매달린것 같다. 매주 4일 공부했으니..64시간정도 걸린 듯)

책 구성이 색다르고 신선했기에 지치지 않고 공부할 수 있었다.

자바를 공부하고 싶은 사람들에게 정말 강추하고 싶은 책이다.

단, 플밍 경험, 객체지향의 개념이 조금이라도 있어야지 읽기에 수월할 것 같다.

가끔... 그런 부분들이 나온다.

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
prev | 1 | next