[Java] 메소드(2)
카테고리: Java
태그: coding Programming Java
메소드 리턴
return 이란?
- 모든 메소드 내부에는 리턴이 존재한다
- void 메소드의 경우는 리턴을 명시하지 않아도 마지막줄에 컴파일러가 자동으로 추가를 해준다
- return은 현재 메소드를 강제 종료하고 호출한 구문으로 다시 돌아가는 명령어이다
package com.ohgiraffers.section01.method;
public class Application5 {
public static void main(String[] args) {
System.out.println("main()메소드 시작함");
/*1. 메소드 리턴 테스트*/
Application5 app5 = new Application5();
app5.testMethod();
System.out.println("main()메소드 종료함");
}
public void testMethod(){
System.out.println("테스트 메소드 동작 확인...");
/* 컴파일러에 의해 자동으로 추가되는 구문이다.
* 가장 마지막 작성하고, 마지막에 작성되지 ㅇ낳을 경우는 컴파일 에러발생시킵니다.
* */
return;
// System.out.println(); //에러 발생. return은 메소드 가장 마지막에 작성해야한다.
}
}
- 출력값
main()메소드 시작함
테스트 메소드 동작 확인...
main()메소드 종료함
메소드 리턴값 테스트
- 메소드는 항상 마지막에 return 명령어가 존재한다
- return은 자신을 호출한 구문으로 복귀하는 것을 의미한다
- 복귀를 할 때 그냥 복귀할 수도 있지만 값을 가지고 복귀할 수도 있다
- 이 때 가지고 가는 값을 리턴값이라고 한다
- 리턴값을 반환받기 위해서는 메소드 선언부에 리턴타입을 명시 해주어야 한다
- void는 아무 반환값도 가지지 않겠다는 리턴타입에 사용할 수 있는 키워드이다
- 반환값이 없는 경우 return 구문은 생략해도 컴파일러가 자동으로 추가해주지만, 반환값이 있는 경우는 return 구문을 반드시 명시적으로 작성해야한다
- 또한 메소드 선언부에 선언한 리턴타입 반환값의 자료형은 반드시 일치하여야 한다
package com.ohgiraffers.section01.method;
public class Application6 {
public static void main(String[] args) {
System.out.println("main 메소드 시작함");
Application6 app6 = new Application6();
app6.testMethod();
String returnText = app6.testMethod();
System.out.println(returnText); //hello world 출력됨
System.out.println(app6.testMethod());
System.out.println("main 메소드 종료함");
}
public String testMethod(){
return"hello world";
}
}
- 출력값
main 메소드 시작함
hello world
hello world
main 메소드 종료함
매개변수와 리턴값 복합활용
- 매개변수도 존재하고 리턴값도 존재하는 메소드를 이용하며 간단한 계산기를 만들어보자
package com.ohgiraffers.section01.method;
public class Application7 {
public static void main(String[] args) {
int first = 20;
int second = 10;
Application7 app7 = new Application7();
System.out.println("두 수를 더한 결과 : " + app7.plusTwoNum(first,second));
System.out.println("두 수를 뺀 결과 : " + app7.minusTwonum(first,second));
System.out.println("두 수를 곱한 결과 : " + app7.multipleTwoNum(first,second));
System.out.println("두 수를 나눈 결과 : " + app7.divideTwoNum(first,second));
}
public int plusTwoNum(int first, int second){
return first + second;
}
- 출력값
두 수를 더한 결과 : 30
두 수를 뺀 결과 : 10
두 수를 곱한 결과 : 200
두 수를 나눈 결과 : 2
static 메소드란?
- static 메소드는 특정 클래스의 인스턴스에 속하지 않고 클래스 자체에 속하는 메소드를 의미합니다. 이 메소드는 클래스의 인스턴스를 생성하지 않고도 호출할 수 있으며, 주로 유틸리티 함수나 헬퍼 함수 등을 구현할 때 사용됩니다. 클래스의 인스턴스 변수에 접근할 수 없고, 오직 클래스 변수만을 사용할 수 있다
static 메소드 호출하는 방법
- 클래스명.메소드명(); <– 이런 방식으로 호출한다
package com.ohgiraffers.section01.method;
public class Application8 {
public static void main(String[] args) {
System.out.println("10과 20의 합 : " +Application8.sumTwoNum(10,20));
/* 동일한 클래스 내에 작성된 static메소드는 클래스명 생략이 가능하다.*/
System.out.println("10과 20의 합 : " + sumTwoNum(10,20));
}
public static int sumTwoNum(int first, int second){
return first + second;
}
}
- 출력값
10과 20의 합 : 30
10과 20의 합 : 30
다른 클래스에서 작성한 메소드 호출
package com.ohgiraffers.section01.method;
public class Application9 {
public static void main(String[] args) {
/* 최대값 최솟값을 비교할 두 정수를 변수로 선언 */
int first = 100;
int second = 50;
/* non-static메소드의 경우 */
/*
* 클래스가 다르더라도 사용하는 방법은 동일하다.
* 클래스명 사용할이름 = new 클래스명();
* 사용할이름.메소드명();
* */
Calculator cal = new Calculator();
int min = cal.minNumberOf(first,second);
System.out.println("두 수 중 최소값은? " + min);
/* static 메소드인 경우 */
/* 다른 클래스에 작성한 static 메소드의 경우 호출할 때 클래스명을 반드시 기술해야한다.
* 클래스명.메소드명(); */
// int max = maxNumberOf(first,second); //클래스명을 생략하면 에러가 발생합니다.
int max = Calculator.maxNumberOf(first,second);
System.out.println("두 수 중 최대값은? " + max);
int max2 = cal.maxNumberOf(first,second);
System.out.println("두 수 중 최대값은? " + max2);
}
}
static 메소드는 non-staic메소드처럼 호출은 가능하지만 권장하지 않는다
- 이미 메모리에 로딩되어있는 static메소드는 여러 객체가 공유하게 된다.
- 그때 객체로 접근하게 되면 인스턴스가 가진 값으로 공유된 값에 예상치 못하는 동작을 유발할 수 있기 때문에
- 사용을 제한해 달라는 경고다. 시스템이 복잡할 수록 유지보수에 악영향을 준다.
- 출력값
두 수 중 최소값은? 50
두 수 중 최대값은? 100
두 수 중 최대값은? 100
- Calculator 클래스를 미리 작성해 두었다
package com.ohgiraffers.section01.method;
public class Calculator {
public int minNumberOf(int first, int second){
return (first>second)? second : first;
}
public static int maxNumberOf(int first, int second){
return (first>second)? first : second;
}
}
댓글 남기기