Salted Caramel

[수업 7일차] 21.08.10, method, call-by-value ,call-by-reference , 실인수, 가인수 본문

coding/[2021.08.02~2022.01.24] 수업복습

[수업 7일차] 21.08.10, method, call-by-value ,call-by-reference , 실인수, 가인수

꽃무늬라떼 2021. 8. 11. 04:09
	//반환된 값이 일반 숫자가 반환이 되는 경우
	
	public static int method1() {	//(int자료형 데이터를 반환이 되게끔 하겠다.)
		
		return 55;	//(여기서 작업한 작업값을 돌려주겠다. 55.0-double 자료형)
		
	}
	
	// 반환되는 겂이 변수가 반환이 되는 경우
	public static int method2(int su1, int su2) {
		int sum = (su1 * 2) + (su2 * 2);
		return sum;
	}
	// 반환되는 값이 수식이 반환 되는 경우
	public static int method3(int num1, int num2) {
		return num1 + num2;
	}
	
	//반환되는 값이 문자열이 반환이 되는 경우
	public static String method4() {
		return "홍길동";
	}
	
	//반환되는 값이 문자열 변수가 반환이 되는 경우
	public static String method5(String str1, String str2) {
		String result = str1 + str2;
		return result;
		
	}
	//반환되는 값이 문자열 결합(+) 수식이 반환이 되는 경우
	public static String method6(String s1, String s2) {
		return s1 + s2;
	}

p249

 

1. main 메서드가 순차적으로 진행이 되는데 add라는 메서드를 만나면

2. 제어권이 위에 있는 add로 넘어가게된다.

3. add메서드라 순차적으로 진행이 되다가 end문( } )을 만나면 메서드를 호출한 쪽으로(main 메서드 안에 있는 add();) 돌아오게 되고

4. 그 다음 문장이 진행이 된다.(System.out,println("프로그램 종료")


  • 06_Class & Method-Ex01

메서드(Method)                                                                     

: 메인 메서드에서 했던 내용을 기능별로 분류를해서 메인메서드에 부담을 주지않고 기능별로 분리한다.

* 메서드(method)?
 * 1. C언어에서의 함수(function)와 같음.
 * 2. 기능을 정의하는 단위(예 : 덧셈 기능, 뺄셈기능 등등)
 * 3. 하나의 기능만을 정의하는 것이 좋음.
 * 4. 자주 반복되는 내용을 정의해 놓고, 필요할 때 호출하여 사용함.
 * 
 * 형식)
 *  	[접근제한] 반환형 메서드이름(매개변수 혹은 인자) {
 *  			메서드 호출시 실행될 문장;
 *  		}
 *  	- 접근제한: public > protected > default > private
 *  			 (클래스, 메서드, 변수 앞에 사용됨)
 *  			- public : 누구나 다, 아무나 접근 가능.
 *  			- protected : 같은 패키지에서 접근 가능.
 *  						    다른 패키지는 상속 관계만 접근 가능.
 *  			- default : 같은 패키지에서만 접근 가능. 
 *  						상속관계라도 접근 안됨. 
 *  			- private : 외부에서 접근 불가. 
 *  	- 반환형 : -메서드를 실행하고  특정 타입의 결과를 반환해 주겠다고 선언하는 
 *  			  것을 반환형(리턴타입)이라고 말함. 
 *  			- 메서드에서 실행된 결과값을 돌려주는 자료형으로 생략이 불가능함.
 *  			- 해당 메서드가 어떤 동작이나 기능을 실행한 후에 결과를 알려주는 자료형.
 *  			- 메서드를 호출한 곳으로 결과를 되돌려줄 때 사용하는 자료형.
 *  			- 만약 결과를 되돌려줄 필요가 없는 경우에는 void라는 키워드를 작성함. 
 *  			- 반환형이 void인 경우를 제외하고 결과를 되돌려 주어야 할 때는 메서드 
 *  			  명령문 맨 마지막에 return이라는 키워드를 작성 후, 앞에서 선언한 반환형과 
 *  			같은 자료형으로 결과를 되돌려준다.
 *  	- 메서드 이름 : - 식별자, 소문자로 시작, 두 개의 단어가 결합된 경우에는 
 *  					두 번째 글자의 첫 글자는 대문자로 작성하는 것이 관례임.
 *  	- 매개변수 : - 외부에서 값을 넘겨 받는 변수, 생략 가능.
 *  			  - 메서드 호출 시 전달되는 값의 저장을 위한 용도로 사용이 됨.
 *  			  - 메서드 호출 시 전달되는 값의 자료형과 매개 변수의 자료형은 
 *  				반드시 일치해야 함.
 *  
 *  	- 메서드 실행문 : -해당 메서드가 호출된 경우에만 실행이 됨

 

