ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] Method
    언어/JAVA 2022. 9. 7. 17:29

    -Function이라고 부르며 간헐적으로 반복되는 코드 단위를 별도로 정의해놓고 그 이름으로 코드를 실행하는 단위실행코드

    -Java에서는 Function이란 말보다 Method라는 표현을 주로 사용함

    특징

    1. 명령들이 모여서 기능을 정의하는 단위

    2. 일련의 실행코드를 묶어서 재활용

    3. 메서드는 각 메서드마다 고유한 이름이 있음

    4. 메서드가 이름이 불리워져서 실행되라는 명령(Call-호출)을 받으면 그 메서드의 몸체를 이루는 코드들이 실행되는 형식

    5. 자바의 메서드는 이름 옆에 항상 괄호()를 달고 나옴

    6. 메소드의 생성: 반드시 클래스의 내부에서만 만들 수 있음

    7. main 메서드 위쪽 또는 아래쪽에 만들 수 있음

    public static void main(String[] args) {
    		System.out.println("start program");
    		abc(); // 메서드의 이름을 불러서 호출
    		// 메서드가 하나 호출되면 메서드의 몸체로 포커스가 이동한 뒤 
            // 그 몸체를 모두 실행하고 원래 자리로 돌아옴
    		System.out.println("programming");
    		abc();
    		System.out.println("programming");
    		abc();
    		System.out.println("end program");
    	}
    
    	// 메서드의 정의(define)
    	// 개발자가 정의한 메서드의 정의 위치는 main의 위나 아래 모두 정의 가능
    	// public static void: 문법		abc: 메서드 이름
    	public static void abc() {
    		System.out.println("first method");
    		System.out.println("second method");
    		System.out.println("third method");
    	} //메서드의 내용으로 기술된 네 개의 println은 abc 이름을 이용해서 실행가능함

     

     

    사용하는 목적

    1. 명령들의 단순 실행이 아닌 소정의 값을 연산하기 위한 명령들의 반복실행

    예) 사각형의 넓이를 계산하는 메서드, 삼각형의 넓이를 계산하는 메서드, 성적표를 양식에 맞게 출력하는 메서드, 달력을 양식에 맞게 출력하는 메서드

    -함수를 만들려면 필요한 값들을 함수에 전달하고 실행되게 해야함

    매개변수 메서드 호출 시 메서드가 필요로 하는 데이터를 전달해줄 수 있는 매개 역할의 변수. 메서드에서 전달된 값을 받아주는 역할.
    전달인수 메서드 호출 시 괄호안에 넣어주는 데이터
    public class Method01 {
    	// 매개변수 선언
    	// public static void 메서드이름(자료형 매개변수이름, 자료형매개변수이름...){
    	
    	// } // 괄호안에 변수를 선언하고 쓰는 형식
    	// 매개변수 또한 필요한 갯수만큼 선언해서 사용할 수 있음
    	
    	// String[]args: main 메서드의 매개변수 ->프로그램 실행명령과 함께 전달되는 값이 저장
    	// d:\>java Method01 전달인수
    	public static void main(String[] args) {
    		// if(true) {int n=0; } // n: 괄호안에 있는 지역변수		
    		myPrint(200); // 200: 전달인수
    		myPrintWith2Int(300,400);
    		// myPrintWith2Int(123.456,400); // 함수의 첫번째 매개변수가 int형이기 때문에 error
    	}
    	
    	public static void myPrint(int n) {
    		System.out.println("전달받은 매개변수의 값 n -> "+n);
    	} // int n: 매개변수
    	// 함수 호출 시에 전달인수로 넣어준 200이 매개변수 int n에 저장되고
    	// 그 변수는 myPrint 메서드안에서 활용이 가능함
    	
    	
    	// 다수의 매개변수를 전달 받는 메서드의 형태 - 각 매개변수 별로 전달받을 변수를 선언함
    	// 동일한 타입이라도 자료형의 생략은 허용되지 않음 (int n1, n2 -> X)
    	public static void myPrintWith2Int(int n1, int n2) {
    		System.out.println("전달받은 매개변수의 값 n1 -> "+n1+", n2 -> "+n2);
    	}
    	// 전달인수는 반드시 매개변수의 자료형과 일치하는 자료를 전달해줘야 함
    	// 다수개의 값을 전달할 때는 자료형과 순서도 일치하게 전달해줘야 함
    	// 매개변수 acb(int x, double y), 전달인수 abc(300.0, 500) => X
    }
    지역변수 {} 중괄호 안에 선언된 변수를 지역변수라고 부름. 자신을 생성하는 명령이 감싸진 {} 중괄호를 벗어나면 소멸됨
    // 매개변수의 역할과 생명 주기
    	public static void main(String[] args) {
    		
    		int num=10;
    		System.out.printf("num of main -> %d\n",num);
    		
    		updateValue(num);
    		// 전달인수로 변수를 사용하는건 변수를 전달하는게 아니라
    		// 변수에 저장된 값을 전달한다는 뜻. 변수값의 "복사본"이 전달됨
    		System.out.printf("num of main -> %d\n", num);
    		
    	}
    	
    	public static void updateValue(int num) {
    		
    		num=200;
    		System.out.printf("updateValue -> %d\n", num);
    		
    	}
    	// 1. 메서드 호출할 때 전달인수로 넣어주는 변수와 updateValue 메서드 영역의
    	// 		매개변수로 쓰이는 변수의 이름 같아도 상관없음
    	//		위에서 언급한 두 변수는 지역변수라고 부르며, 
        //       서로 다른 변수로 사용됨
    	// 2. 전달인수의 변수값이 매개변수 변수로 "값"만 전달되는 방식을
    	// 		Call by Value라고 부름
    
    }

    2. 메서드를 호출 후 메서드에서 계산된 결과를 호출한 지점에 리턴 받아서 사용하고자 할 때

    // 리턴값이 존재하는 메소드의 선언
    // 선언된 메서드가 return 명령을 이용하여 
    // 호출된 지점으로 결과값 하나 전달 가능
    
    public static void main(String[] args) {
    	int maxValue=max(10,34,67);
    	System.out.printf("%d %d %d 중 가장 큰 숫자는? -> %d\n",10,34,67,maxValue);
    	max(65,87,12);
    	// 메서드의 호출과 실행, 리턴값의 구조가 
        // 반드시 리턴값을 별도의 변수에 저장되게 구성해야하는 것은 아님
    	// 다만 리턴 명령의 목적이 메서드 실행결과를 리턴받아 사용할 목적이었다면 
        // 리턴값을 별도의 별수에 저장하는 것이 설계 목적상 올바른 사용임		
    	// 또한 메서드실행의 결과(리턴값)는 변수에 저장할 수 있을뿐만 아니라
        // 다음과 같이 다른 메서드의 구성으로 사용할 수도 있음
    	System.out.printf("%d %d %d 중 가장 큰 숫자는? -> %d\n",65,87,12,max(65,87,12));
    	// 리턴된 값이 System.out.printf()의 출력 내용으로 사용됨
    }
    public static int max(int a, int b, int c) {
    	int max=0;
    	max=(a>b)? a:b;
    	max=(c>max)? c: max;
    	// System.out.println("세 개 중 가장 큰 수는 "+max);
    	return max;
    }

     

     

     메서드 사용에 따른 메서드 형태
     abc()  전달인수 없고 리턴값도 없는 형태
     abc(10,12)  전달인수 2개 리턴값 없음
     k=abc()  전달인수 없고 리턴값 있는 형태
     k=abc(10,12)  전달인수 2개 리턴값 있음

     

    -개발자 필요에 의해 만들어지는 메서드는 반드시 클래스 안에 정의 되어야 하며 생성된 메서드들 간에는 자유롭게 서로를 호출하여 사용할 수 있음

    -그들은 그들을 둘러싼 클래스에 속해 있는 멤버들이라고도 부름

    -다만 서로를 자유롭게 호출하는 대상에서 main 메서드는 제외함

    -main을 호출한다는건 프로그램을 시작한다는 뜻이며 개발자에 의해 임의 호출될 수 없음

    public static void main(String[] args) {
    	int []a= {56,87,96,59,25,48,13,33,65};
    	int tot=0;
    	double avg;
    	tot =sum(a); // 배열의 합계를 계산하여 리턴하는 메서드
    	avg=average(a); // 배열의 평균을 계산하여 리턴하는 메서드
    	prn(a,tot,avg); // 배열의 요소와 합계, 평균 출력
    }
    public static int sum(int []a) {
    	int tot=0;
    	for(int i=0; i<a.length; i++) tot+=a[i];
    	return tot;
    }
    public static double average(int []a) {
    	int tot=sum(a);
    	return tot/a.length;
    }
    public static void prn(int []a, int tot, double avg) {
    	System.out.printf("배열의 값들: ");
    	for(int k: a) System.out.printf("%d ",k);
    	System.out.printf("\nsum: %d, average: %.2f",tot,avg);
    }

    '언어 > JAVA' 카테고리의 다른 글

    [JAVA] Overloading  (0) 2022.09.07
    [JAVA] for문  (0) 2022.09.07
    [JAVA] 삼항연산자(Ternary operator)  (0) 2022.09.07
    [JAVA] switch문  (0) 2022.09.07
    [JAVA] if문  (1) 2022.09.07

    댓글

Designed by Tistory.