Java

Arrays.binarySearch() 메소드

bang2001 2013. 7. 25. 16:03
Arrays.binarySearch() 메소드

Arrays 클래스는 기본적으로 객체자료형의 배열이나 기본자료형의 배열등 배열에 관하여
보다 쉽고 간편하게 관리하도록 구현된 클래스이다.

Arrays 클래스에는 가장 많이 사용하는 sort() 메소드가 있다. 이 메소드는
배열에 담긴 객체나 값들에 대한 정렬을 한다. 

이외에도 배열과 관련한 메소드가 여러개 존재한다.

여기서 설명하고자 하는 내용은 이 Arrays 클래스에 있는 binarySearch() 메소드에 관한
내용이다. 이 메소드를 구지 언급하면서 설명하는 이유는 이 메소드에 대한 기능을
처음에 접하는 사람들에게는 API를 참고하여도 영어라는 장벽때문에 쉽게 이해하기엔 
벅찬감이 있기 때문이다. 저자도 이와같은 일을 겪었다.

때문에 이렇게 한글로 표현하고자 글을 써보도록 한다.

먼저 binarySearch() 메소드의 기능은 정렬이 되어있는 배열을 가지고 있다고 가정할 때
그 배열에서 매개변수로 넣은 값이 이미 존재하는지 여부와 그와 동시에 만약 있다면
이 배열의 index번호상으로 몇번에 위치하는지, 이미 존재하지 않는다면 이 배열의 
정렬된 현재 상태와 비교하여 매개변수로 넣은 값이 배열에 추가되었다고 가정할 때
이 배열에서 몇번째 순서로 위치할지 알 수 있도록 하는 기능을 가지고 있다.

대부분의 사람들은 이 binarySearch() 메소드의 반환값이 매개변수로 넣은값이
존재하면 해당 값의 인덱스번호를 반환하고 그렇지 않으면 음수를 반환한다고만
알고있을 것이다. 하지만 몇번 조금만 실험해보면 알겠지만 이 음수가 
상황에 따라서 매번 반환되는 값이 틀리다는것을 알 수 있다. 
먼저 간단한 예제그림을 참고하자.

------------------------------------------------------------------------------------------
Arrays.binarySearch(배열변수, 검색할 값); -- 반환타입 int

ex) int a[] = {1, 3, 5, 7, 9}; <- 이런 배열이 있다고 가정한다.

    
    int index = Arrays.binarySearch(a, 3);
    index 는 1의 값을 가지게 된다.

    int index = Arrays.binarySearch(a, 10);
    index 는 -6의 값을 가지게 된다.
------------------------------------------------------------------------------------------

위의 그림과 같이 해당 값이 존재하면 해당 값의 인덱스 값을
그렇지 않으면 위의 그림과 같이 1부터 시작하는 인덱스 값으로
반환하고, 부호는 음수로 하여 표현하게 된다.

그리고 음수로 표현이 되는 경우, 인덱스번호 0번 앞에 위치하면
-1을 인덱스번호 1번 앞에 위치하게 되면 -2를 반환하게 된다.
어떠한 상황이든 배열에는 인덱스 번호를 가지게 되고 때문에
반환되는 정수값은 이 배열의 인덱스번호를 상대적인 개념으로
값들을 비교하여 위치값을 int형태로 반환하는 것이다.

binarySearch() 메소드의 매개변수가 다른 .. 즉 오버로드된
메소드의 종류는 상당히 많은편이다. 하지만 기본동작의 형식은
위에서 설명한 대로 작동하니 이점만 잘 파악하면 문제가 없을 것이다.