package Method;

import java.util.Scanner;

/*
 * 메서드(method)?
 * 1. C언어에서의 함수(function)와 같음.
 * 2. 기능을 정의하는 단위(예 : 덧셈 기능, 뺄셈기능 등등)
 * 3. 하나의 기능만을 정의하는 것이 좋음.
 * 4. 자주 반복되는 내용을 정의해 놓고, 필요할 때 호출하여 사용함.
 * 
 * 형식)
 *  	[접근제한] 반환형 메서드이름(매개변수 혹은 인자) {
 *  			메서드 호출시 실행될 문장;
 *  		}
 *  	- 접근제한: public > protected > default > private
 *  			 (클래스, 메서드, 변수 앞에 사용됨)
 *  			- public : 누구나 다, 아무나 접근 가능.
 *  			- protected : 같은 패키지에서 접근 가능.
 *  						    다른 패키지는 상속 관계만 접근 가능.
 *  			- default : 같은 패키지에서만 접근 가능. 
 *  						상속관계라도 접근 안됨. 
 *  			- private : 외부에서 접근 불가. 
 *  	- 반환형 : -메서드를 실행하고  특정 타입의 결과를 반환해 주겠다고 선언하는 
 *  			  것을 반환형(리턴타입)이라고 말함. 
 *  			- 메서드에서 실행된 결과값을 돌려주는 자료형으로 생략이 불가능함.
 *  			- 해당 메서드가 어떤 동작이나 기능을 실행한 후에 결과를 알려주는 자료형.
 *  			- 메서드를 호출한 곳으로 결과를 되돌려줄 때 사용하는 자료형.
 *  			- 만약 결과를 되돌려줄 필요가 없는 경우에는 void라는 키워드를 작성함. 
 *  			- 반환형이 void인 경우를 제외하고 결과를 되돌려 주어야 할 때는 메서드 
 *  			  명령문 맨 마지막에 return이라는 키워드를 작성 후, 앞에서 선언한 반환형과 
 *  			같은 자료형으로 결과를 되돌려준다.
 *  	- 메서드 이름 : - 식별자, 소문자로 시작, 두 개의 단어가 결합된 경우에는 
 *  					두 번째 글자의 첫 글자는 대문자로 작성하는 것이 관례임.
 *  	- 매개변수 : - 외부에서 값을 넘겨 받는 변수, 생략 가능.
 *  			  - 메서드 호출 시 전달되는 값의 저장을 위한 용도로 사용이 됨.
 *  			  - 메서드 호출 시 전달되는 값의 자료형과 매개 변수의 자료형은 
 *  				반드시 일치해야 함.
 *  
 *  	- 메서드 실행문 : -해당 메서드가 호출된 경우에만 실행이 됨
 */

public class Ex01 {

	public static void add() {
		System.out.println("add() 메서드 호출");
		System.out.println("20 + 10 >>> " + (20 + 10));
	}
	
	public static void input() {
		Scanner sc = new Scanner(System.in);
		int[] arr = new int[3];
		
		for(int i=0; i<arr.length; i++) {
			System.out.print((i+1) +"번째 정수 입력 >>> ");
			arr[i] = sc.nextInt();
		}
		
		for(int i=0; i<arr.length; i++) {
			System.out.println("arr["+"] >>> " +arr[i]);
		}
		sc.close();
	}
	
	
	
