본문 바로가기
안 씀/java-개념

메소드 활용 - 인자 전달

by unhyepnhj 2024. 5. 20.

메소드 형식

 

메소드

- 클래스의 멤버 함수

- 접근 지정자 선언을 제외하면 C/C++의 함수 작성법과 동일

- 접근 지정자: 메소드가 다른 클래스에서 호출될 수 있는지 지정(public, prvate, protected, default)
- 리턴 타입: 메소드가 반환하는 값의 데이터 타입


인자 전달

 

자바의 인자 전달 방식

- 기본 타입의 값 전달

- 객체 또는 배열 전달

 

1. 기본 타입의 값이 전달되는 경우

- 메소드 매개변수가 기본 타입(byte, char, short, int, long, float, double, boolean)으로 선언된 경우

- 호출자(caller)가 전달하는 값이 매개변수에 복사되어 전달

- 실인자 값은 변경되지 않음

public class ValuePassing{
	static void increase(int m){	//m=10으로 초기화
    	m = m+1;			//m=11
    }
    
	public static void main(String args[]){
    	int n = 10;
        increase(n);
        
        System.out.println(n);
        //n의 값이 m으로 복사되어 전달
        //m값은 11이 되고 n값은 여전히 10
    }
 }

- main()에서 변수 n에 저장된 값 10을 increase() 메소드에 전달

- increase(int m)메소드가 호출되면 매개변수 m이 생성되고 10으로 초기화, m 값을 1 증가시킴

- increase()에서 리턴하여 main() 메소드로 돌아오면 변수 n 값은 여전히 10

n과 m은 별개

 

2. 객체가 전달되는 경우

- 메소드의 매개변수가 클래스 타입인 경우

- 객체가 아니라 객체의 레퍼런스 값이 전달

- 매개변수가 실인자 객체 공유

public class ReferencePassing{
	static void increase(Circle m){		//pizza의 레퍼런스가 m에 복사
    	m.radius++;				//m=11, increase()가 종료된 후에도 m=11
    }
    
    public static void main(String args[]){
    	Circle pizza = new Circle(10);
        
        increase(pizza);
        
        System.out.println(pizza.radius);
    }
}

- increase(pizza)에 의해 increase(Circle m)가 호출되면 매개변수 m 생성

- pizza 변수에 저장된 값(레퍼런스)이 m에 복사

- m은 pizza가 가리키는 객체를 함께 가리키게 됨

n과 m이 같은 레퍼런스를 공유하므로 바뀐 값이 n, m 모두에게 적용

 

3. 배열이 전달되는 경우

- 객체 전달과 동일

- 배열에 대한 레퍼런스만 전달

- 매개변수가 실인자의 배열을 공유

public class ArrayPassing{
	static void increase(int[] array){
    	for(int i=0; i<array.length; i++){
        	array[i]++;
        }
    }
    
    public static void main(String args[]){
    	int a[] = {1, 2, 3, 4, 5};
        
        increase(a);
        
        for(int i=0; i<a.length; i++){
        	System.out.print(a[i]+" ");
        }
    }
 }

- main()에서 생성된 배열 a가 increase()에 전달

- increase(int[] array)의 매개변수 array는 정수형 배열에 대한 레퍼런스로서 배열 a를 가리킴

- 두 레퍼런스가 하나의 배열을 공유

- main()에서 배열 a를 출력하면 변경된 값(2 3 4 5 6)이 출력


예제 4-8 char[] 배열을 전달받아 출력하는 pringCharArray() 메소드와 배열 속의 공백(' ') 문자를 대치하는 replaceSpace()메소드 작성

  • char c[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 'p', 'e', 'n', 'c', 'i', 'l', '.'}

'안 씀 > java-개념' 카테고리의 다른 글

객체 소멸과 가비지 컬렉션  (0) 2024.05.20
메소드 활용 - 메소드 오버로딩  (0) 2024.05.20
객체 배열  (0) 2024.05.20
this 레퍼런스, 객체 치환  (0) 2024.05.14
생성자  (0) 2024.05.14