< 함수의 3요소 >
1. input : 매개변수, 파라미터, arguments, 인자, 인수, 입력값
2. output : 출력값, 결과값, return, 반환값, 리턴값
3. 기능 : 함수명은 기능을 유추할 수 있어야 한다
< 함수의 구조 >
접근제어자 static 반환 함수명(인자) {
// 함수
}
static : 객체와 무관하게
< 접근제어자의 종류 >
public
private
protected
< 함수의 종류 >
1형, 2형, 3형, 4형
1형
inputX, outputX이 없다
입력과 출력이 없으므로 인자도 없다
그래도 반환이 없다는 의미로 void를 사용한다
import java.util.Scanner;
// 함수
public class Test01 {
public static void main(String[] args) {
System.out.println("출력내용");
hello(); // 호출
hello();
hello();
}
// 1형 : input X, output X
public static void hello() {
System.out.println("안녕하세요!~~");
}
}
함수는 호출하지 않으면 출력되지 않는다
2형
input O, output X
// 2형 : input O, output X
public static void checkNum(int num) {
if(num%2 == 0) {
System.out.println("짝수입니다");
} else {
System.out.println("홀수입니다");
}
}
3형
input X, output O
import java.util.Random;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
//makeMsg();
System.out.println(makeMsg());
System.out.println(makeRandNum());
}
// 3형 : input X, output O
public static String makeMsg() {
Scanner sc = new Scanner(System.in);
String msg;
// 사용자가 메세지를 입력하면,
System.out.print(">> ");
msg = sc.next();
// [사용자가 입력한 문구]를 "반환"할 예정
msg = "[" + msg + "]";
return msg; // 나를 호출한 곳으로 값을 반환
}
public static int makeRandNum() {
// 1~10 사이의 정수를 랜덤으로 반환
Random rand = new Random();
int randNum = rand.nextInt(10)+1;
return randNum;
}
}
입력한 msg를 출력하기 위해서는 main에서 print를 해줘야한다
단순히 makeMsg() 호출하는 건 출력이 되지 않는다
System.out.print(makeMsg());로 작성해줘야 한다
4형
input O, output O
public class Test01 {
public static void main(String args[]) {
System.out.println(checkPrime(4));
System.out.println(checkPrime(4));
System.out.println(checkPrime(7));
// 2. 변수에 저장
boolean flag = checkPrime(2);
System.out.println(flag? "소수" : "소수아님");
System.out.println(checkPrime(4));
}
// 4형 : input O, output O
public static boolean checkPrime(int num) {
int cnt = 0;
for(int i=1; i<=num; i++) {
if(num%i == 0) {
cnt++;
}
}
// 어떤 정수가 소수인지 아닌지를 반환
if(cnt == 2) {
return true;
}
return false;
}
}
output은 오직 하나
< 함수의 장점 >
1. 코드 재사용이 가능하게 함
2. 개발시간/비용이 단축된다
3. 오류의 파급효과 절감
4. 코드 결합도가 낮아짐 (수정은 함수만)
5. 유지보수 용이
call by value : 값에 의한 호출
package class07;
// call by reference : 참조에 의한 호출
public class Test01 {
public static void main(String[] args) {
int a = 10;
int b = 20;
func01(a, b);
System.out.println("메인 함수");
System.out.println("a = " + a);
System.out.println("b = " + b);
}
public static void func01(int a, int b) {
int tmp = a;
a = b;
b = tmp;
System.out.println("func01 함수");
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
값만 이동을 한다
call by reference : 참조에 의한 호출
import java.util.Iterator;
// call by reference : 참조에 의한 호출
public class Test02 {
public static void main(String[] args) {
int[] datas = {1, 2, 3, 4, 5}; // 개발자 공간(Heap 메모리)에 저장되어 있음
// datas는 그 공간의 주소를 가지고 있음
func02(datas); // func02에 그 주소를 보냄
System.out.println("main 함수");
for(int data:datas) {
System.out.print(data + " ");
}
System.out.println();
}
public static void func02(int[] datas) { // 주소가 이동함
datas[0] = 100;
System.out.println("func02 힘수");
for(int data:datas) {
System.out.println(data + " ");
}
System.out.println();
}
}
내가 보낸 값이 배열인데 그 배열명은 주소를 함께 나타내기 때문에 인자에 보낼 경우
값만 이동하지 않고 주소가 함께 이동을 한다 (원본이 이동한다)
'🍏 개발일기' 카테고리의 다른 글
| 매개변수(parameter)와 인수(argument)의 차이 (0) | 2025.10.14 |
|---|---|
| 오버로딩 | 오버라이딩 | 클래스 | 생성자 (0) | 2025.10.14 |
| 이진 탐색 (0) | 2025.09.26 |
| 최소값 찾기 : 디버깅표 그리기 (0) | 2025.09.24 |
| [JAVA] 각 자리 수 더하기 (0) | 2025.09.23 |