	public static void main(String[] args) {
		
		System.out.println("프로그램 시작");
		
		//메서드를 호출해 보자.
		add();
		input();
		
		System.out.println("프로그램 종료");

	}

}

 


  • 06_Class & Method-Ex02
package Method;

import java.util.Scanner;

public class Ex02 {
//속성은 없고 기능만 2가지인 메서드(total,main 메서드)
	public static void total() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 입력 : ");
		int su = sc.nextInt();
		
		int sum = 0;	//(누적시킬 변수 필요)
		
		for(int i=1; i<=su; i++) {
			sum = sum + i;
			
		}
		System.out.println("1 ~ " +su+ " 까지의합 >>>" +sum);
		
		sc.close(); //total() 메서드 end
	}
	
	public static void main(String[] args) {
		
		System.out.println("프로그램 시작");
		
		//[문제] 1부터 키보드로 입력받은 수까지의 합을 
		//		구하는 메서드를 호출해 보자자
		total();
		
		
		System.out.println("프로그램 종료");
		
		
	}

}

  • 06_Class & Method-Ex03

실인수 , 가인수                                                              

* 매개변수가 있는 메서드 정의
 * 
 * 형식) 
 * 		[접근제한] 반환형 메서드이릅(type 변수1, type 변수2) {
 * 				메서드 호출 시 실행 문장;
 * }
 * 
 * 	- 실인수와 가인수
 * 	* 실인수 : 매개변수에 전달할 실제 값 ==> 메서드를 호출할 때 사용함. 
 * 	* 가인수 : 매개변수 ==> 메서드의 정의.
 * 	* 실인수와 가인수는 반드시 type, 순서, 갯수가 일치해야함(중요한 내용).
package Method;

import java.util.Scanner;

/*
 * 매개변수가 있는 메서드 정의
 * 
 * 형식) 
 * 		[접근제한] 반환형 메서드이릅(type 변수1, type 변수2) {
 * 				메서드 호출 시 실행 문장;
 * }
 * 
 * 	- 실인수와 가인수
 * 	* 실인수 : 매개변수에 전달할 실제 값 ==> 메서드를 호출할 때 사용함. 
 * 	* 가인수 : 매개변수 ==> 메서드의 정의.
 * 	* 실인수와 가인수는 반드시 type, 순서, 갯수가 일치해야함(중요한 내용).
 */

public class Ex03 {
	public static void total(int kor, int eng, int mat) {
		System.out.println("sum >>> " +(kor + eng + mat));
	}
	public static void total(int su) {
		
		int sum = 0;
		
		for(int i=1; i<=su; i++) {
			sum += i;
		}
		System.out.println("1 ~ " +su+ "까지의 합 >>> " +sum);
		
	}
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		total(95, 88, 92);   //실인수

		System.out.println("정수를 입력해 주세요. : ");
		
		total(sc.nextInt());	//(키보드로 입력받은 실인수)
		
		
		sc.close();
	}

}

실인수(실제인수)

메서드에 넘겨줄 데이터들 = 실제 데이터(실인수)

- 타입이 일치 :정수형 => int 형

95라는 실제값이 kor 이라는 변수에 저장이 됨, 88

- 순서도 일치

- 실인수 3개니까 매개변수도 3개=> 동일한 갯수만큼 자료형을 선언해 줘야한다. 

매개변수가 있는 메서드를 선언함.

지역변수 : 이 메서드 안에서만 사용이 되는 변수를 말한다. 

 

 

반드시 자료형 int를 다 써줘야한다.

 

 

  • 방법1

 

  • 방법2

 


  • 06_Class & Method-Ex04
package Method;

import java.util.Scanner;

//간단한 계산기 예제

public class Ex04 {

	public static void plus(int num1, int num2) {
		System.out.println("덧셈>>> " +(num1 + num2));
	}
	public static void minus(int num1, int num2) {
		System.out.println("뺄셈>>> " +(num1 - num2));
	}
	public static void mul(int num1, int num2) {
		System.out.println("곱셈>>> " +(num1 * num2));
	}
	public static void divide(int num1, int num2) {
		System.out.println("나눗셈(몫)>>> " +(num1 / num2));
	}
	public static void mod(int num1, int num2) {
		System.out.println("나머지>>> " +(num1 % num2));
	}
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		// 1. 키보드로부터 두 개의 정수와 연사자를 입력을 받자. 
		
