프로그래밍

[자바 기초] day04 : 함수 본문

자바/자바 기초

[자바 기초] day04 : 함수

시케 2023. 5. 8. 17:08
728x90
반응형

2023.05.08.월

함수

하나의 기능을 수행하는 코드이다

 

함수를 사용하면 모듈화, 컴포넌트화 할 수 있다.

완성된 기능들의 묶음을 하나하나 분리할 수 있는 것이다

 

반복문공백없이 여러번 (외부의 다른  수행없이) 반복하지만
함수는 외부의 다른 수행을 하다가 또 다시 반복할 수 있다

 

반복문과 함수 둘 다

코드 재사용를 재사용한다는 측면은 같다

 

함수의 장점

오류 파급효과 감소

:개발시간 단축
:비용 감소
:이익 증가
:유지보수 용이

 

함수의 3요소

1.input(인자, 입력값)
2.output(반환, 결과값)
3.기능

 

함수 선언

접근제어자 (static) OUTPUT 함수명 (INPUT) {

}

 

함수에는 총 4가지 유형이 있다

a) input X output X
b) input O output X
c) input X output O
d) input O output O

 

함수 선언 예)

//a 유형
public static void hello() {
		System.out.println("안녕하세요! :D");
	}
//b 유형
public static void printStar(int num) {
		for(int i=0; i<num; i++) {
			System.out.println("*");
		}
	}

 

 

함수가 호출되면 입력값과 함께 해당 함수가 실행되고 정해진 값 반환후 종료된다

종료시 메모리 반환과 함께 소멸된다

 

run 버튼을 누르면 main이 실행되며  class는 실행되지 않는다
함수를 사용하기 위해서는 함수를 호출해야 한다

 

함수를 사용할때는 다음 사항을 염두해야 한다

1.함수끼리 메모리 공간을 공유하지 않는다
(호출이 끝나면 메모리 해제)
---> 자원 반환

2. 연산 우선순위

전위 증감>>함수 호출>>후위 증감


3. 함수 호출시에는 call by value 방식으로 "값(value)"을 보낸다
주소나 변수를 보내는 것이 아니다

 

101번지에 저장된 값 120일때,
call by value: 값인 120 너를 가져온다

call by reference: 101번지에 저장된 값을 가져온다

 

예제)

package class06;

public class Test01 {
	// a 유형
	public static void hello() {// 기능을 유추할 수 있도록 지어야 한다
		System.out.println("안녕하세요! :D");
	}// 함수 정의 선언

	// b 유형
	public static void printStar(int num) {
		for (int i = 0; i < num; i++) {
			System.out.println("*");
		}
	}

	public static void main(String[] args) {

		System.out.println("메인함수");
		// 함수 호출(사용)
		hello();
		printStar(5); // 함수 호출시 입출력 값 정확히
		
		//함수끼리 메모리 공간을 공유하지 않는다

		System.out.println("입력");
		System.out.println("메뉴 나왔습니다");
		printStar(3);
		System.out.println("먹고? 포장?");
		hello();
		printStar(2);
	}

}

 

예제2)

package class06;

public class Test02 {
	public static void func(int a) { //int b로 바꾸면 이해가 쉽다
		a=100;
		System.out.println("func()입니다 a= "+a);
	}
	

	public static void main(String[] args) {
		int a = 10;
		System.out.println("a= "+a);	//출력: a= 10
		func(a);						//출력: a= 100
		System.out.println("a= "+a);	//출력: a= 10
		func(++a);						//출력: a= 100 a=11로 변경
		System.out.println("a= "+a);	//출력: a= 11
		

	}

}

예제3)

package class06;

import java.util.Scanner;

//[연습문제]
//1. 점수를 알려주면,
//2. "ㅁㅁ점은 ㅁ등급입니다."라고 출력한다
//3. 80~100 	A
//   60~79 		B
//   0~59 		C
//4. printGrade()라는 함수를 선언하여 작성한다

public class Test03 {
	
	public static void printGrade(int score){
		String grade;
		
		if (score>=80 && score<=100) {
			grade="A";
		}
		else if(score>=60 && score<=79) {
			grade="B";
		}
		else if(score>=0 && score<=59) {
			grade="C";
		}
		else {
			System.out.println(score+"점은 잘못된 점수입니다");
			return;	//함수를 즉시종료 합니다
		}
		System.out.println(score+"점은 "+grade+" 등급입니다");
		
	}
	
	
	public static void main(String[] args) {
		int score;
		Scanner sc = new Scanner(System.in);
		System.out.print("점수를 입력해주세요: ");
		score = sc.nextInt();

		printGrade(score);
	}
}

예제)

package class06;

import java.util.Random;

public class Test06 {
	
	//test1 함수 c 유형
	public static void test1() {//메서드 시그니처
		Random rand = new Random();
		int N = rand.nextInt(11)+10;	//10~20
		System.out.println("랜덤수: "+N);
		
		int sum=0;
		for(int i=1; i<=N; i++) {
			sum+=i;
		}
		System.out.println(N+"까지의 총합: "+sum);
	}
	
	//test2 함수
	public static int test2(int a, int b) {
		int num=0;
		for(int i=a; i<=b; i++) {
			if(i%2==0) {
				num++;
			}
		}
		return num;
	}
	
	//test3 함수
	public static String test3(int N) {
		String msg;
		
		if(N>10) {
			msg="apple";
		}
		else {
			msg="banana";
		}
		
		return msg;
	}
	

	public static void main(String[] args) {
		
		test1();
		test2(1,5);
		test3(10);
		System.out.println("짝수의 개수: "+test2(1,5));
		System.out.println(test3(10));

	}

}

 

728x90
반응형
Comments