메소드, 입력값, 출력값

메소드 method - java

함수 function - 그 외 언어

 

반복문,조건문,변수,상수 같은 것들 = 메소드

객체지향과 같은 개념들은 웅장, 결함X, 유지보수가 쉬운 애플리케이션을 만들기 위한 기법들

 

 


메소드 정의와 호출

- 정의 define: 만든다

- 호출 call: 실행

 

- main 메소드 = 호출

프로그램을 만들 때 "실행하고자 하는 코드를 {} 안에 입력하기"라는 약속과 같은 main메소드

 

정의한 메소드는 print메소드 안에 넣어도 출력되지 않아

System.out.println(numbering()); = Err

 

 


메소드가 없다면?

public static void main(String[] args) {
	for(int i=0;i<10;i++) {
		System.out.println(i);
	}
}

만약 0~9까지 반복되는 출력값을 총 5번 더 반복되게 하려면?

위 코드를 5번 복붙을 해야하겠지

그런데 만약 거기에 오류가 있거나 값을 변경하고 싶다면?

그 부분을 찾아서 하나하나 노가다를 해야할거야 

 

그런데 위에서처럼 numbering() 메소드를 정의하고 호출한다면 코드량이 줄어듦에 따라 좀 더 간편하고 유지보수에도 유리하겠다. 

한 번 정의한 메소드를 재활용할 수 있어 아래처럼!

public static void numbering() {
	for(int i=0;i<10;i++) {
    	System.out.println(i);
    }
}

public static void main(String[] args) {
	numbering();
	numbering();
	numbering();
	numbering();
	numbering();
}

첫번째 코드는 17줄을 써야한다면, 두번째 코드는 12줄만 사용하면 돼 

이건.. 연습이라 극적인 차이는 안나지만.. 그렇다~

 

 


입력값

 

처음과 끝을 입력하고 싶다면?

public static void numbering(int init, int limit) { // 처음과 끝의 변수를 선언
	for(int i=init; i<limit; i++) {
    	System.out.println(i);
    }
}

public static void main(String[] args) {
	numbering(0,5);				//인자값 입력
}

 

 

코딩에서는 가변과 고정을 구분하는게 중요하다고 했지

종료조건을 정의 부분에서 수정할 수 있어. 하지만

그렇다면 고정과 가변을 정확히 나누게 되면?

numbering()메소드를 호출할 때, 인자값만 바꿔 넣어서 더욱 쉽게 관리할 수 있지

매개변수 parameter 입력값을 수용하기 위한 변수가 정의되어 있는 부분

인자 argument 넣고 싶은 값


출력값 return

return 뒤에 오는 값을 메소드의 결과로 반환 후 메소드 종료

public static 타입 메소드 { // return을 통해 반환할 값의 타입을 정하기
	타입 output=__;		// 타입에 맞는 초기값 주기 int=0, String="", boolean=false
    
    return output;		// 결과

 

 

 

 

return값의 타입을 메소드 앞에 정의하기

public static String numbering(int init,int limit) {
	int i=init;
	String output = ""; //output은 String 선언
    
	while(i<limit){
    	output += i;
        i++;
	}
	return output;
}

public static void main(String[] args) { // main메소드는 void → return값은 존재X
	String result = numbering(1,5);
	System.out.println(result);
}

void (뜻: 빈공간) 메소드의 리턴값은 존재하지 않는다 선언

그래서 그동안 return을 호출하지 않은거야


Java의 장점 : 메소드가 리턴하는 값의 타입이 고정됨으로써 우리는 이게 정수인지, 문자인지 복잡하게 생각하거나 String이 아닐 것이라는 불필요한 생각을 하지 않아도 되고, 값의 타입을 조건문이나 다른 장치로 규정해야하는 불편함이 줄어

단점 : 유연성이 없어 코드가 깐깐해지거나 복잡해진다

 


그렇다면, numbering메소드의 값을 return을 이용하여 외부로 꺼내놓는거야?

public static void numbering(int init, int limit) {
	for(int i=init; i<limit; i++) { 
    	System.out.println(i); // numbering 메소드 정의 안에 화면에 출력하게하는 print가 있어
    }
}

public static void main(String[] args) {
	numbering(0,5);
}

 

우리가 print메소드만 사용하게 된다면 문제가 없지만!

numbering메소드를 이메일로 보낸다거나, 파일에 기록하는 등 다른 일을 하고싶을 때는 또 다른 메소드를 만들어야 해서 그 가치가 떨어진다는 거지

그래서 우리는 출력값 코드처럼 반환할 값을 선언하고, 어떻게 실행시킬지 문장을 적고, 마지막으로 return output;

출력값을 밖으로 꺼내놓은거야 

 

간단히 말해서 여러 재료로 만든 음식을 포장한 상태에서 앞으로 택배로 보낼지, 퀵으로 보낼지, 아니면 직접 배달할건지 를 void main 메소드에서 정하는거지

 

더보기
import java.io.*; // 무시
 
public class MethodDemo7 {
    public static String numbering(int init, int limit) {
        int i = init;
        String output = "";
        while (i < limit) {
            output += i;
            i++;
        }
        return output;
    }
 
    public static void main(String[] args) {
        String result = numbering(1, 5);
        System.out.println(result);
        try { // 무시
            // 다음 행은 out.txt 라는 파일에 numbering이라는 메소드가 반환한 값을 저장합니다.
            BufferedWriter out = new BufferedWriter(new FileWriter("out.txt"));
            out.write(result);
            out.close();
        } catch (IOException e) {
        } // 무시
    }
}

출처: 생활코딩님 Java - 메소드 (6/6) : 출력값 2]

여기있는 모든 코드 이해할 수 있을 때 다시 해보기

 

 


Q1

num메소드에 숫자를 입력하면 각 출력값이 나오도록 하기

더보기
public static String num(int i) {
	if(i==0) {
    	return "zero";
    } else if(i==1) {
    	return "one";
    } else if(i==2) {
    	return "two";
    }
    return "none";
}

public static void main(String[] args) {
	System.out.println(num(1));
}

result: num()메소드에 인자값 0을 넣으면 zero, 1은 one, 2는 two, 그 외 none

 

 


배열과 반복문, 근데 이제 메소드를 곁들인..

public static String[] getMembers() {
    String[] members = {"우디","버즈","불스아이","제시"};
    return members;
}

public static void main(String[] args) {
    String[] members = getMembers();
    System.out.println(members[0]);
}

그,런,데,!

Java에서 배열은 한꺼번에 원소들을 불러올 수가 없어.

그래서 배열시간에 배웠던 for-each문이나, for/while문을 이용해서 하나하나 불러와야해

//for문 이용
public static main(String[] args) {
    for(String e : members);
    System.out.println(e);
}

//while문 이용
public static main(String[] args) {
    int i=0;
    while(i<members.length){
        System.out.ptintln(memebers[i]);
        i++
    }
}

result: 우디

        버즈

        불스아이

        제시

 

 

'하다보면 되겠지 머.,. > 생활코딩_JAVA' 카테고리의 다른 글

입력과출력2  (0) 2021.10.10
입력과 출력1 - .length 이용  (0) 2021.10.06
배열 - for-each, 오류와 한계  (0) 2021.10.03
배열  (0) 2021.10.03
반복문 - while문, for문, break, continue  (0) 2021.10.01