		System.out.print("첫번째 정수 입력 : ");
		int su1 = sc.nextInt();
		
		System.out.print("두번째 정수 입력 : ");
		int su2 = sc.nextInt();
		
		System.out.print("연산자(+, -, *, /, %) 중 하나를 입력하세요. :");
		String op = sc.next();
		
		// 2. 연산자 변수에 입력된 연산기호를 가지고
		// 	  해당 기호에 맞는 메서드를 호출해 주자.
		switch(op) {
		case "+" :
				plus(su1, su2);
				break;
		case "-" :
			minus(su1, su2);
			break;
		case "*" :
			mul(su1, su2);
			break;
		case "/" :
			divide(su1, su2);
			break;
		case "%" :
			mod(su1, su2);
			break;
			
		}
			
		sc.close();
		
	}

}


  • 06_Class & Method-Ex05, Ex06

 call-by-value                                                  

call-by-reference                                             

 * 메서드 호출 방식 - 2가지   p264
 * 1. call by value
 * 		- 값을 전달하여 호출하는 방식.
 * 		- 매개변수가 기본자료형(int,double) 사용.
 * 2. call by reference - 많이 사용하는 방식(무지무지 중요함)
 * 		- 주소값을 전달하여 호출하는 방식.
package Method;
/*
 * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 * 메서드 호출 방식 - 2가지   p264
 * 1. call by value
 * 		- 값을 전달하여 호출하는 방식.
 * 		- 매개변수가 기본자료형(int,double) 사용.
 * 2. call by reference - 많이 사용하는 방식(무지무지 중요함)
 * 		- 주소값을 전달하여 호출하는 방식.
 * 		- 매개변수가 참조자료형(배열, 클래스명) 사용.
 */

public class Ex05 {

	public static void call(int num) {
		System.out.println("call() 메서드 호출.....");
		num = 100;
	}
	
	public static void main(String[] args) {
		
		//1. call by value 방식
		int num = 200;
		System.out.println("메서드 호출 전.....");
		System.out.println("num >>> " + num);

		
		call(num);
		
		System.out.println("메서드 호출 후.....");
		System.out.println("num >>> " + num);

		
	}

}
package Method;

// 2. call by reference

public class Ex06 {

	public static void change(int[] array) {
		System.out.println("array >> " + array);
		array[0] = 100;
		array[1] = 200;
		array[2] = 300;
	}
	 
	public static void main(String[] args) {
		
		int[] arr = new int[3];
		arr[0] = 10; arr[1] = 20; arr[2] = 30; 	//방들에게 10, 20, 30을 넣음
		
		System.out.println("change() 메서드 호출 전.....");
		System.out.println(arr);   //배열이름은 주소값
		for(int i=0; i<arr.length; i++) {
			System.out.println("arr["+i+"] >>>"+ arr[i]);
		}
		
		// int[] array =arr;
		change(arr);	//실제인수로 넘겨줌 arr ->array(가인수)

		System.out.println("change() 메서드 호출 후.....");
		
		for(int i=0; i<arr.length; i++) {
			System.out.println("arr["+i+"] >>>"+ arr[i]);
		}
	}

}

