Table of Contents  
 목차
함수
의의: 입력한 데이터를 받아 일련의 과정을 거쳐 결과를 반환하는 과정

사용자 정의 함수
Main함수 뿐 아니라 사용자가 직접 정의하여 함수를 구성
함수 이름: 변수와 마찬가지로 임의로 정할 수 있음
내부 연산: 함수의 구성 목적에 맞는 코딩을 직접 작성

각 괄호 안에 있는 것: 함수 본문, 함수 결과 반환
쓰는 이유
1) 반복적인 프로그래밍을 피할 수 있다.
 -> 자주 사용되는 구문을 함수로 묶어 호출만 하면 되도록 프로그래밍한다.
2) 코드의 가독성이 높아진다. 
 -> 함수 이름을 명확하게 만들고 그 안에 코딩을 할 경우 프로그래밍의 가독성이 대폭 높아진다.
3) 유지 보수가 편하다.
 -> 자주 사용되는 구문이 문제가 있을 경우 함수 내 한번만 수정하면 된다
return의 쓰임새
1) 함수에서 결과 값을 함수를 호출했던 코드로 돌려보내는 역할
2) 함수를 종료하는 역할 (return 구문을 만나면 그 즉시 함수를 종료할 수 있다)
함수 내에서 입력 변수의 값 변경
[PROBLEM]
 [Q] a,b의 값이 변경이 될까?
public static void main(String[] args) {
  int a = 1;
  int b = 2;
  swap(a,b);
  System.out.println(a + “,” + b);
}
public static void swap(int a, int b)
{
  int tmp = a;
  a = b; 
  b = tmp;
}
[A] return 값이 없어서 swap 적용 X
 (그럼 a,b값을 return해볼까?) 자바는 return 하나 밖에 안됌ㅠㅠ 
[SOLUTION]
주소값 전달
공용공간을 던지자
public static void main(String[] args) {
  int a = 1,b = 2;
  int [] c = {a,b};
  swap(c);
  System.out.println(c[0] + "," + c[1]);
}
public static void swap(int []a)
{
  int tmp = a[0];
  a[0] = a[1];
  a[1] = tmp;
}

주소값 반환
공용공간을 함수에서 만들자
public static void main(String[] args) {
  int a = 1; int b = 2;
  int [] swapped = swap(a,b);
  System.out.println(swapped[0] + ", " + swapped[1]);
}
public static int[] swap(int a, int b)
{
  int [] c = {a,b};
  int temp = c[0];
  c[0] = c[1];
  c[1] = temp;
  return c;
}

지역변수 사용 범위
-  지역변수: 함수 안에서 정의된 함수 
 지역변수는 그 함수 안에서만 사용 된다
-  전역변수: 함수 밖 전체에서 정의 된 함수 
 //  전역 변수
 int a = 0 ;
public static void swap()
{
 // 지역변수
 int a = o ; 
}
[Q]
- 만약에 다음과 같이 i를 재활용하면?
 ```java
 for(int i = 10;i>=1;i–) { System.out.println(i); }
System.out.println(i); ```
(A) 
 에러가 난다(지역변수는 그 안에서만 할당)