반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

이번 포스팅은 메서드나 생성자로 값을 전달하는 방법에 대해 알아본다.

클래스 (Classes)

메서드 또는 생성자 값 전달(Passing Information to a Method or a Constructor)

메서드나 생성자를 만들 때 인수(arguments)의 개수나 타입을 선언한다.

public int computePay(int a, int b, int c){

int k = a + b;

int j = a – b + c;

return k+j;

}.

이 메서드를 보면 인수가 int3개를 선언했다. 해당 인수를 받아서 메서드 구현부에서 해당 파라미터를 바로 사용을 하고 있다.

메서드 선언부에 입력 받는 변수 3개는 파라메터(parameters)라고 하고 해당 파라미터의 수와 타입에 맞게 실제 값을 넣는데 그 값을 인수(arguments)라고 한다. 그래서 메서드를 호출할 때는 반드시 파라미터 수와 타입에 맞게 인수를 지정해야 한다.

파라메터 타입(Parameter Types)

메서드나 생성자에서 어떤 데이터 타입이든 파라미터로 사용할 수 있다. 원시데이터 타입, 참조형 데이터 타입 모두 사용 가능하다.

가변인수 (Arbitrary Number of Arguments)

메서드에 varargs라는 가변인수를 사용할 수 있다. 특정한 타입의 파라미터의 개수를 알지 못하는 경우에 사용 가능하다. Varargs(가변인수)를 사용하는 방법은 먼저 메서드에서 가장 마지막 파라미터로 선언을 해야 되고 타입을 쓰고 생략 기호인 을 붙이고 공백 하나 다음에 파라메터 명을 쓰면 된다.

예제를 보면 getTest 메서드에서 int형 가변인수를 사용했다. 특이한 점은 가변 인수 b를 선언했지만 값을 넣지 않아도 오류가 나지 않고 실행된다는 점이다.

가변인수의 특징이다. 즉 있어도 그만 없어도 그만이라는 것이다. 필요하면 사용하고 필요 없으면 사용하지 않아도 된다.

 

위 예제를 보면 가변 인수 b에 배열 int c를 입력했다. 즉 가변인수는 배열처럼 사용된다.

가변인수는 참조형 변수도 사용 가능하다. String 타입이든 객체든 모두 사용 가능한 것이다.

파라메터 이름(Parameter Names)

메서드나 생성자의 파라미터 이름을 정할 때는 그 파라미터에 어울리는 이름을 지정해야 한다. 이 이름은 입력된 인수를 참조해서 메서드 몸체에서 사용된다. 파라메터의 이름은 그 메서드 범위에서 유일해야 한다. 같은 메서드나 생성자에서 같은 이름으로 사용해서는 안 된다.또한 메서드 또는 생성자 내 지역변수도 같은 이름으로 사용하면 안된다.

 

 

메서드의 파라미터 명이 클래스 필드와 이름이 같을 수는 있다. 그림자 변수(Shadow)라고도 하는데 이 그림자 변수는 사용 시 혼동될 수도 있고 특별한 경우에만 사용하도록 한다. 그 특별한 경우는 예를 들어 클래스 변수인 필드를 초기화하거나 값을 설정할 때 해당 기능을 하는 메서드의 파라미터 명이 같으면 동질감이 있어서 사용하기 편하다.

메서드 내에서 해당 클래스의 필드를 바로 사용할 수는 없다. 파라메터와 이름이 같기 때문에 단순히 변수명을 사용하면 파라미터 변수로만 인식된다.그렇다면 필드에 연결되기 위해서는 제한하는 이름을 사용해야 한다. 이 부분은 추후 this 키워드에서 자세히 알아본다.

참조형 데이터 타입 인수 전달(Passing Reference Data Type Arguments)

객체 같은 참조형 파라메터는 값으로 메서드에 전달된다. 이 의미는 메서드가 리턴 될 때 입력되었던 참조값(객체)는 여전히 전의 같은 객체를 참조하고 있다는 의미이다. 그러나 객체의 필드 값은 메서드에서 변경될 수 있다.

메서드에서 객체를 받으면 메서드 내에서 객체의 필드 값을 변경할 수 있다. 또한 new로 객체를 다시 생성했을 경우 그 객체는 영속성이 없다. 이유는 메서드에 들어온 객체는 값으로 들어왔고 변경될 수 없기 때문이다.

다음 포스팅은 객체에 대해 알아본다.

반응형