티스토리 뷰
함수를 사용할 때 괄호() 안에 지정하는 값을 인자라고 부를 때도 있고 매개변수라고 부를 때도 있다. 이 둘은 같아보이지만 상황별로 다르게 사용되는데, 어떤 차이가 있는지 알아보자.
- 인자 : 메서드를 호출할 때 괄호() 안에 전달하는 값
- 매개변수 : 인자의 값을 복사해 받아들이는 메서드 선언부에 지정된 변수
코드를 통한 예시를 알아보자.
매개변수
// 메서드의 선언
public static int addNum(int a, int b) {
//parameter : a, b
return a + b;
}
int 형 정수 2개를 매개변수로 받아 합을 리턴하는 메서드이다. 여기서 사용되는 a와 b는 전달되는 값을 담는 변수로써 매개변수라고 할 수 있다.
인자
public static void main(String[] args) {
//메서드 호출
//argument : 10, 20
int result = addNum(10, 20);
System.out.println(result);
}
result 변수 값으로 함수를 호출했다. 이 때 인자로 전달한 값은 10과 20이며, addNum() 메서드 선언 시 int 형식으로 지정한 매개변수 a와 b에 복사되어 함수가 실행된다.
원시 데이터 타입의 인자 전달(복사) 과정
addNum(10, 20); //호출
//값이 복사되는 과정 예시
public static int addNum(int a = 10, int b = 20) {
return a + b;
}
메서드를 호출할 때 원시 데이터 타입(primitive data type)인자는 값이 복사되어 전달된다. 즉, 인자로 전달되는 값은 호출된 메서드의 매개변수에 복사되어 새로운 메모리 공간에 저장된다.
복사된 인자와 원본 인자는 독립적으로 존재하기 때문에 메서드 내에서 매개변수를 변경해도 호출한 곳의 원본 값은 변경되지 않게된다.
객체의 인자전달 과정
class Student {
String name;
//getter, setter, 생성자 생략
}
public class Main {
public static void main(String[] args) {
Student student = new Student("Alice");
System.out.println("Before calling changeName(): " + student.getName());
changeName(student, "Bob");
System.out.println("After calling changeName(): " + student.getName());
}
public static void changeName(Student s, String newName) {
s.setName(newName);
}
}
Before calling changeName(): Alice
After calling changeName(): Bob
객체의 인자 전달은 메서드 호출 시, 객체의 주소(참조값)가 인자로 전달된다. 따라서 메서드 내에서 해당 객체의 내용을 변경할 수 있으며, 호출한 곳에서도 변경 내용이 반영된다.
이는 객체가 참조 타입이기 때문으로, 객체의 복사본이 아닌 원본이 전달되기 때문이다. 따라서 객체를 인자로 전달할 때는 객체의 상태 변경에 주의하며, 필요 시 새로운 객체를 생성하여 사용해야한다.
'Programming > Java' 카테고리의 다른 글
JAVA 생성자(Constructor) 정의 및 예제 (0) | 2022.03.29 |
---|---|
JAVA 메소드 오버로딩 (MethodOverloading)정의 (0) | 2022.03.26 |
[Java] JVM 메모리 구조 (0) | 2022.03.09 |
[Java] 예외처리 : Try/Catch, Throws (0) | 2021.08.19 |
[Java] hashCode vs identityHashCode 차이점 (0) | 2021.08.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- CSS
- CS
- 오류
- 오라클
- SQL
- Thymeleaf
- 넥사크로
- 부트스트랩
- 환경설정
- 개발용어
- 네트워크
- 프로그래머스
- JVM
- 국비교육
- Java
- C++
- 인턴
- 데이터베이스
- Open API
- 백준
- JSP
- svn
- 스프링
- C
- 이클립스
- 스프링부트
- HeidiSQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함