함수는 특정 작업을 수행하기 위해 설계된 코드의 집합이다. 함수가 외부와 소통하는 방식은 입력(매개변수)과 출력(return)으로 나뉜다.
예를 들어 plus(10, 20)에서 10과 20은 인자이며, 이를 받는 int a, int b는 매개변수다. 인자가 매개변수에 대입됨으로써 함수 내부의 로직이 실행된다.
변수는 선언된 위치에 따라 접근 범위와 메모리 유지 시간이 결정된다. 자바에서는 중괄호 { }를 기준으로 변수의 생존 범위가 정해진다.
{ } 내부 또는 for문, if문 등의 제어문 내부에서 선언된다.참고: 전역변수와 지역변수의 이름이 같을 경우 지역변수가 우선권을 가진다. 이 상황에서 전역변수를 지칭하려면
this키워드를 사용하여this.a와 같이 표현한다.
return은 함수의 실행 결과를 외부로 전달하거나 함수를 즉시 종료시키는 명령이다.
int, double, boolean 등을 명시해야 한다. 만약 int라면 반드시 정수값을 반환해야 한다. 결과값이 없는 경우 void를 사용한다.return을 만나면 그 즉시 함수는 종료된다. 조건문과 결합하여 특정 상황에서 함수를 조기에 끝내는 용도로 활용된다.static은 객체(인스턴스)에 소속되는 것이 아니라 클래스(설계도) 자체에 고정되는 키워드다.
new를 통해 객체를 만들어야 하지만, static이 붙은 함수나 변수는 클래스명.함수이름()으로 즉시 호출이 가능하다.static 변수는 메모리에 단 하나만 존재한다.sum을 0으로 초기화한다.for문을 사용하여 1부터 매개변수 n까지 반복한다.sum += i를 수행하여 값을 누적한다.sum을 return하여 함수 호출지로 돌려준다.arr[0])를 초기 최대값(max)으로 설정한다.arr.length)만큼 반복하며 각 요소를 max와 비교한다.max보다 크면 max를 해당 요소의 값으로 갱신한다.max 값을 반환한다.| 구분 | 전역변수 (필드) | 지역변수 (매개변수 포함) | static (정적) |
|---|---|---|---|
| 소속 | 객체 (인스턴스) | 함수 또는 블록 | 클래스 (설계도) |
| 수명 | 객체와 운명을 같이 함 | 함수 종료 시 소멸 | 프로그램 시작 시 생성, 종료 시 소멸 |
| 접근 방식 | 객체 생성 후 접근 | 블록 내부에서만 접근 | 클래스 이름으로 직접 접근 |
| 목적 | 객체의 상태 저장 | 임시 계산 및 데이터 전달 | 공통 기능 및 데이터 공유 |
static int sumArray(int numbers[]) {}
static int sumArray(int numbers[]) { }
이 코드는 자바에서 함수의 시작을 알리는 선언부이다. 각 키워드가 컴퓨터에 내리는 명령을 순서대로 분석한다.
new 계산기()와 같이 객체를 생성하는 과정 없이,계산기.sumArray()처럼 클래스 이름만으로 즉시 함수를 실행할 수 있게 한다. int[]는 정수 배열을 의미하며, numbers는 함수 안에서 그 배열을 부를 임시 이름이다.sumArray라는 이름으로 묶여 실행될 실제 로직이다.이 한 줄은 "객체 생성 없이 바로 사용할 수 있고(static), 정수를 결과로 돌려주며(int), 이름은 sumArray이고, 정수 배열(int numbers[])을 입력받아 처리를 시작한다({)"는 선언이다.
for-each문은 자바 5부터 도입된 기능으로, 배열이나 리스트와 같은 데이터 뭉치에서 요소를 하나씩 차례대로 꺼내어 반복 작업을 수행한다. 기존 for문이 인덱스(방 번호)를 조절하며 접근하는 방식이었다면, for-each문은 데이터 그 자체에 집중하는 방식이다.
for (타입 변수명 : 배열명) {
// 반복 실행할 코드
}
기존 for문과 for-each문의 가장 큰 차이는 인덱스(i)의 존재 여부다.
"0번 방부터 마지막 방까지 번호를 하나씩 올려가며 그 안에 있는 값을 가져와라"는 방식이다.
int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
"배열 안에 있는 내용물을 처음부터 끝까지 하나씩 다 나에게 넘겨라"는 방식이다.
int[] arr = {1, 2, 3};
for (int n : arr) {
System.out.println(n);
}
i < arr.length와 같은 조건을 잘못 작성하여 발생하는 인덱스 초과 오류를 방지할 수 있다.컴퓨터 내부에서는 다음과 같은 순서로 작동한다.
1. 지정된 배열의 첫 번째 요소를 가져와 변수에 대입한다.
2. 중괄호 { } 안의 로직을 실행한다.
3. 다음 요소가 있으면 가져와 변수에 다시 대입하고 반복한다.
4. 더 이상 가져올 요소가 없으면 반복문을 종료한다.
배열이나 컬렉션의 모든 요소를 단순히 출력하거나 합산하는 등 전체 순회가 목적일 때는 for-each문을 사용하는 것이 가장 효율적이다. 하지만 방 번호가 필요하거나 배열의 값을 직접 수정해야 하는 특수한 경우에는 기존의 for문을 선택해야 한다. 상황에 맞는 적절한 반복문 선택이 좋은 코드를 만든다.