이롭게 현명하게
[JAVA] 자바 클래스 메소드 본문
목차
메소드 선언
리턴타입
매개 변수 선언
매개변수의 수를 모를 경우
리턴(return) 문
메소드 오버로딩
<정리>
메소드 (method) : 객체의 동작에 해당하는 중괄호 블록
리턴타입 메소드이름([매개변수선언, ...]){
실행할 코드
}
메소드 오버로딩(Overloading) : 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것
class 클래스명{
리턴타입 메소드이름 (타입변수){
실행 내용
}
리턴타입 메소드이름(타입변수,타입변수){
실행내용
}
}
<오버로딩 조건>
매개 변수 타입, 개수, 순서 중 하나가 달라야 한다.
<오버로딩 하는 이유>
매개값을 다양하게 받아 처리할 수 있도록 하기 위해
[메소드 선언]
메소드 (method) : 객체의 동작에 해당하는 중괄호 블록
메소드는 필드를읽고 수정하는 역할도 하지만 다른 객체를 생성해서 다양한 기능을 수행하기도 한다.
메소드는 객체 간의 데이터 전달의 수단으로 사용된다.
외부로부터 매개값을 받을 수도 있고, 실행 후 어떤 값을 리턴할 수도 있다.
리턴타입 메소드이름([매개변수선언, ...]){
실행할 코드
}
[리턴타입]
리턴타입 : 메소드가 실행 후 리턴하는 값의 타입
매소드는 리턴값이 있을 수도 있고 없을 수도 있다.
메소드가 실행 후 결과를 호출한 곳에 넘겨줄 경우에는 리턴 값이 있어야 한다.
void powerOn(){ ... }
double divide(int x,int y) { ... }
powerOn();
double result = divide(10,20);
[매개 변수 선언]
// Calculator.java //
public class Calculator {
void powerOn() {
System.out.println("전원을 켭니다.");
}
int plus(int x, int y) {
int result = x+y;
return result;
}
void powerOff() {
System.out.println("전원을 끕니다.");
}
}
// Main.java //
public class Main {
public static void main(String[] args) {
Calculator myCalc = new Calculator();
myCalc.powerOn();
int result1 = myCalc.plus(5, 6);
System.out.println("result1 : "+result1);
byte x= 10;
byte y = 4;
double result2 = myCalc.plus(x, y);
System.out.println("result2 : "+result2);
myCalc.powerOff();
}
}
[매개변수의 수를 모를 경우]
메소드의 매개 변수는 개수가 이미 정해져 있는 것이 일반적이지만, 상황에 따라 메소드를 선언할 때 매개 변수의 개수를 알 수 없는 경우가 있다.
몇 개의 매개변수가 입력될지 알 수 없기 때문에 매개 변수의 개수를 결정할 수 없다.
이럴 때는 매개 변수 타입을 배열 타입으로 선언한다.
자료형 메소드명(자료형[] 배열명){ ... }
매개 변수를 배열 타입으로 선언하면 메소드를 호출하기 전에 배열을 생성해야 하는 불편한 점이 있다.
그래서 배열을 생성하지 않고 값의 리스트만 넘겨주는 방법도 있다.
메소드의 매개변수를 "..."를 사용하여 선언하게되면, 메소드 호출 시 넘겨준 값의 수에 따라 자동으로 배열이 생성되고 매개 값으로 사용된다.
자료형 메소드명 (자료형 ... 변수명) { ... }
package study;
public class Calculator {
void powerOn() {
System.out.println("전원을 켭니다.");
}
int plus(int x, int y) {
int result = x+y;
return result;
}
// 매개변수의 수를 모를 때
int sum(int ... values) {
int result=0;
for(int i = 0;i<values.length;i++) {
result += values[i];
}
return result;
}
void powerOff() {
System.out.println("전원을 끕니다.");
}
}
public class Main {
public static void main(String[] args) {
Calculator myCalc = new Calculator();
myCalc.powerOn();
int r = myCalc.sum(1,2,3);
System.out.println(r);
int r1 = myCalc.sum(new int[] {1,2,3,4});
System.out.println(r1);
}
}
" ... " 으로 선언된 매개 변수의 값은 메소드 호출 시 리스트로 나열해 준다.
이때 매개변수는 배열 타입이므로 배열을 직접 매개 값으로 사용해도 된다.
[리턴(return)문]
리턴문이 있어야 하는 데이터형 : int , double, float, boolean, byte, String, char 등
리턴문이 없어도 되는 데이터형 : void
[메소드 오버로딩]
메소드 오버로딩(Overloading) : 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것
메소드 오버로딩의 조건은 매개 변수 타입, 개수, 순서 중 하나가 달라야 한다.
메소드 오버로딩이 필요한 이유 : 매개값을 다양하게 받아 처리할 수 있도록 하기 위해
class 클래스명{
리턴타입 메소드이름 (타입변수){
실행 내용
}
리턴타입 메소드이름(타입변수,타입변수){
실행내용
}
}
메소드 오버로딩시 주의할 점
매개 변수의 타입과 개수, 순서가 똑같을 경우 매개 변수 이름만 바꾸는 것은 메소드 오버로딩이라고 볼 수 없다.
리턴 타입만 다르고 매개 변수가 동일하다면 이것은 오버로딩이 아니다.
리턴 타입은 자바 가상 기계(JVM)가 메소드를 선택할 때 아무런 도움을 주지 못하기 때문이다.
리턴 타입만 다르고 매개 변수가 동일하다면 오버로딩이 아니기 때문에 컴파일 오류가 발생한다.
잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊
댓글과 좋아요는 큰 힘이 됩니다!
[ 참고자료 ]
'JAVA' 카테고리의 다른 글
[JAVA] 자바 정적 멤버와 static (0) | 2023.04.20 |
---|---|
[JAVA] 자바 인스턴스 멤버와 this (0) | 2023.04.19 |
[JAVA] 자바 클래스 생성 (0) | 2023.04.14 |
[JAVA] 자바 클래스 필드 (0) | 2023.04.13 |
[JAVA] 자바 객체와 클래스 (2) | 2023.04.12 |