*arr 이라는 배열 이름을 준다. 배열 이름을 출력 했을 때 [I@15db9742 이 출력된다. 배열 이름은 주소값으로 배열은 자료형의 크기가 정해지지않아서, heap이라는 메모리 공간에 만들어진다. 시작 주소값은 배열이름이 가지고 있다. (C언어에서 point와같은 개념이다.)

arr 에서 가게 되면 시작 주소값으로 갔을 때 세개의 연속의 메모리 공간이 잡혀져 있는데 각각의 방의 이름이 arr[1], arr[2], arr[3]이라고 하고 각 방에 10, 20, 30을 집어 넣었을 때, 배열에 주소값을 실제 인수로 change(arr)로 넘겨줌. 이것을 받는 가인수는 array이다.  값이 저장된다. 

=> int[] array =arr; 

=> array라는 변수에 arr 배열의 주소값을 지정하는 것과 똑같은 개념

 

 

call-by-value

 

change int자료형을 동일하게 잡아줘야한다.
주소갑이 같은 값

 

 

주소값을 매개변수로 받아서 

똑같은 주소값을 복사하고 복사된 값을 가지고 데이터 변경이 일어난다.

(주소값가지고 이동이 됨

주소값을 복사하고 복사한 값을 가지고 데이터 변경이 일어남 => 참조주소값이 이동)

*참조 주소값을 인자로 넘기고 매개변수에서는 그 참조 주소값을 받아서 처리하는 것

같은 인덱스 => 값이 바뀌면 전체적으로 바뀜(같은 주소값을 가지고 있기 때문이다.)

 

*new 라고 하면 heap 영역에 만들어짐.

 

 

Stack 영역에 arr 배열의 시작 주소값을 가지고 있음,

배열이름만 다를 뿐이지 같은 인덱스, 같은 주소값이다.

 

 

 

 


  • 06_Class & Method-Ex07

메서드 호출시 반환형

: 메서드 호출하고 호출한 것에 대해서 결과값을 돌려받는 것

 

 

package Method;

//매서드 호출시 반환형

public class Ex07 {

	//반환된 값이 일반 숫자가 반환이 되는 경우
	
	public static int method1() {	//(int자료형 데이터를 반환이 되게끔 하겠다.)
		
		return 55;	//(여기서 작업한 작업값을 돌려주겠다. 55.0-double 자료형)
		
	}
	
	// 반환되는 겂이 변수가 반환이 되는 경우
	public static int method2(int su1, int su2) {
		int sum = (su1 * 2) + (su2 * 2);
		return sum;
	}
	// 반환되는 값이 수식이 반환 되는 경우
	public static int method3(int num1, int num2) {
		return num1 + num2;
	}
	
	//반환되는 값이 문자열이 반환이 되는 경우
	public static String method4() {
		return "홍길동";
	}
	
	//반환되는 값이 문자열 변수가 반환이 되는 경우
	public static String method5(String str1, String str2) {
		String result = str1 + str2;
		return result;
		
	}
	//반환되는 값이 문자열 결합(+) 수식이 반환이 되는 경우
	public static String method6(String s1, String s2) {
		return s1 + s2;
	}	
		
	
	public static void main(String[] args) {  //(값을 돌려줄 필요가 없으면 void)
		
		//int su = method1();		//(메서드에 대한 실행값을 받는..?)

		System.out.println
		("method1() 메서드 호출 후 반환된 값 >>> " + method1());
		
		System.out.println
		("method2() 메서드 호출 후 반환된 값 >>> " + method2(145, 200));
		
		System.out.println
		("method3() 메서드 호출 후 반환된 값 >>> " + method3(145, 200));
		
		System.out.println
		("method4() 메서드 호출 후 반환된 값 >>> " + method4());
		
		System.out.println
		("method5() 메서드 호출 후 반환된 값 >>> " + method5("대한", "민국"));
		
		System.out.println
		("method6() 메서드 호출 후 반환된 값 >>> " + method6("이", "순신"));
		
	}

}//(메서드를 호출하고 결과 값을 돌려 받는 과정 반환형)

 

메서드를 호출한 쪽으로 돌려준다.메서드를 선언했을때의 반환형과 같은 쪽으로 메서드를 호출하게끔한다. 

 

 


  • 06_Class & Method-Ex08
package Method;

import java.util.Scanner;

// 성적 처리를 메서드를 이용하여 진행해 보자.

public class Ex08 {
	

	public static int total(int k, int e, int m) {
		return k + e + m;	//(변수는 4바이트의 메모리를 잡아먹어서 수식으로 받기)
	}
	
	//평균을 구하는 메서드
	public static double average(int tot) {
		return tot / 3.0 ;
		
		
	}
	
	// 학점을 구하는 메서드
	public static String hakjum (double avg) {
		String grade = ""; //String grade = null;
		
		if(avg >= 90) {
			grade = "A학점";
		}else if(avg >= 80) {
			grade = " B학점";
		}else if(avg >= 70) {
			grade = " C학점";
		}else if(avg >= 60) {
			grade = " D학점";
		}else {
			grade = "F학점";
		}
		return grade;
	}
	
	
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		// 1. 키보드로 이름, 국어점수, 영어점수, 수학점수를 
		// 	  입력을 받자.
		
		System.out.print("이름을 입력하세요. : ");
		String name = sc.next();
		
		System.out.print("국어 점수 입력 : ");
		int kor = sc.nextInt();
		
		System.out.print("영어 점수 입력 : ");
		int eng = sc.nextInt();
		
		System.out.print("수학 점수 입력 : ");
		int mat = sc.nextInt();
		
		// 2. 총점을 구하자. ==> 총점 메서드를 호출
		int sum = total(kor, eng, mat);	//(입력된 값이 실제 값으로 되야한다, 3변수의 값이 sum변수에) 
		
		// 3. 평균을 구하자. ==> 평균 메서드를 호출
		double avg = average(sum);   // (평균 구할 때 실인수로 넘김)
		
		// 4. 학점을 구하자. ==> 학점 메서드를 호출
		String grade = hakjum(avg); 
		
		// 5. 화면에 성적을 출력해 보자.
		System.out.println("이     름 : " +name);
		System.out.println("국어점수 : " + kor + "점" );
		System.out.println("영어점수 : " + eng + "점" );
		System.out.println("수학점수 : " + mat + "점" );
		System.out.println("총   점 : " + sum + "점" );
		System.out.printf("평    균 : %.2f점\n", avg );
		System.out.println("학    점 : " + grade);
		//해당 메서드에서 반환형으로 처리해준 경우
	}

}

