728x90
메서드(method)
: 반복적인 일상이 지겨워
메서드는 반복되는 코드를 줄여주고, 좀 더 구조화시켜 우리가 코드를 알아보기 쉽게 함
객체지향프로그래밍에서 메서드는 '객체가 가져야할 기능을 구현하기 위해 만든다'라고 표현
메서드의 이름 뒤에는 반드시 소괄호'( )'가 와야 함
[ 메서드 선언 방법 ]
< 반환 유형 > < 메서드 식별자 이름 > ( 매개 변수) {
기능 상세;
}
- 반환 유형(return type)
메서드가 실행한 후 메서드를 호출한 곳에 반환하는 값의 데이터 타입
메서드는 반환값이 있을 수도 있고 없을 수도 있는데 없는 경우에는 반환 유형에 void를 적어줘야 함
반환값이 있는 메서드를 호출할 때는 해당 반환유형에 맞는 변수에 반환값을 저장해야 함
메서드가 실행의 결과값을 반환할 때는 return이라는 키워드를 사용함
- 매개 변수(parameter)
메서드가 실행될 때 필요한 데이터를 외부로부터 받기 위해 사용
매개 변수도 일종의 변수이기 때문에 메서드의 소괄호( ) 부분에 데이터 타입과 함께 선언해야 하며 초기화는 하지 않음
매개 변수를 여러개 선언할 수 있으며, 메서드가 외부로부터 받을 데이터가 없다면 선언하지 않을 수도 있음
( 이때는 반환 유형을 적을때와 같이 void를 쓰지 않고 소괄호( ) 안을 비워둬야 함 )
[ 메서드의 유형 ]
1. 매개변수 O, 반환 값 O
2. 매개변수 O, 반환 값 X
3. 매개변수 X, 반환 값 O
4. 매개변수 X, 반환 값 X
[ 메서드 유형 예시 - 매개변수 X, 반환 값 O ]
public class MethodEx01 {
public static void main(String[] args) {
//메서드는 메서드 내부에 생성 할 수 없음
//main 밖에, 클래스 안에 어디서든 선언 할 수 있음
//메서드의 호출 이름()
//(1_메서드 출력)
System.out.println(calSum());
//(2_메서드 출력)
int result = calSum();
System.out.println(result);
String result3 = ranStr();
System.out.println(result3);
} //main 끝
//반환 O, 매개값 X - 1부터 10까지 합
static int calSum() {
//1~10까지 합
int sum = 0;
for(int i = 1; i <= 10; i++) {
sum += i;
}
return sum;
}
//반환 O, 매개값 X - 문자열의 결과 반환
static String ranStr() {
String str = ""; //A + B + C.... + Z
for(char c = 'A'; c <= 'Z'; c++) {
str += c;
}
return str; //String의 기본값 null
}
//반환 O, 매개값 X - return 키워드의 활용
static String ranStr2() {
double d = Math.random();
if(d > 0.66) {
return "가위";
}else if(d > 0.33) {
return "바위";
}else {
return "보";
}
}
}
// 반환 값 O, 매개변수 X - 1부터 10까지 합
static int calSum( ) { // 1~10까지 합
int sum = 0;
for ( int i = 1; i <= 10; i++ ) { // 매개변수 없이 메서드 내부에서 해결 가능
sum += i;
}
return sum; // 반환 값이 int(정수)이기 때문에 sum(정수)으로 반환
}
// 반환 값 O, 매개변수 X - 문자열의 결과 반환
static String ranStr( ) { // A + B + C.... + Z
String str = "";
for ( char c = 'A'; c <= 'Z'; c++ ) {
str += c;
}
return str; // 반환 값이 String(문자열)이기 때문에 str(문자열)로 반환
}
// 반환 값 O, 매개변수 X - return 키워드의 활용
static String ranStr2( ) {
double d = Math.random ( );
if ( d > 0.66 ) {
return "가위";
}else if ( d > 0.33 ) { // 반환 값이 String(문자열)이므로 문자열로 반환
return "바위"; ( 직접적으로 바로 반환도 가능 )
}else {
return "보"; }
}
[ 메서드 유형 예시 - 매개변수 O, 반환 값 O ]
public class MethodEx02 {
public static void main(String[] args) {
/*
* 매개변수(parameter)
* 1. 매개변수는 메서드를 호출할 때 필요한 값을 전달하는 매개체
* 2. 매개변수는 몇 개 받을지 메서드를 선언할 때 결정해줌
*
*/
int result = calSum(10);
System.out.println("1~10까지의 합:" + result);
int result2 = calSum(100);
System.out.println("1~100까지의 합:" + result2);
int result3 = calSum2(10, 20);
System.out.println("10~20까지의 합:" + result3);
}
// 반환 O, 매개변수 O
static int calSum(int end) {
int sum = 0;
for(int i = 1; i <= end; i++) {
sum +=i;
}
return sum;
}
//반환 O, 매개변수 O - 매개변수가 여러 개
static int calSum2(int start, int end) {
int sum = 0;
for(int i = start; i <= end; i++) {
sum +=i;
}
return sum;
}
}
// 반환 O, 매개변수 O
static int calSum ( int end ) { // 매개변수 한 개
int sum = 0;
for ( int i = 1; i <= end; i++ ) { // 외부에서 매개변수를 받아 내부에서 메서드의 기능 실행
sum += i;
}
return sum;
}
// 반환 O, 매개변수 O - 매개변수가 여러 개
static int calSum2 ( int start, int end ) { // 매개변수 두 개
int sum = 0;
for ( int i = start; i <= end; i++ ) {
sum += i;
}
return sum;
}
[ 메서드 유형 예시 - 반환 값이 있을 때와 없을 때 호출하는 방법 차이 ]
public class MethodEx03 {
public static void main(String[] args) {
/*
*
* 반환유형(return type)
* 1. 반환유형은 메서드가 돌려주는 값에 대한 타입
* 2. 반환유형이 있는 메서드는 호출 구문이 값이 되기 때문에 메서드의 매개값으로 사용될 수도 있음
* ex) println( 메서드 호출 )
* 3. 모든 메서드는 return을 만나면 강제종료
* 4. 리턴문 아래에는 코드를 작성할 수 없음
*
*/
// int result = add(3, 5);
// System.out.println("결과:" + result);
// System.out.println( add(3,5) );
int result = add( add(1, 2), add(2, 3) );
System.out.println(result);
//int r = sub(1, 2); - 잘못된 사용 1
//System.out.println( sub(1, 2) ); - 잘못된 사용 2
sub(1,2);
noReturn("hello");
noReturn("bye");
}
static int add(int a, int b) {
return a + b;
// int result = a + b;
//return result;
}
// 반환 X , 매개변수 O - 리턴이 없음(단순 실행)
static void sub(int a, int b) {
System.out.println("a - b = " + (a-b));
}
//void형에서 return - 종료
static void noReturn(String s) {
if(s.equals("hello")) {
System.out.println("실행종료");
return; //종료
}
System.out.println(s);
}
}
public static void main(String[ ] args) { // main 시작
반환 값 있는 메서드 호출하는 방법 - [1]
int result = add(3, 5);
System.out.println("결과:" + result);
System.out.println( add(3,5) ); // 반환 값이 있는 경우에만 출력문으로 바로 호출 가능
반환 값 있는 메서드 호출하는 방법 - [2]
int result = add( add(1, 2), add(2, 3) );
System.out.println( result );
반환 값 없는 메서드 호출하는 방법
// int r = sub(1, 2); - 잘못된 사용 1
// System.out.println( sub(1, 2) ); - 잘못된 사용 2
sub(1,2);
noReturn("hello");
noReturn("bye");
} // main 종료
// 반환 O , 매개변수 O
static int add ( int a, int b) {
return a + b;
}
// 반환 X , 매개변수 O - 리턴이 없음(단순 실행)
static void sub( int a, int b ) {
System.out.println( "a - b = " + ( a - b ) ); // 반환 값이 없기 때문에 바로 출력(실행만 가능)
}
// void형에서 return - 종료
static void noReturn(String s) {
if( s.equals("hello") ) {
System.out.println("실행종료");
return; // 종료 // 반환 값이 없는데 return이 등장한다면 종료의 의미
}
System.out.println(s);
}
}
[ 메서드 유형 예시 - 반환 값 OR 매개변수가 배열인 경우 ]
import java.util.Arrays;
public class MethodEx04 {
public static void main(String[] args) {
int [] arr = {1, 2, 3, 4, 5};
String[] arr2 = {"월", "화", "수"};
method01(arr); // 변수명 or 생성구문
method02(arr, arr2);
int[] arr1 = method03();
System.out.println(Arrays.toString(arr1));
}
//정수배열을 매개변수로 받는 메서드
static void method01(int[] a) {
//a를 이용해서 배열값의 사용가능
System.out.println(Arrays.toString(a));
}
//정수배열과, 문자열 배열을 매개변수로 받는 메서드
static int method02(int[] arr, String[] arr2) {
for(int a: arr) {
System.out.println(a);
}
return 0;
}
//배열을 반환하는 메서드
static int[] method03() {
int[] arr= new int[5];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2; // 행 복사 : ctrl + alt + 방향키
arr[3] = 3;
arr[4] = 4;
return arr;
}
}
public static void main( String[ ] args ) { // main 시작
int [ ] arr = {1, 2, 3, 4, 5};
String [ ] arr2 = { "월", "화", "수" };
method01( arr ); // 변수명 or 생성구문
method02 ( arr, arr2 );
int [ ] arr1 = method03 ( );
System.out.println( Arrays.toString(arr1) );
} // main 종료
// 반환 값 X, 매개변수 O - 정수배열을 매개변수로 받는 메서드
static void method01( int [ ] a ) {
System.out.println(Arrays.toString(a)); // a를 이용해서 배열값의 사용가능
}
// 반환 값 O, 매개변수 O - 정수배열과, 문자열 배열을 매개변수로 받는 메서드
static int method02 ( int [ ] arr, String [ ] arr2 ) {
for ( int a : arr ) {
System.out.println(a);
}
return 0;
}
// 반환 값 O, 매개변수 X - 배열을 반환하는 메서드
static int [ ] method03 ( ) {
int [ ] arr = new int [5];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
arr[4] = 4;
return arr;
}
}
[ 메서드 유형 예시 - 메서드의 실행 방법(동기적 실행, 재귀적 실행) ]
public class MethodEx05 {
public static void main(String[] args) {
//메서드의 (동기적) 실행
test01();
//메서드의 재귀적 실행
recursive(0);
int result = fac(5);
System.out.println(result);
}
static void test01() {
System.out.println("1번 메서드 실행");
test02();
System.out.println("1번 메서드 종료");
}
static void test02() {
System.out.println("2번 메서드 실행");
System.out.println("2번 메서드 종료");
}
static void recursive(int a) {
//재귀적 함수는 탈출의 구문을 반드시 명시
if(a == 10) return;
System.out.println(a + "번 호출");
a++; //1증가
recursive(a);
}
static int fac(int a) {
if(a==1) return 1; // f(1) = 1
return a * fac(a-1);
}
}
public static void main(String[ ] args) {
// 메서드의 (동기적)
실행 test01();
//메서드의 재귀적 실행
recursive(0);
int result = fac(5);
System.out.println(result);
} // main 종료
static void test01( ) {
System.out.println("1번 메서드 실행");
test02(); // 메소드 안에서 다른 메소도 호출 가능
System.out.println("1번 메서드 종료");
}
static void test02( ) {
System.out.println("2번 메서드 실행");
System.out.println("2번 메서드 종료");
}
static void recursive ( int a ) { // 재귀적 함수는 탈출의 구문을 반드시 명시
if ( a == 10 ) return; // 탈출 구문 ( a가 10이면 종료 )
System.out.println ( a + "번 호출" );
a++;
recursive(a);
}
static int fac ( int a ) {
if( a==1 ) return 1; // f(1) = 1
return a * fac (a-1);
}
'Java 기본 개념' 카테고리의 다른 글
자바를 잡아라 제 10장 - 물려받는 게 없다면 스스로 만들어라 (0) | 2022.10.18 |
---|---|
자바를 잡아라 제 9장 - 차원이 다른 클래스를 보여줘야 된다 (0) | 2022.10.17 |
자바를 잡아라 제 7장 - 버겁다고 느낄 때 잠시 쉬어도 좋아 (0) | 2022.10.10 |
자바를 잡아라 제 6장 - 끝이 어딘지 모를 땐 현재에 집중해라 (2) | 2022.10.06 |
자바를 잡아라 제 5장 - 반복만이 살 길이다 (0) | 2022.10.04 |