1. 메서드
메서드의 장단점
장점 | 단점 |
|
|
함수
: 값을 입력 받아서 처리하고 결과를 반환
- void(반환타입): 메서드 수행시 아무것도 반환하지 않을 때 사용
메서드 호출
import com.sun.jdi.Method;
class Method5_1 {
int add(int x, int y) {
int result = x + y;
return result;
}
}
class Method5_1Main {
public static void main(String[] args) {
Method5_1 method = new Method5_1(); // Method5_1 클래스에 만든 메서드 add를 사용하기 위해 객체 생성
int result = method.add(3, 5); // add 메서드를 사용해서 입력한 값(3, 5)으로 처리된 값을 반환받아 result 변수에 저장
System.out.println("result = " + result);
}
}
return
: 실행중인 메서드를 종료하고 호출한 곳으로 되돌아감
- 반환타입이 void가 아닌 경우, 반드시 return 문 필요
- void는 컴파일러가 자동으로 메서드 마지막에 return;을 추가해줌
class Method5_2 {
void gugudan(int dan) {
if(!(dan >= 2 && dan <= 9)) {
System.out.println(dan + "단은 없습니다.");
return;
}
System.out.println(dan + "단 시작");
for(int i=1; i<10; i++) {
System.out.println(dan + "*" + i + " = " + dan * i);
}
System.out.println();
}
boolean checkMax(int x, int y) {
if(x > y) {
return true;
} else {
return false;
}
}
}
class Method5_2Main {
public static void main(String[] args) {
Method5_2 method = new Method5_2();
method.gugudan(2);
method.gugudan(5);
method.gugudan(10);
method.gugudan(9);
System.out.println("method.checkMax(10, 8) = " + method.checkMax(10, 8));
System.out.println("method.checkMax(5, 9) = " + method.checkMax(5, 9));
}
}
문장들의 묶음
: 코드의 중복을 하나의 묶음으로 만들어 코드의 가독성 및 효율을 높여줌
class Time5_1 {
int hour;
int min;
int sec;
}
class Method5_3 {
static void initObj(Time5_1 time, int hour, int min, int sec) {
time.hour = hour;
time.min = min;
time.sec = sec;
}
}
class Method5_3Main {
public static void main(String[] args) {
Time5_1 t1 = new Time5_1();
t1.hour = 100;
t1.min = 20;
t1.sec = 43;
Time5_1 t2 = new Time5_1();
t2.hour = 22;
t2.min = 30;
t2.sec = 23;
Time5_1 t3 = new Time5_1();
t3.hour = 45;
t3.min = 40;
t3.sec = 52;
System.out.println("t1.hour = " + t1.hour);
System.out.println("t2.hour = " + t2.hour);
System.out.println("t3.hour = " + t3.hour);
System.out.println();
Time5_1 t4 = new Time5_1();
Time5_1 t5 = new Time5_1();
Time5_1 t6 = new Time5_1();
Method5_3.initObj(t4, 100, 20, 43);
Method5_3.initObj(t5, 22, 30, 23);
Method5_3.initObj(t6, 45, 40, 52);
System.out.println("t4.hour = " + t4.hour);
System.out.println("t5.hour = " + t5.hour);
System.out.println("t6.hour = " + t6.hour);
}
}
2. 호출 스택(call stack)
호출 스택
: 메서드 수행에 필요한 메모리가 제공되는 공간.
메서드가 호출되면 스택에 메모리가 할당, 종료되면 해제됨
class CallStack5_1 {
static void firstMethod() {
System.out.println("firstMethod()");
secondMethod();
}
static void secondMethod() {
System.out.println("secondMethod()");
thirdMethod();
}
static void thirdMethod() {
System.out.println("thirdMethod()");
finalMethod();
}
static void finalMethod(){
System.out.println("finalMethod()");
}
public static void main(String[] args) {
firstMethod();
}
}
3. 기본형 매개변수
기본형 매개변수
: 변수의 값을 읽기만 할 수 있음
class Data6_1 {
int x;
int y;
}
class Data6_1Main {
public static void main(String[] args) {
Data6_1 data = new Data6_1();
data.x = 10;
data.y = 20;
System.out.println("Data6_1 클래스로 만든 data 인스턴스의 인스턴스 변수 x, y 값 확인");
System.out.println("data 인스턴스 변수 x = " + data.x);
System.out.println("data 인스턴스 변수 y = " + data.y);
System.out.println();
// changeParameter(data.x, data.y); 여기서의 data.x 와 data.y 는
// data 의 인스턴스 변수의 값 그자체가 복사되어 넘어가기 때문에
// changeParameter 메서드에서 입력받은 매개변수의 값을 바꿔도
// 영향을 받지 않음 !!!!!!!!!!!!!!!!
System.out.println("Data6_1 클래스로 만든 data 인스턴스의 인스턴스 변수의 값이 변경되었는지 확인");
System.out.println("changeParameter 메서드 수행 후 data 인스턴스 변수 x = " + data.x);
System.out.println("changeParameter 메서드 수행 후 data 인스턴스 변수 y = " + data.y);
}
static void changeParameter(int x, int y) {
System.out.println();
System.out.println("changeParameter 메서드 시작");
System.out.println("입력 받은 매개변수 x 와 y의 값 확인");
System.out.println("입력 받은 매개변수 x = " + x);
System.out.println("입력 받은 매개변수 y = " + y);
System.out.println();
System.out.println("입력 받은 매개변수 x 와 y의 값을 변경 한 후 확인");
x = 100;
y = 200;
System.out.println("변경 한 후 x = " + x);
System.out.println("변경 한 후 y = " + y);
System.out.println("changeParameter 메서드 끝");
}
}
4. 참조형 매개변수
참조형 매개변수
: 변수의 값을 읽고 변경할 수 있음
class Data6_2 {
Data6_3 data2 = new Data6_3(); // 참조형
}
class Data6_3 {
int x; // 기본형
int y; // 기본형
}
class Data6_2Main {
public static void main(String[] args) {
Data6_2 data = new Data6_2();
data.data2.x = 10;
data.data2.y = 20;
System.out.println("Data6_2 클래스로 만든 data 인스턴스의 data2인스턴스의 인스턴스 변수 값 확인");
System.out.println("참조변수 data2의 인스턴스 변수 x = " + data.data2.x);
System.out.println("참조변수 data2의 인스턴스 변수 y = " + data.data2.y);
System.out.println();
// changeParameter 메서드 의 매개변수에 Data6_2 클래스의 참조형 변수인 data2 를 입력
System.out.println("입력받은 매개변수의 값을 바꾸는 메서드 수행");
changeParameter(data.data2);
System.out.println();
// changeParameter(Data6_3 data2); 여기서 data.data2 는
// data 인스턴스의 참조형 변수 data2의 주소값이 넘어감
// 따라서 changeParameter 메서드에서 입력받은 data2의 주소값을 통해
// data2 의 인스턴스에 접근하여 인스턴스 변수를 바꾸기 때문에 영향을 받음.
System.out.println("Data6_3 클래스로 만든 data 인스턴스의 참조변수 data2의 인스턴스 변수 값이 변경되었는지 확인");
System.out.println("changeParameter 메서드 수행 후 data2의 인스턴스 변수 x = " + data.data2.x);
System.out.println("changeParameter 메서드 수행 후 data2의 인스턴스 변수 y = " + data.data2.y);
}
static void changeParameter(Data6_3 data2) {
System.out.println();
System.out.println("changeParameter 메서드 시작");
System.out.println("입력 받은 매개변수 data2의 인스턴스 x 와 y의 값 확인");
System.out.println("입력 받은 매개변수 data2의 인스턴스 x = " + data2.x);
System.out.println("입력 받은 매개변수 data2의 인스턴스 y = " + data2.y);
System.out.println();
System.out.println("입력 받은 매개변수 data2의 인스턴스 x 와 y의 값을 변경 한 후 확인");
data2.x = 100;
data2.y = 200;
System.out.println("변경 한 후 data2의 인스턴스 x = " + data2.x);
System.out.println("변경 한 후 data2의 인스턴스 y = " + data2.y);
System.out.println("changeParameter 메서드 끝");
}
}
'내일배움캠프(Sparta) > Java Handbook' 카테고리의 다른 글
[Java Handbook] Part 5-4 (0) | 2023.09.13 |
---|---|
[Java Handbook] Part 5-3 (0) | 2023.09.13 |
[Java Handbook] Part 5-1 (0) | 2023.09.12 |
[Java Handbook] Part 4-2 (0) | 2023.09.12 |
[Java Handbook] Part 4-1 (0) | 2023.09.12 |