메서드 다중정의 -동일한 이름의 메서드

 


  • 06_Class & Method-Ex09
package Method;

import java.util.Scanner;

public class Ex09 {

	// 2과목의 총점을 구하는 메서드
	public static int sum2(int k, int e) {
		return k + e;
	}
	// 3과목의 총점을 구하는 메서드
	public static int sum3(int k, int e, int m) {
		return k + e + m;
	}
	// 4과목의 총점을 구하는 메서드
	public static int sum4(int k, int e, int m, int j) {
		return k + e + m + j;
	}
	
	
	public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);

		System.out.print("국어 점수 입력 : ");
		int kor = sc.nextInt();
		
		System.out.print("영어 점수 입력 : ");
		int eng = sc.nextInt();
		
		System.out.print("수학 점수 입력 : ");
		int mat = sc.nextInt();
		
		System.out.print("자바 점수 입력 : ");
		int java = sc.nextInt();
		
		System.out.println("2과목 총점 >>> " + sum2(kor,eng));
		
		System.out.println("3과목 총점 >>> " + sum3(kor,eng, mat));
	
		System.out.println("4과목 총점 >>> " + sum4(kor,eng, mat, java));
	
	
		sc.close();
}
}

  • 06_Class & Method-Ex10

p283

 *  메서드 다중정의(method overloading)
 *  - 동일한 클래스에서 동일한 이름의 메서드가 여러 개 정의되는 자바문법.
 *  - 일관된 이름을 정의할 수 있어서 개발자(사용자)에게 코드의 직관성을 제공해 줌.
 *  
 *  [메서드 다중정의 규칙]
 *  1. 메서드 이름이 동일해야함.
 *  2. 반드시 갯수가 같은 경우 매개변수는 자료형이 다르거나
 *     또는 매개변수의 갯수가 달라야 함.
 *  3. 리턴타입(반환형)은 무관함.

동일한 클래스의 이름의 메서드가 여러개 정의 되면 어디로 가야할지 알 수가 없기 때문에 정의해 줘야한다.

반드시 갯수가 같은 경우 매개변수는 자료형이 다르거나 매개 변수의 갯수가 달라야함.

package Method;

import java.util.Scanner;

