[Java] 클래스와 객체 - 함수와 메서드

나영원·2020년 8월 24일
1

Java_basic

목록 보기
22/60
post-custom-banner

클래스안에서 사용되는 함수(function)의 일종인 메서드를 만들기 위해 함수의 개념과 함수의 구조, 그리고 호출될 때 사용되는 메모리에 대해서 배워보도록 하겠습니다.

함수란?

함수(function)

  • 함수는 다른 프로그램 언어들에도 많이 사용되는 개념으로 하나의 기능을 구현 하는 일련의 코드를 뜻합니다. 함수의 길이와는 상관없이 하나의 기능만을 합니다.
  • 함수로 구현된 기능은 필요한 여러곳에서 호출되어서 사용됩니다. 예를 들어 더하기라는 함수가 있다면 거리를 더하던 숫자를 더 하던 성적을 더하던 더하기라는 한 기능을 여러 곳해서 호출해서 사용하게 됩니다..
  • 그렇기 때문에 재사용이 가능하고, 기능이 분리되어서 작성 되기 때문에 가독성이 좋고 이후에 유지 보수하는데 도움이 된다는 장점이 있습니다.

함수의 입력과 반환

  • 입력값 => 함수 => 결과값의 구조로 되어 있으며 함수에 따라서 입력값이나 반환값이 없을 수 도 있습니다.
  • Java에서는 입력값을 매개변수, 결과값을 반환값이라고 부릅니다.

함수 정의 하기

  • 함수는 이름, 매개변수(입력값), 반환 값(결과 값), 함수 몸체(body) 4가지로 구성되지만 매개변수와 반환 값은 경우에 따라 생략 될 수 있습니다.
  • 다음은 더하기 함수 예시이고 아래에 각 항목별 설명을 괄호로 붙여봤습니다.

    더하기 함수 예시

int(반환하는 결과값의 자료형 없을시 void) add(함수명)(int num1, int num2)(자료형 매개변수1, 자료형 매개변수2)

{

  int result;                   ( 함수 몸체 )

  result = num1 + num2 (  body      )

  return result; (반환값)

}

실습

public class FunctionTest {
	//function 1
	public static int addNum(int num1, int num2 ) {
		int result;
		result = num1 + num2;
		return result;
	}
	//function 2
	public static void sayHello(String greeting) {
	
		System.out.println(greeting);
	}
	//function 3
	public static int calSum() {
		int sum = 0;
		int i;
		
		for (i = 0 ; i<=100; i++) {
			sum+= i;
		}
		return sum;
	}
	
	public static void main(String[] args) {
		// call function1 
		int n1= 10;
		int n2= 20;
		
		int total = addNum(n1,n2);
		System.out.println(total);  // result = 30
		// call function2
		sayHello("안녕하세요"); // result = 안녕하세요
		// call function3 
		int num = calSum();
		System.out.println(num); // 5950

	}
}
  • function1은 addNum 함수로 num1, num2에 매개변수를 입력하여 int result의 반환값을 내보내는 함수입니다.
  • function2는 String 매개 변수를 출력해주는 함수로 반환값이 없어 void라고 써줍니다.
  • function3은 1~100 까지 더하는 함수로 매개변수는 없고 반환값이 int인 함수입니다.
  • 함수는 기능이고 자체 출력이 되지 않기 때문에 호출해서 사용해야 합니다. main에 3가지 함수를 호출해서 알맞은 함수명과 알맞은 매개변수를 괄호안에 넣으면 함수기능에 따라 결과값을 출력합니다.

매서드(method)

메서드는 객체의 기능을 구현하기 위해 클래스 내부에서 구현되는 함수를 뜻합니다. 즉, 메서드를 구현함으로 객체의 기능이 구현되게 됩니다.
메서드의 이름은 사용하는쪽(클라이언트 코드)에 맞게 명명하는게 좋은데 예를들어 학생의 이름을 불러오는 메서드를 만든다다면 getStudentName이라고 짓는 것을 뜻합니다. (서버쪽 입장에서 생각해보면 sendStudnetName이 될 수도 있기 때문입니다.)
또한 함수명은 Camel Notaion에 맞게 시작은 소문자로 하여 단어가 바뀔 때 마다 대문자를 사용해주는게 좋습니다.

함수와 메모리

public class FunctionTest {
	//function 1
	public static int addNum(int num1, int num2 ) {
		int result;
		result = num1 + num2;
		return result;
	}

	
	public static void main(String[] args) {
		// call function1 
		int n1= 10;
		int n2= 20;
		
		int total = addNum(n1,n2);
		System.out.println(total);  // result = 30
	
	}

}
  • 함수에서 사용되는 메모리는 짐이 쌓여있는 모양의 스택메모리라고 하여 먼저 들어가는것 아래로 쌓이고 사용할때는 위에서부터 꺼내서 사용하는 메모리입니다.

  • 위 예시에 메모리 사용을 생각해 보면, 먼저 메모리에 main 함수가 들어가 있고 함수 안에 포함된 지역변수(함수내에서만 사용되는 변수) args[], n1=10, n=20가 포함되어 있습니다.

  • 그 상태에서 addNum을 호출하면 main함수 위에 addNum이 메모리에 잡히게 되고 그 변수인 num1; num2; result;도 함께 메모리에 잡히게 됩니다.

  • addNum 함수가 호출되는 순간 main에 있던 n1의 값10이 num1으로 넘어가 대입되고 num2 값도 넘어가게 됩니다.

  • 그 후 addNum이 리턴되고 수행이 끝나게 되면 메모리에는 main함수 부분만 남고 addNum은 메모리에서 사라집니다. (함수는 사용 후 메모리를 반환합니다.)

profile
배우는 개발 일기
post-custom-banner

0개의 댓글