1. 함수(function)
1)함수
-하나의 기능을 구현하는 코드 (여러 개가 아닌 하나의 기능)
ex. 더하기라는 하나의 기능을 하는 함수를 각 경우에 맞게 호출한다
- 반환값 : 함수를 사용한 뒤 나온 결과를 돌려준다(보여준다)
- 호출: 함수를 불러서 사용한다
- 장점: 기능 분리 그러므로 가독성 올라간다. 반복해서 사용하기 좋다. 디버깅, 업데이트할 때 편리
-형태 : 들어가는 값(매개변수) - 함수(이름) - 나오는 값(반환값)
cf. 경우에 따라 매개변수, 반환값이 없을 수 있다
2)정의하기
-데이터 타입이 있으면 반환값의 종류를 정해준다
-void : 반환값이 없으면 데이터 타입을 선언하는 자리에 void 사용
데이터 타입 이름( 매개변수 ){
함수 몸체 int result;
반환 return result
}
ex. int add(n1, n2){
int result;
result = n1 + n2;
return result
}
ex.
public static int addNum(int num1, int num2){
int result;
result = num1 + num2;
return result;
}
ex. 반환값이 없는 함수
public static void sayHello(String greeting){
System.out.println(greeting);
}
ex. 매개변수가 없는 함수
publice static int calcSum(){
int sum;
int i;
for (i= 0; i<=100; i++){
sum + = i;
}
return sum;
}
함수 내에 다른 함수를 부를 수도 있다.
반환값이 없는 함수는 다른 변수로 받을 수 없다. (값이 없는 거니까)
2. 메서드
-객체 기능 구현하기 위해 클래스 내부에 구현되는 함수
-메서드의 이름은 사용하는 쪽(클라이언트 코드)에 맞게 명명하는 것이 좋dma
ex. public String getStudentName(){
return studentName;
}
cf. 제공하는 쪽 : 서버 코드
=> 서버 코드면 주는 거니까 giveStudentName이었겠지
cf. 클래스는 대문자,
변수와 메서드는 소문자 시작, camel notation으로 띄어쓰기 대신 대문자
3.스택 메모리
함수 호출할 때 사용하는 메모리
stack구조이므로 들어갈 때 가장 마지막에 들어간 메모리가 먼저 꺼내진다
함수 호출이 되는 순으로 stack 메모리 밑에 깔리고 차례로 쌓인다.
cf. 물리적으로 위에 올라가는 것이 아니라 이전 함수가 더 depth가 깊어진다는 의미.
함수 기능 수행이 끝나면 위에서부터 반환되고 각 함수의 지역변수는 기능을 다 한 채로 반환된다. (사라진다)
ex. public static void main(String[] args){
int n1 = 10;
int n2 = 20;
int total = addNum(n1, n2);
}
=> main함수 안 지역변수 Srting, n1,n2 (지역 변수: 함수 내부에서만 사용되는) 이 스택 메모리 바닥에 깔린다
=> addNum이 호출이 되면서 main 위에 올라간다
addNum의 지역변수 (num1, num2, result)
=> addNum의 수행이 끝나면 main 함수가 남고 addNum의 메모리가 없어진다
cf. 변수의 이름은 달라도 같아도 상관이 없다.
cf. 클래스 안 멤버 변수들은 함수 안 지역변수와 다르기 때문에 생성과 반환 시기가 다르다.