/*
 *  메서드 다중정의(method overloading)
 *  - 동일한 클래스에서 동일한 이름의 메서드가 여러 개 정의되는 자바문법.
 *  - 일관된 이름을 정의할 수 있어서 개발자(사용자)에게 코드의 직관성을 제공해 줌.
 *  
 *  [메서드 다중정의 규칙]
 *  1. 메서드 이름이 동일해야함.
 *  2. 반드시 갯수가 같은 경우 매개변수는 자료형이 다르거나
 *     또는 매개변수의 갯수가 달라야 함.
 *  3. 리턴타입(반환형)은 무관함.
 */

public class Ex10 {

		// 2과목의 총점을 구하는 메서드
		public static int sum(int k, int e) {
			return k + e;
		}
		// 3과목의 총점을 구하는 메서드
		public static int sum(int k, int e, int m) {
			return k + e + m;
		}
		// 4과목의 총점을 구하는 메서드
		public static int sum(int k, int e, int m, int j) {
			return k + e + m + j;
		}
		
		
		public static void main(String[] args) {
		
			Scanner sc = new Scanner(System.in);

			System.out.print("국어 점수 입력 : ");
			int kor = sc.nextInt();
			
			System.out.print("영어 점수 입력 : ");
			int eng = sc.nextInt();
			
			System.out.print("수학 점수 입력 : ");
			int mat = sc.nextInt();
			
			System.out.print("자바 점수 입력 : ");
			int java = sc.nextInt();
			
			System.out.println("2과목 총점 >>> " + sum(kor,eng));
			
			System.out.println("3과목 총점 >>> " + sum(kor,eng, mat));
		
			System.out.println("4과목 총점 >>> " + sum(kor,eng, mat, java));
	
		
		sc.close();

	}
	}

  • 06_Class & Method-Ex11
package Method;

import java.util.Scanner;

//[문제] 개인별 성적 처리 - 무한반복


public class Ex11 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		//for문 무한반복 : for(;;) { }
		while(true) {	//무한반복
			
			
			//키보드로 이름, 국어, 영어, 수학 점수를 입력을 받자.
			System.out.print("이름 입력 : ");
			String name = sc.next();
			
			System.out.print("국어 점수 입력 : ");
			int kor = sc.nextInt();
			
			System.out.print("영어 점수 입력 : ");
			int eng = sc.nextInt();
			
			System.out.print("수학 점수 입력 : ");
			int mat = sc.nextInt();
		
			System.out.println();
			
			// 총점을 구하자. 
			int sum = kor + eng + mat;
			
			//평균을 구하자.
			double avg = sum / 3.0;
			
			//학점을 구하자. 
			String grade = "";
			
			if(avg >= 90) {
				grade = "A학점";
			}else if (avg >= 80) {
				grade = "B학점";
			}else if (avg >= 70) {
				grade = "C학점";
			}else if (avg >= 60) {
				grade = "D학점";
				
			}else {
				grade ="F학점";
				
			}
			
			//성적을 화면에 출력해 보자.
			System.out.println("이   름 : " +name);
			System.out.println("국어점수 : " +kor + "점");
			System.out.println("영어점수 : " +eng + "점");
			System.out.println("수학점수 : " +mat + "점");
			System.out.println("총   점: " +sum + "점");
			System.out.printf("평   균 : %.2f점\n", "점");
			System.out.println("학   점 : " + grade);
			System.out.println(":::::::::::::::::::::::::::::");
			System.out.println();
			
			//계속 진행할지 종료 할지 여부를 선택하자.
			System.out.print("계속할까요?(Y:계속 / N:종료");
			String result = sc.next();
			
			//equalsIgnoreCase() : 대소문자를 구분하지 않는 메서드
			if(result.equalsIgnoreCase("N")) {
					break;
		}
		
	}//while 문 end

	System.out.println("수고 하셨습니다.");
	
	sc.close();

}

}

 

equals( );

: 대소문자를 구분한다.

equalsIgnoreCase( );

: 대소문자 구분하지 않습니다. 

ex) y, Y 다 동일하게 받는다.

 

 

 

 

 

 

 

 

su 라는 변수를 쓰면 4바이트 크기의 메모리를 잡아 먹는다.