———————————————————————-
예제 3-7 은 두개의 메소드상에 분산된 코드를 갖는 응용 프로그램이다. 다음 코드를 통해 main
메소드의 lotteryOdds 메소드를 호출하는 방법을 살펴보자:
long oddsAre = lotteryOdds(topNumber, numbers);
우리는 main 메소드와 lotteryOdds 메소드가 lotteryOdds 클래스에 속하기 때문에 클래스의 이
름을 명시할 필요가 없다. 여러분은 항상 원하는 전달인자와 메소드 이름을 제공함으로서 같은
클래스의 다른 메소드를 호출할 수 있다. 이것은 다음 구문에서의 메소드 호출과 대조적인다:
NumberFormat.getCurrencyInstance();
GetCurrencyInstance 메소드는 NumberFormat 클래스내에 정의된다. 그러므로 반드시 클래스 이
름을 명시해야 한다.
————————————————————————-
자바에서 메소드에 대한 모든 전달인자는 참조에 의해서가 아니라 값에 의해서 전달된다는 사
실을 명심하는 것은 아주 중요하다. 따라서 메소드 호출에 의해서 변수를 변경하는 것은 불가
능하다.
전달인자
변수들은 메소드가 호출될 때 전달인자들이 제공한 값들로 초기화된 지역 변수이다.
———————————————————————-
노트 : 따른 한편으로, 만일 여러분이 포인터나 레퍼런스의 개념에 친숙하다면 , 자바에서 배열
과 객체들은 실제 레퍼런스(포인터)이기 때문에 메소드들은 배열의 내용이나 객체의 상태를 변
경할 수 있다. 메소드들은 단지 전달인자를 변경할 수 없다.
———————————————————————-
클래스 변수는 다음과 같이 main 메소
드 위에 선언된다.
class Employee
{ private static double socialSecurityRate = 7.62;
public static void main(String[] args)
{ … }
}
이 경우 변수 socialSecurityRate 는 7.62 값으로 초기화된 클래스 변수이다. 로컬 변수
처럼 클래스 변수 역시 기본 값으로 자동 초기화한다.(객체들은 null 로 불리언 변수는
false 로 , 숫자 변수들은 0 으로 초기화된다.)
일단 배열을 생성한 후에는 이것의 크기를 변경할 수 없다.(물론 배열의 각 항목을 변경시킬 수
는 있다.) 프로그램이 실행되는 동안 배열의 크기를 확장시키려면 벡터(vector)라 불리는 다른
자바 객체를 사용하여야 한다.
배열은 프로그래머가 의도적으로 생성해야 하는 객체에 대한 첫번째 예제이다. 이것은 new 연
산자를 통해 이루어진다. 예를 들면,
int[] arrayOfInt = new int[100];
자바는 배열 객체를 생성하는 동시에 초기화하는 간편한 방법을 가지고 있다.
다음은 실제 구문 예이다:
int smallPrimes = { 2,3,5,7,11,13}
이 구문을 사용할 때 new 메소드를 호출해서는 안된다.
심지어 여러분은 임의 배열(Anonymous array)을 초기화할 수 있다:
new int[]{ 2,3,5,7,11,13}
printLabels(new String[] { “Region” , “Sales” } );
은 다음을 줄인 표현이다.
String[] titles = { “Region” , “Sales” }
printLabels(titles);
java.lang.System
l static void arraycopy(Object from, int fromIndex, Object to, int toIndex, int count)
전달인자: from 모든 형의 배열( 5 장에서 Object 타입을 사용하는
이유에 대해 설명한다.)
fromIndex 복사할 from 배열 요소의 시작 위치
to from과 같은 타입의 배열
toIndex 복사할 to 배열 요소의 시작 위치
count 복사할 원소 수
첫번째 배열에서 두번째 배열로 요소들을 복사한다.
java.util.Arrays
l static void sort(Xxx[] a)
전달인자: a int, long, short, char, byte, boolean , float, 또는 double 형 배열
개선된 퀼정렬 알고리즘을 사용하여 배열을 정렬한다.
l static int binarySearch(Xxx[] a , Xxx v)
전달인자: a 정렬된 int, long, short, char, byte, boolean , float, double 형 배열
v a 의 요소로서 같은 형의 값
이진 탐색 알고리즘을 사용하여 v 값을 찾는다. 만일 찾으면 인덱스가 반환된다. 차지 못
하면 음수 r 값이 반환된다. r+1 이 v 를 정렬된 a 의 삽입 위치이다.
l static void fill(Xxx[] a, Xxx v)
전달인자: a int, long, short, char, byte, boolean , float, 또는 double 형 배열
v a 의 요소로서 같은 형의 값
l static void equals(Xxx[] a, Object other)
전달인자: a int, long, short, char, byte, boolean , float, 또는 double 형 배열
v 객체
for(i = 0; i <5; i++) balance[i] = new double[6];
다행스럽게도, 이 루프는 여러분이 new double[5][6]을 요청할 때 자동으로 처리된다. 여러분이
불규칙한 배열을 원할 때 개별적으로 배열의 행을 할당한다.
다차원 배열에 있어 또다른 중요한 점은 new 사용하지 않고서도 축약된 구문을 사용하여 “배
열이 배열”을 초기화할 수 있다는 사실이다.
int[][] lastTwoYearSales = { { 1997,1998} , {100000 , 2000000} };
int[][] odds = new int[n+1][];
그 다음, 열을 할당한다.
for(i=0; i <= n; i++)
odds[i] = new int[i+1];
배열을 할당한 다음, 일반적인 방법으로 원소들에 접근할 수 있다. 우리는 배열의 경계를 벗어
지 않게 한다.