728x90
SMALL
* 메서드(Method)
객체의 기능(동작)을 메서드(함수)라고 한다.
반복적인 동일 작업이 많을 때, 메서드를 정의해 놓고 필요할 때마다 호출하여 사용하면 편리하다.
메서드는 크게 API에서 제공하는 메서드와 사용자 정의 메서드로 나뉜다.
메서드 이름에 결과 값을 담아서 리턴한다.(메서드 이름이 변수 역할)
public class MethodMakeTest {
public static void main(String[] args) {
int a=3;
int b=5;
int result = add(a, b);
System.out.println("result = " + result);
}
// 메인 메서드 밖에 독립적인 여러 메서드 생성 가능
// 매개변수로 2개의 정수를 받아서 총합을 리턴하는 메서드 정의
public static int add(int a, int b){
int sum = a+b;
return sum;
}
}
// 출력
result = 8
* 매개변수 전달기법(parameter passing)
매개변수는 값 또는 번지로 전달할 수 있다.
자바에서는 거의 번지로 전달한다.
1. Call By Value(값 전달)
public class CallByTest {
public static void main(String[] args) {
float a=56.7f;
float b=78.9f;
floatAdd(a, b); // Call By value(a와 b 값 전달), 아래에 정의한 메서드로 제어권이 이동
// 아래에 정의한 메서드의 할 일이 끝나면 다시 여기로 제어권 이동
System.out.println("종료");
}
// 매개변수로 2개의 실수를 받아서 총합을 구하여 리턴하는 메서드 정의
public static void floatAdd(float a, float b){
float hap =a+b;
System.out.println("hap = " + hap);
// 여기에 return문 없어도 메서드가 끝나면 원래 호출했던 곳 아래로 제어권 이동
// main이 끝나야 프로그램이 끝나기 때문에.
}
}
// 출력
result = 15
2. Call By Reference(번지 전달)
public class CallByReference {
public static void main(String[] args) {
int[] a={1, 2, 3, 4, 5};
int result = addArray(a); // Call by Reference
System.out.println("result = " + result);
}
// 매개변수로 정수형 배열을 받아서 총합을 구하고 리턴하는 메서드 정의
public static int addArray(int[] a){
int sum=0;
for(int i=0; i<a.length; i++){
sum=sum+a[i]; // sum+=a[i]
}
return sum;
}
}
// 출력
result = 15
* 메서드 오버로딩
하나의 클래스 내에서 동일한 이름의 메서드를 여러 개 사용할 수 있는 객체지향 기법이다.
단, 메서드의 시그니처(매개변수 개수 또는 타입)가 달라야 한다.
아래 코드에서 2개의 메서드 이름을 모두 add로 정의하였다.
public class MethodOverloading {
public static void main(String[] args) {
int v=add(10, 20);
System.out.println("v = " + v);
float vv=add(35.6f, 56.7f);
System.out.println("vv = " + vv);
}
// 매개변수로 2개의 정수를 받아서 총합을 구하여 리턴하는 메서드 정의
public static int add(int a, int b){ // public static void 아니고 add
int sum=a+b;
return sum;
}
// 매개변수로 2개의 실수를 받아서 총합을 구하여 리턴하는 메서드 정의
public static float add(float a, float b){
float sum=a+b;
return sum;
}
}
// 출력
v = 30
vv = 92.3
// println() 함수를 여러 개 사용하는 것도 메서드 오버로딩.
public class ApiOverloading {
public static void main(String[] args) {
System.out.println(10);
System.out.println(10.5f);
System.out.println('A');
System.out.println("APPLE");
}
}
* 정적 바인딩
정적바인딩이란 컴파일 시점에서 사용될(호출될) 메서드가 결정(연결)되는 바인딩이다.
동적바인딩과 달리, 컴파일 시점에서 메서드가 이미 결정되기 때문에 속도와는 전혀 무관하다.
바인딩은 '연결되는 시점'을 의미하고, 메서드 오버로딩은 정적바인딩 기법으로 구현된다.
728x90
LIST
'Java' 카테고리의 다른 글
[Java] 클래스로 객체 모델링 (0) | 2024.04.09 |
---|---|
JavaSE 프로그램의 기본 구조 (0) | 2024.01.29 |
자바 개발환경 구축(JDK 11, IntelliJ) (0) | 2024.01.03 |
댓글