메소드 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 |