JWJ_Hub 2023. 4. 5. 17:32
package function;

public class Ex01 {
	public static void main(String[] args) {
		
		// 함수는 무엇인가?
		
		// 계산식, y = f(x)
		// 코드
		// 일정한 코드를 특정 이름으로 묶어둔 내용
		// 일정한 코드에 의해서 값을 계산하는 내용
		// 변수, 상수 와 마찬가지로 어떤 값을 만들어내는 개체, 함수
		// void 형태의 함수는 값을 만들어내지 않는다
		// produces(생산), consume(소비)
		// [연료를 소비]하면서 엔진을 이용하여 [동력을 생산]
		
		// 자바에서 코드의 기본 단위는 Class 이다
		// 따라서, 모든 함수는 클래스 내부에 만들어진다
		// main 함수에서 호출(실행)하고 싶은 함수는 반드시 static을 붙여서 작성해야 한다
		
		int t1 = add(10, 20);	// 함수의 호출 : 이름을 부르면서 재료가 되는 값(인자)을 전달
		int t2 = pow(2, 10);	// 호출되면 정의된 내용을 수행하고 값을 돌려준다(반환)
		System.out.println("t1 : " + t1);
		System.out.println("t2 : " + t2);
		
//		String.
	}
	
	// 어떤 내용을 수행할지 결정하여 일정한 크기의 코드로 만들어두고, 이름을 붙인다
	// 함수도 값을 만들어내는 요소이므로, 값의 자료형이 필요하다
	// 함수의 자료형은 반환값의 자료형과 일치한다
	// add함수는 두 정수 n1과 n2를 전달받아서 두 값을 더하고, 더한 결과를 정수형으로 반환한다
	static int add(int n1, int n2) {	// 매개변수 : 외부에서 넘어오는 값을 받는 변수
		int answer = n1 + n2;
		return answer;	// return : 함수를 종료하면서, 하나의 값을 호출위치로 넘겨준다
						// re turn
	}
	
	// y = f(x)
	// 반환자료형 함수이름(매개변수 선언)
	static int pow(int n1, int n2) {
		int answer = 1;		// 곱셈연산에 대한 항등원
		for(int i = 0; i < n2; i++) {	// 제어문을 사용할 수 있다
			answer *= n1;
		}
		return answer;
	}
	
	// 몇몇 함수는 값의 반환이 필요하지 않고, 특정 코드를 수행하는 목적으로 사용하기도 한다
	static void sayHello() {	// 값을 전달받을 필요도 없다
		System.out.println("Hello !!");	// 항상 정해진 값만 처리하기 때문
	}
	static void saySomething(String str) {// 전달받은 내용을
		// 만약 특정 조건에서 함수를 강제로 종료하고 싶다면 return; 을 사용할 수 있다
		if(str == null || "".equals(str)) {
			return;	// 현재 줄에서 함수를 즉시 종료하면, 이후 출력문은 실행되지 않는다
		}
		System.out.println(str);	// 출력한다
									// 반환할 값이 없으므로, return 을 작성하지 않아도 된다
	}
	
	
	
	
}