Java/[패스트캠퍼스] Java & SpringBoot로 시작하는 웹 프로그래밍
Ch 02. 객체 지향 입문 - 03. 함수와 메서드
hinote
2022. 12. 30. 00:12
메서드는 함수의 종류 중 하나이다
함수란 (function)
- 하나의 기능을 수행하는 일련의 코드
예전부터 다른 언어에서 오랫동안 사용되어 왔음 - 구현된(정의된) 함수는 호출하여 사용하고 호출된 함수는 기능이 끝나면 제어가 반환됨
- 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있음
-하나의 함수를 만들면 여러군데에서 호출해서 쓸 수 있음
함수 정의하기
함수는 이름, 매개 변수, 반환 값, 함수 몸체(body)로 구성됨
int add(int num1, int num2) { //이 부분이 제일 중요함
// - 함수의 이름, 함수가 수행되기 위한 인풋이 있는지 확인
// -타입과 함께 변수를 써줌 (없을시 괄호만 써둠)
int result;
result = num1 + num2;
return result; //여기에 써있는 데이터 형과 같게 맨 윗줄에 써넣어야 함
// - 반환값에 대한 데이터 타입, 만약 수행만 하고 반환값이 없을때는 int대신 void 사용
}
함수 구현하기 예제
public class FunctionTest {
public static int addNum(int num1, int num2) {
//반환값 데이터 타입이 int인 경우. 매개변수를 두개 받는 것을 확인할 수 있음
int result;
result = num1 + num2;
return result;
}
public static void sayHello(String greeting) { //반환값이 없을 경우
System.out.println(greeting);
}
public static int calcSum() { //매개변수가 없는 경우
int sum = 0;
int i;
for(i = 0; i<=100; i++) {
sum += i;
}
return sum;
}
public static void main(String[] args) { //두개의 값을 더하는 함수 ( addNum 함수 불러오기 )
int n1 = 10;
int n2 = 20;
int total = addNum(n1, n2); //n1+n2=30
sayHello("안녕하세요"); //안녕하세요 그대로 출력됨
int num = calcSum(); //1부터 100까지 더해서 반환하기
System.out.println(total); //30 출력
System.out.println(num); //1부터 100까지 더한 값 출력
}
}
함수 호출과 스택 메모리
- 스택 : 함수가 호출될 때 지역 변수들이 사용하는 메모리
- 함수의 수행이 끝나면 자동으로 반환 되는 메모리
-> num1, num2, result / n1, n2, total 로 보면 됨
addNum이라는 함수가 호출이 되면 num1, num2 매개변수가 넘어오고 그 안에있는 result라는 반환값을 위한 변수도 있음
->이렇게 이 안에서 쓰이는 모든것들을 지역변수라고 함
지역변수는 그 지역에서만 쓰고 그 지역이 끝나면 자동으로 없어짐
-main에 있는 n1, n2, total도 지역변수임
main의 n1, n2가 addNum을 불렀을 시에 addNum()의 메모리 공간이 생김
addNum()에서 쓰는 지역변수 세개 num1, num2, result 를 위한 공간도 생김
그 이후 쭉 수행되다가 result가 반환이 되면 자동으로 메모리 공간이 삭제되고 다시 main만 남아있는 상태로 돌아옴
메서드 (method)
- 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수
함수 : 어디에 속해있지 않은 그냥 단독 모듈임. 걔를 호출해서 쓰면 됨
메서드 : 클래스 안에 속해있음, 그 클래스의 멤버변수들을 활용해서 구현되는 것 - 멤버 함수 (member function)이라고도 함 -> C++
- 메서드를 구현함으로써 객체의 기능이 구현 됨
- 메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는것이 좋음
-> 호출하는 입장에서 명령하는 것이 좋음
예) getStudentName() : StudentName()를 사용하는 다른 객체에서 StudentName을 호출할 때 사용