1. 메소드 선언과 호출
◎ 메소드 선언
▷ 객체의 동작을 실행 블록으로 정의하는 것입니다.
▷ 리턴 타입 : 메소드 실행 후 호출한 곳으로 전달하는 결과 값의 타입
▷ 메소드명 : 첫 문자를 소문자로 시작하고, 캐멀 스타일로 작성
▷ 매개변수 : 메소드를 호출할 때 전달한 매개 값을 받기 위해 사용합니다.
▷ 실행 블록 : 메소드 호출 시 실행되는 부분입니다.
◎ 메소드 선언 예시
public class Calculator { // 리턴 값이 없는 메소드 선언 void powerOn() { System.out.println("전원을 켭니다."); } // 리턴 값이 없는 메소드 선언 void powerOff() { System.out.println("전원을 끕니다."); } // 호출 시 두 정수 값을 전달 받고, // 호출한 곳으로 결과 값을 int 형으로 리턴한느 메소드 int plus(int x, int y) { int result = x + y; return result; } // 호출 시 두 정수 값을 전달 받고, // 호출한 곳으로 결과 값을 double 형으로 리턴하는 메소드 double divide(int x, int y) { double result = (double)x / y; return result; } }
public class CalculatorExample { public static void main(String[] args) { Calculator myCalc = new Calculator(); // 리턴 없는 메소드는 저장할 변수가 필요 없음 myCalc.powerOn(); // 리턴되는 값이있는 메소드는 리턴되는 값을 저장할 변수(리턴되는 타입과 동일한 타입)가 필요 없음 int result1 = myCalc.plus(5, 6); System.out.println("result1: " + result1); double result2 = myCalc.divide(10, 4); System.out.println("result2: " + result2); myCalc.powerOff(); } }
여기서 plus, divide에 들어가는 값들은 별도로 변수로 선언해도 됩니다.
◎ 메소드 호출
▷ 메소드 블록을 실제로 실행하는 것입니다.
▷ 클래스로부터 객체가 생성된 후에 메소드는 생성자와 다른 메소드 내부에서 호출될 수 있고,
객체 외부에서도 호출될 수 있습니다.
▷ 외부 객체에서는 참조 변수와 도트(.) 연산자로 호출됩니다.
◎ 가변길이 매개변수
▷ 메소드가 가변길이 매개변수를 가지고 있다면 매개변수의 개수와 상관없이 매개 값을 줄 수 있습니다.
▷ 메소드 호출 시 매개값을 쉼표로 구분해서 개수와 상관없이 제공할 수 있습니다.
▷ 매개값들은 자동으로 배열 항목으로 변환되어 메소드에서 사용됩니다.
public class computer { int sum(int ... values) { int sum = 0; for(int i=0; i<values.length; i++) { sum += values[i]; } return sum; } } // 가변 길이로 선언하면 개수 상관 없이 배열 형태로 입력 받을 수 있습니다.
public class computerExample { public static void main(String[] args) { computer myCom = new computer(); int result1 = myCom.sum(1, 2, 3); System.out.println("result1 : " + result1); int result2 = myCom.sum(1, 2, 3, 4, 5); System.out.println("result2 : " + result2); int[] values = { 1, 2, 3, 4, 5}; int result3 = myCom.sum(values); System.out.println("result3 : " + result3); int result4 = myCom.sum(new int[] {1,2,3,4,5}); System.out.println("result4 : " + result4); } } // 출력 : // result1 : 6 // result2 : 15 // result3 : 15 // result4 : 15
◎ return문
▷ 메소드의 실행을 강제 종료하고 호출한 곳으로 돌아간다는 의미입니다.
▷ 메소드 선언에 리턴 타입이 있을 경우에는 return 문 뒤에 리턴 값을 추가로 지정해야 합니다.
▷ return문 이후에 실행문을 작성하면 'Unreachable code'라는 컴파일 에러가 발생합니다.
public class Car { int gas; void setGas(int gas) { this.gas = gas; } boolean isLeftGas() { if(gas == 0) { System.out.println("gas가 없습니다."); return false; } System.out.println("gas가 있습니다."); return true; } void run() { while(true) { if(gas > 0) { System.out.println("달립니다.(gas잔량:" + gas + ")"); gas -= 1; } else { System.out.println("멉춥니다.(gas잔량:" + gas + ")"); return; } } } }
public class CarExample { public static void main(String[] args) { Car myCar = new Car(); myCar.setGas(5); if(myCar.isLeftGas()) { System.out.println("출발합니다."); myCar.run(); } System.out.println("gas를 주입하세요."); } } // 출력 : // gas가 있습니다. // 출발합니다. // 달립니다.(gas잔량:5) // 달립니다.(gas잔량:4) // 달립니다.(gas잔량:3) // 달립니다.(gas잔량:2) // 달립니다.(gas잔량:1) // 멉춥니다.(gas잔량:0) // gas를 주입하세요.
◎ 메소드 오버로딩
▷ 메소드 이름은 같되 매개변수의 타입, 개수, 순서가 다른 메소드를 여러 개 선언하는 것입니다.
public class Calculator { double areaRectangle(double width) { return width * width; } double areaRectangle(double width, double height) { return width * height; } }
public class CalculatorExample { public static void main(String[] args) { Calculator myCalc = new Calculator(); double result1 = myCalc.areaRectangle(10); double result2 = myCalc.areaRectangle(10, 20); System.out.println("정사각형의 넓이= " + result1); System.out.println("직사각형의 넓이= " + result2); } }
메소드를 생성하고 사용하는 방법에 대해서 배워보았습니다.
아직은 익숙하게 사용이 되지 않네요,, 노력해서 익숙해지도록 해봐야겠어요!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
'BackEnd > Java' 카테고리의 다른 글
[java] 이것이 자바다 ch06 fianl 필드와 상수 (0) | 2023.01.11 |
---|---|
[java] 이것이 자바다 ch06 인스턴스 및 정적 멤버 (0) | 2023.01.11 |
[java] 이것이 자바다 ch06 클래스 (0) | 2023.01.11 |
[java] package jar 파일 만들기 (export/import) (0) | 2023.01.11 |
[java] 클래스를 이용한 문제 풀이 (0) | 2023.01.10 |