매개변수(Parameter)

JOY🌱·2022년 12월 29일
0

☕ Java

목록 보기
19/40
post-thumbnail

💁‍♀️ 매개변수(Parameter)란,
메소드를 호출할 때 인자(argument)로 전달된 값을 메소드 내부에서 사용할 수 있게 해주는 변수


👀 메소드의 파라미터 선언부에 다양한 종류의 값을 인자로 전달하여 호출하기

📍 매개변수(parameter)로 사용 가능한 자료형

1) 기본 자료형
2) 기본 자료형 배열
3) 클래스 자료형
4) 클래스 자료형 배열 (추후 학습)
5) 가변인자

◼ ParameterTest Class

public class ParameterTest {

[1] 기본 자료형

	public void testPrimaryTypeParameter(int num) {
		System.out.println("매개변수로 전달받은 값 : "+ num);
		num += 10;
	}

[2] 기본 자료형 배열

	public void testPrimaryTypeArrayParameter(int[] iarr) {
		
		>>> 배열의 주소가 전달된다.
		>>>, 인자로 전달하는 배열과 매개변수로 전달받은 배열은 서로 동일한 배열을 가리킴 (얕은 복사)
		System.out.println("매개변수로 전달 받은 값 : " + iarr);
		
		System.out.println(Arrays.toString(iarr));
		
		>>> 메소드 내에서 배열의 값을 변경하면 호출한 main 메소드에서도 변경된 값을 확인할 수 있음
		iarr[0] = 99;
	}

[3] 클래스 자료형

	public void testClassTypeParameter(Rectangle rectangle) {
    >>> 클래스 자료형도 매개변수에 넣을 수 있음 (클래스자료형 레퍼런스변수명)
		
		System.out.println("매개변수로 전달 받은 값 : " + rectangle); 
        >>> 인자로 전달하는 값과 같은 주소값을 참조하고있음 (증거 : 출력시, 주소값 같음)
		
		System.out.println(rectangle.getWidth());
        >>> Rectangle 클래스의 getWidth를 참조해옴
		System.out.println(rectangle.getHeight());
        >>> Rectangle 클래스의 getHeight를 참조해옴
		
		rectangle.setWidth(100.0);
        >>> 미리 만들어둔 Rectangle 클래스의 setter메소드를 이용하여 값을 100으로 변경
		rectangle.setHeight(120.0);
        >>> 미리 만들어둔 Rectangle 클래스의 setter메소드를 이용하여 값을 120으로 변경
	}

[4] 가변 인자

	public void testVariableLengthArrayParameter(String name, String... hobby) { 
    >>> String... hobby : 가변 인자. name 이후, 두 번째 전달되는 값부터 몇 개인지 정확히 정해둘 수 없음. 
    >>> 1개가 될 수도 10개가 될 수도 있음

		>>> 가변인자는 배열로 취급된다. (출력시, 배열 다루듯 하기)
		System.out.println("이름 : " + name);
		System.out.println("취미의 개수 : " + hobby.length); 
		System.out.println("취미 : " + Arrays.toString(hobby));
        >>> ==> 즉 hobby는 배열로 취급됨
	
	}
	>>> 가변 인자를 매개변수로 이용한 메소드는 모호성으로 인해 오버로딩 하지않는 것이 좋음
	>>> public void testVariableLengthArrayParameter(String... hobby){} 
	>>> App에서 출력할 때, 오버로딩한 메소드들 중 어떤 것을 사용해야할지 컴퓨터는 모름 -> 에러
}

📌 Ref.

* 가변 인자 배열은 몇 개가 전달 될지 모르는 상황이기 때문에 이름과 구분하기 위해 뒤쪽에 작성해야하며, 
  앞 쪽에 작성하는 경우 에러가 발생

◼ Rectangle Class

public class Rectangle {
	
	// 필드 
	private double width;
	private double height;
	
	// 생성자 
	>>> 기본 생성자로 객체 생성하는 것을 막고,
	>>> 모든 필드를 초기화 하는 생성자로 초기값을 입력해서 인스턴스 생성하도록 제한
	public Rectangle(double width, double height) {
		this.width = width;
		this.height = height;
	}
	 
	// getter & setter
	public void setWidth(double width) {
		this.width = width;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	
	public double getWidth() {
		return width;
	}
	public double getHeight() {
		return height;
	}
}

◼ Application Class

public class Application {

	public static void main(String[] args) {
		
		// 객체 생성
		ParameterTest pt = new ParameterTest();
		>>> pt : ParameterTest 클래스를 참조하는 레퍼런스변수

[1] 기본 자료형을 매개변수로 전달받는 메소드 호출 확인

		>>> 기본자료형 8가지 모두 가능
		int num = 20;
		pt.testPrimaryTypeParameter(num);
		System.out.println("메소드 호출 후 num : " + num);

[2] 기본 자료형 배열을 매개변수로 전달받는 메소드 호출 확인

		int[] iarr = {1, 2, 3, 4, 5};
		
		System.out.println("인자로 전달 하는 값 : " + iarr);
		
		pt.testPrimaryTypeArrayParameter(iarr); >>> 주소값 (얕은 복사)
		System.out.println(Arrays.toString(iarr));
        >>> int[0]99로 변경되어 나온다. 
        >>> (testPrimaryTypeArrayParameter 메소드로 인해)

[3] 클래스 자료형을 매개변수로 전달받는 메소드 호출 확인

		Rectangle r = new Rectangle(10.0, 10.0);
        >>> r : Rectangle 클래스를 참조하는 레퍼런스변수
        >>> Rectangle 메소드에 기본 생성자를 만들지 않았기 때문에 꼭 값을 넣어주어야함
		pt.testClassTypeParameter(r);
        >>> 주소값을 넘기고 있음
		
		System.out.println("인자로 전달하는 값 : " + r);
		pt.testClassTypeParameter(r);
        >>> pt(ParameterTest 클래스를 참조하는 레퍼런스변수)
		
		System.out.println(r.getWidth());
		System.out.println(r.getHeight());

[4] 가변 인자를 매개변수로 전달받는 메소드 호출 확인

		>>> 인자로 전달하는 값의 개수가 정해져있지 않은 경우 가변 인자를 활용할 수 있음
		pt.testVariableLengthArrayParameter("효연이"); >>> 가변 인자는 전달하지 않아도 됨
		pt.testVariableLengthArrayParameter("우현이", "요리", "유투브", "롤", "포커");
		pt.testVariableLengthArrayParameter("치즈", new String[] {"배까기", "코골기", "간식먹기"});
	}

💻 Mini Console

매개변수로 전달받은 값 : 20
메소드 호출 후 num : 20
인자로 전달 하는 값 : [I@626b2d4a
매개변수로 전달 받은 값 : [I@626b2d4a
[1, 2, 3, 4, 5]
[99, 2, 3, 4, 5]
매개변수로 전달 받은 값 : com.greedy.section05.parameter.Rectangle@1c4af82c
10.0
10.0
인자로 전달하는 값 : com.greedy.section05.parameter.Rectangle@1c4af82c
매개변수로 전달 받은 값 : com.greedy.section05.parameter.Rectangle@1c4af82c
100.0
120.0
100.0
120.0
이름 : 효연이
취미의 개수 : 0
취미 : []
이름 : 우현이
취미의 개수 : 4
취미 : [요리, 유투브, 롤, 포커]
이름 : 치즈
취미의 개수 : 3
취미 : [배까기, 코골기, 간식먹기]
profile
Tiny little habits make me

0개의 댓글

관련 채용 정보