본문 바로가기
개발자/백엔드 웹 개발자 과정(국비)

2022년 11월 16일 _ 11회차(메서드)

by 초응 2022. 11. 16.
메서드(method)
-프로그램의 유연성을 위하여 반복되어 사용되는 내용을 묶어 특정 이름으로 관리하는 것.
능단 교재) 메서드는 특정 객체의 동작이나 행위를 정의한 것으로 클래스의 주요 구성 요소이다.
- 메서드는 클래스 안에서 관리된다.

 

-모듈화

 

메서드 형식

접근제어자 [지정 예약어 ] 반환 타입 메서드명(매개변수들){
처리할...
내용들...
}

ex)

public 접근 제한자 static(정적 메모리 할당 키워드)  void(반환 타입)  main(String [] args) 메서드명{

}

ㄴ 접근 제한자 : 메서드의 접근 범위를 지정한다.

ㄴ 지정 예약어는 생략 가능하다.

ㄴ 정적 메모리 할당 키워드 : 프로그램 시작 시에 메모리에 데이터를 올려준다.

ㄴ 반환 타입 : 함수 내에서 결과를 보내는 위치. 리턴이 없는 경우에는 void를 사용한다.

ㄴ void는 키워드가 아님. 자료형이 없는 자료형이라고 생각하기.

 

메서드 명명규칙

1. 한 단어일 경우 소문자, 두 단어 이상 합쳐지면 첫 단어는 소문자 두 번째 단어부터 첫 이니셜 대문자.

2. 동사(행위) +명사

1. call by name :  재료 없이 이름으로 호출.
2. call by value :  재료가 필요한, 기본형 8개.
3. call by reference : 재료가 필요한, 기본형 8개 제외한 나머지.

 혼합형으로 사용한다. 


call by name.
package day11;

public class Day11_02 {
	public static void xLine() {
		//call by name
		System.out.println("----------------------");
	}
	public static void main(String[] args) {

		xLine();
		System.out.println("이름 : 홍길동");
		xLine();
		System.out.println("나이 : 20");
		xLine();
		System.out.println("주소 : 서울");
		xLine();
	}
}

 


call by value : 기본형 8개가 넘어간다.
반환타입이 있어 보조제어문 return 사용하여 반환해줘야함.
다른 메서드에서 변수의 값을 치환하여도 메인에 있는 변수의 값은 변하지 않는다.
package day11;

public class Day11_03 {
	// call by value ( 기본형 8개가 넘어간다)
	public static int getMaxNum(int num1,int num2) {
		// 반환타입 int 이면 return 사용하기!
/*		int temp = num1;
		num1 = num2;
		num2 = temp;
	getMaxNum에서 위치를 바꾸는건 main에는 적용 안됨.
*/		
		System.out.println("num1="+num1+"/num2="+num2);
		int result = num1<num2?num1:num2;
		return result;// 반환타입있어 보조제어문 return반환 해줘야함.
	}
	public static void main(String[] args) {

		int num1 =10;
		int num2 =20;
		
		System.out.println("num1="+num1+"/num2="+num2);
		
//		int max = num1>num2?num1:num2;
		int max = getMaxNum(num1,num2);
		
		System.out.println("max="+max);
		
		System.out.println("num1="+num1+"/num2="+num2);
	}
}

call by reference : 기본형8개 이외가 넘어간다.
다른 메서드에서 메인의 쌍둥이 변수가 생기는데 수정을 하게 되면 메인의 변수에서도 똑같이 수정된다.
package day11;

public class Day11_04 {
	//call by reference(기본형8개 이외가 넘어간다)
	public static void refTest(int arr[] ) {
		
		arr[2]=1004; //다른 메서드에서 내용 변경
		for(int i=0 ; i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}System.out.println();
	}

	public static void main(String[] args) {

		
		int arr[] = {10,20,30,40,50};
		
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}System.out.println();
		
		refTest(arr);
		
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+" "); // 다른 메서드에서 배열 내용 변경한거 그대로 적용됨.
			}

		System.out.println();
	}
}

Day11_05 :  사용자로부터 단을 입력받아 해당하는 단의 구구단을 출력하시오
입력은 메인 메서드, 출력은  gugu메서드에서.
package day11;
//사용자로부터 단을 입력받아 해당하는 단의 구구단을 출력/ 입력-메인 출력-gugu메소드
import java.io.*;
public class Day11_05 {

