이름 뒤에 소괄호
단, 키워드 뒤에 소괄호는 메소드가 아니다.
EX) 함수처럼
f(x) = 2x + 1
(1)리턴타입 (2)메소드명(자료형 (3)매개변수명, ...){
(4)실행할 문장;
(5)return 리턴값;
}
(1) 리턴 값이 있다면 리턴 값의 자료형을 작성하고, 리턴 값이 없다면 비워놓지 않고 void를 작성한다.
(2) 동사로 작성한다.
(3) 외부에서 전달 받을 값이 있다면, 자료형과 순서에 맞게 선언해준다.
생략 시, 외부에서 값을 전달 받을 수 없게 된다.
(4) 생략이 가능하며, 메소드의 기능을 구현하는 로직을 작성한다.
(5) 생략이 가능하다.
문제) 두 정수의 덧셈 메소드 선언
1. 메소드의 이름을 생각한다.
sum, plus, add, getTotal, compute, ...
add(){}
2. 매개변수를 생각한다.
add(int num1, int num2){}
2. 실행할 문장을 생각한다.
add(int num1, int num2){
int result = num1 + num2;
}
3. 리턴 값을 생각한다.
int add(int num1, int num2){
int result = num1 + num2;
return result;
}
메소드를 선언할 때에는 {} 중괄호가 있으며, 반드시 메소드 밖에서 선언한다.
메소드를 사용할 때에는 {} 중괄호가 없으며, 반드시 메소드 안에서 사용한다.
메소드의 리턴 타입이 void면 실행 메소드이므로 값으로 봐서는 절대 안된다.
메소드의 리턴 타입이 void가 아니라면 사용한 부분 통채로가 리턴 값이다.
1. 재사용
2. 소스코드 간결화
리턴해야 할 때
사용한 쪽에 로직의 결과를 전달해야 할 때.
메소드 내에서 모든 작업이 끝날 수 없을 때.
리턴하면 안될 때
사용한 쪽에 로직의 결과를 전달할 필요가 없을 때.
메소드 내에서 모든 작업이 완료될 때.
package method;
public class MethodTest {
// 두 정수의 곱셈 메소드 선언
static int multiple(int num1, int num2) {
return num1 * num2;
}
// 두 정수의 덧셈의 결과를 출력해주는 메소드 선언
void int add(int num1, int num2) {
System.out.println("두 정수의 합은 : " + (num1 + num2));
}
// 한번 출력이 끝이면 굳이 return 필요 X
// 로그인할때 '최유라님 환영합니다!' 이럴 때는 실행 메소드로 한번만 사용
// 1~10까지 println()으로 출력하는 메소드
void printFrom1To10() {
for (int i = 0; i < 10; i++) {
System.out.println(i+1);
}
}
// static
// 컴파일러가 가장 먼저 메모리에 할당해준다.
// 일반 메소드를 static 메소드에서 사용하기 위해서는
// 1. static을 붙여서 같이 메모리에 올려준다.
// 2. 일반 메소드의 소속을 알려준다.
// - static 메소드에서 사용된 일반 메소드는 Heap 영역에서 찾는다.
// - 클래스 타입의 변수를 선언할 때 Heap 영역에 할당되므로,
// 일반 메소드도 해당 변수를 통해 접근하여 사용할 수 있다.
public static void main(String[] args) {
MethodTest mt = new MethodTest();
int object = mt.multiple(10, 5);
System.out.println(object);
int result = multiple(5,5) + 9;
System.out.println(result);
mt.add(152, 200);
mt.printFrom1To10();
}
}
package day08;
import java.util.Iterator;
public class MethodTask {
// "홍길동" 을 n번 println() 으로 출력하는 메소드
void printHong(int count) {
for (int i = 0; i < count; i++) {
System.out.println("홍길동");
}
}
// 매개변수로 넘어온 이름을 n번 println() 으로 출력하는 메소드
void printName(String name, int count){
for (int i = 0; i < count; i++) {
System.out.println(name);
}
}
// 세 정수의 뺄셈을 해주는 메소드
void substract(int firstNumber, int middleNumber, int lastNumber) {
return firstNumber - middleNumber - lastNumber;
}
// 두 정수의 나눗셈을 해주는 메소드(몫과 나머지 둘 다 리턴)
// tip: array 사용
int[] divide(int num1, int num2) {
// int[] results = new int[2];
// 혹시나 0으로 나누는 사람이 있을 수 있으니까 미리 막기
int[] results = null;
if(num2 ! = 0) {
// results = new int[2];
result[0] = num1 / num2;
result[1] = num1 % num2;
}
return results;
}
// 1~n까지의 합을 구해주는 메소드 (리턴 있게 만드세요!)
void getTotalFrom1(int end) {
int total = 0;
for (int i = 0; i < end; i++) {
total += i + 1;
}
return total;
}
// 문자열을 입력받고 원하는 문자의 개수를 구해주는 메소드
int getCount(String string, char c) {
int count = 0;
for (int i = 0; i < string.length(); i++) {
if(string.charAt(i)==c) {
count++;
}
}
return count;
}
// 메인 메소드 안에서 위에서 만든 메소드를 사용한다.
public static void main(String[] args) {
MethodTask mt = new MethodTask();
String name = mt.name("홍길동", 7);
System.out.println(name);
System.out.println(result);
mt.printHong(5);
mt.printName("April", 7);
System.out.println(mt.substract(10, 3, 4));
int[] results = mt.divide(10, 0);
//0으로 나눴을때 안된다고 알려주기
if(results == null) {
System.out.println("0으로는 나눌 수 없습니다.");
} else {
System.out.println("몫:" + results[0]);
System.out.println("나머지: " + results[1]);
}
System.out.println(mt.getTotalFrom1(5));
String str = "april";
System.out.println(str.length());
charAt()
System.out.println(str.charAt(0));
for (int i = 0; i < str.length; i++) {
System.out.println(str.charAt(i));
}
}