	public static void gugu(int dan) {
//				반환아니고 출력이기때문에 void
		for(int i=1;i<=9;i++) {
			System.out.println(dan+"*"+i+"="+dan*i);
		}
	}
	public static void main(String[] args) 
	throws IOException{

		System.out.print("단 입력:");
		int dan = System.in.read()-'0';
		gugu(dan);
	}
}​

Day11_06 : 사용자로부터 이름과 횟수를 입력받아 입력받은 횟수만큼 이름을 출력하는 프로그램.
입력은 main 메서드 / 출력은 printName 메서드.
package day11;
/*사용자로부터 이름과 횟수를 입력받아 입력받은 횟수만큼 이름을 출력하는 프로그램.
 입력은 main / 출력 printName
*/
import java.io.*;
public class Day11_06 {
	public static void printName(int num,String name) {
		
		for(int i=1;i<=num;i++) {
			System.out.println("나의 이름은 "+name+"입니다.");
			}
	}
	public static void main(String[] args) 
	throws IOException{
		BufferedReader br=
		new BufferedReader (new InputStreamReader(System.in));
		
		System.out.print("이름:");
		String name = br.readLine();
		
		System.out.print("반복 횟수:");
		int num = Integer.parseInt(br.readLine());
		
		printName(num,name);
	}
}

Day11_07 : 사칙 계산기 만들기. 
사용자로부터 두수와 연산자를 입력 받아 계산하여 출력하는 프로그램.
입력과 출력은  main메서드 / 연산 cal 메서드

package day11;
/*사칙계산기 만들기 사용자로부터 두수와 연산자를 입력받아 계산하여 출력하는 프로그램
 * 입력과 출력은 main 메서드 /  연산은  cal메서드*/
import java.io.*;

public class Day11_07 {
	public static int cal(int num1,int num2,char ch) {
		
		int result = 0;
		
		switch(ch) {
		case '+': result = num1+num2;break;
		case '-': result = num1-num2;break;
		case '*': result = num1*num2;break;
		case '/': result = num1/num2;
		}
		return result;
	}

	public static void main(String[] args) 
	throws IOException{
		
		BufferedReader br = 
		new BufferedReader (new InputStreamReader (System.in));
	
		System.out.print("첫번째 수:");
		int num1 = Integer.parseInt(br.readLine());
		
		System.out.print("두번째 수:");
		int num2 = Integer.parseInt(br.readLine());
		
		System.out.print("연산자(+,-,*,/) : ");
		char ch = (char)br.read();
		
		int result = cal(num1,num2,ch);
		System.out.println(""+num1+ch+num2+"="+result);

	}
}

Day11_08 : 사용자로부터 5개의 점수를 입력받아 출력한 후 점수를 내림차순 정렬하여 출력하는 프로그램 작성.
main 메서드 4줄 작성 /inputArr- 입력/ sortArr 정렬/ printArr 출력 /
main 메서드와 inputArr 메서드에 throws IOException작성 
- 확인 전 작성 코드
package day11;
/*사용자로부터 5개의 점수를 입력받아 출력한 후 점수를 내림차순 정렬하여 출력하는 프로그램 작성.
main 메서드 4줄 작성 /inputArr- 입력/ sortArr 정렬/ printArr 출력 /
main 메서드와 inputArr 메서드에 throws IOException작성 */

import java.io.*;
public class Day11_08 {
	public static void inputArr(int arr[]) 
	throws IOException{
		
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
				
				for(int i=0;i<arr.length;i++) {
					System.out.print((i+1)+"번 점수:");
					arr[i] = Integer.parseInt(br.readLine());
				}
	}
	public static void sortArr(int arr[]) {
		for(int i=0;i<arr.length-1;i++) {
			for(int j=i+1;j<arr.length;j++) {
				if(arr[i]<arr[j]) {
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		printArr(arr);
	}
	public static void printArr(int arr[]) {
		for (int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}System.out.println();
	}
	
	public static void main(String[] args) 
	throws IOException{

		int arr[] = new int[5];
		inputArr(arr);
		printArr(arr);
		sortArr(arr);
	}
}