20260402Thu (DAY 6)

sungsimdangmascot·2026년 4월 2일

1. 함수와 데이터의 통로

함수는 특정 작업을 수행하기 위해 설계된 코드의 집합이다. 함수가 외부와 소통하는 방식은 입력(매개변수)과 출력(return)으로 나뉜다.

  • 매개변수(Parameter): 함수를 정의할 때 선언하는 변수다. 데이터가 들어올 '투입구' 혹은 '빈 칸' 역할을 한다. 함수 내부에서만 유효한 지역변수의 일종이다.
  • 인자(Argument): 함수를 호출할 때 괄호 안에 넣는 실제 값이다. 투입구를 통해 함수 내부로 전달되는 '진짜 데이터'를 의미한다.

예를 들어 plus(10, 20)에서 1020은 인자이며, 이를 받는 int a, int b는 매개변수다. 인자가 매개변수에 대입됨으로써 함수 내부의 로직이 실행된다.


2. 변수의 종류와 생명 주기 (Scope)

변수는 선언된 위치에 따라 접근 범위와 메모리 유지 시간이 결정된다. 자바에서는 중괄호 { }를 기준으로 변수의 생존 범위가 정해진다.

전역변수 (인스턴스 변수 / 필드)

  • 선언 위치: 클래스 블록 바로 아래에 선언된다.
  • 특징: 클래스 내의 모든 함수가 접근하고 수정할 수 있다. 객체의 '상태'를 나타낸다.
  • 수명: 객체가 생성될 때 태어나고, 객체가 메모리에서 사라질 때까지 유지된다.

지역변수

  • 선언 위치: 함수 블록 { } 내부 또는 for문, if문 등의 제어문 내부에서 선언된다.
  • 특징: 선언된 해당 블록 안에서만 사용할 수 있으며 외부에서는 존재를 알 수 없다.
  • 수명: 함수나 블록의 실행이 끝나면 즉시 소멸한다.

매개변수

  • 특징: 함수 외부에서 값을 넘겨받을 때 생성되는 변수다. 지역변수와 마찬가지로 함수의 실행이 종료되면 즉시 사라진다.

참고: 전역변수와 지역변수의 이름이 같을 경우 지역변수가 우선권을 가진다. 이 상황에서 전역변수를 지칭하려면 this 키워드를 사용하여 this.a와 같이 표현한다.


3. return의 역할과 반환 타입

return은 함수의 실행 결과를 외부로 전달하거나 함수를 즉시 종료시키는 명령이다.

  • 값의 반환: 함수가 실행을 마치고 그 자리에 결과값을 남기는 행위다. 이를 '결과값으로의 변신'이라고 이해할 수 있다.
  • 반환 타입(Return Type): 함수 이름 앞에 int, double, boolean 등을 명시해야 한다. 만약 int라면 반드시 정수값을 반환해야 한다. 결과값이 없는 경우 void를 사용한다.
  • 함수 종료: 로직 수행 중 return을 만나면 그 즉시 함수는 종료된다. 조건문과 결합하여 특정 상황에서 함수를 조기에 끝내는 용도로 활용된다.

4. static 키워드의 이해

static은 객체(인스턴스)에 소속되는 것이 아니라 클래스(설계도) 자체에 고정되는 키워드다.

  • 객체 생성 생략: 일반적인 기능을 사용하려면 new를 통해 객체를 만들어야 하지만, static이 붙은 함수나 변수는 클래스명.함수이름()으로 즉시 호출이 가능하다.
  • 공유성: 모든 객체가 하나의 메모리 공간을 공유한다. 100개의 객체를 생성해도 static 변수는 메모리에 단 하나만 존재한다.
  • 메모리 상주: 프로그램이 시작될 때 메모리에 자동으로 올라가며, 프로그램이 종료될 때까지 사라지지 않는다.

5. 실전 로직 분석: 1부터 n까지의 합과 최대값 찾기

1부터 nn까지의 합 (oneToSum)

  1. 결과를 담을 지역변수 sum을 0으로 초기화한다.
  2. for문을 사용하여 1부터 매개변수 n까지 반복한다.
  3. 반복마다 sum += i를 수행하여 값을 누적한다.
  4. 최종 누적된 sumreturn하여 함수 호출지로 돌려준다.

배열에서 최대값 찾기 (findMax)

  1. 배열의 첫 번째 요소(arr[0])를 초기 최대값(max)으로 설정한다.
  2. 배열의 길이(arr.length)만큼 반복하며 각 요소를 max와 비교한다.
  3. 현재 요소가 max보다 크면 max를 해당 요소의 값으로 갱신한다.
  4. 모든 요소를 검사한 후 최종적으로 남은 max 값을 반환한다.

6. 최종 요약표

구분전역변수 (필드)지역변수 (매개변수 포함)static (정적)
소속객체 (인스턴스)함수 또는 블록클래스 (설계도)
수명객체와 운명을 같이 함함수 종료 시 소멸프로그램 시작 시 생성, 종료 시 소멸
접근 방식객체 생성 후 접근블록 내부에서만 접근클래스 이름으로 직접 접근
목적객체의 상태 저장임시 계산 및 데이터 전달공통 기능 및 데이터 공유

추가 설명

static int sumArray(int numbers[]) {}

static int sumArray(int numbers[]) { }

이 코드는 자바에서 함수의 시작을 알리는 선언부이다. 각 키워드가 컴퓨터에 내리는 명령을 순서대로 분석한다.


1. static (정적 키워드)

  • 의미: 이 함수를 '클래스 소유'로 설정한다.
  • 작동: new 계산기()와 같이 객체를 생성하는 과정 없이,
    계산기.sumArray()처럼 클래스 이름만으로 즉시 함수를 실행할 수 있게 한다.
  • 특징: 프로그램이 실행될 때 메모리에 미리 올라가 있으므로 언제든 호출 가능하다.

2. sumArray (함수 이름)

  • 의미: 이 기계의 고유 명칭이다.
  • 작동: 다른 곳에서 이 기능을 쓰고 싶을 때 부르는 이름이다. 개발자가 자유롭게 정할 수 있으나, 보통 함수의 기능을 잘 나타내는 이름을 사용한다.

3. (int numbers[]) (매개변수)

  • 의미: 함수 외부에서 내부로 데이터를 들여보내는 '투입구'이다.
  • 작동: int[]는 정수 배열을 의미하며, numbers는 함수 안에서 그 배열을 부를 임시 이름이다.
  • 역할: 호출하는 쪽에서 던져준 배열 데이터를 함수 내부 로직에서 사용할 수 있도록 연결한다.

4. { (중괄호 시작) }

  • 의미: 함수의 몸체(Body)가 시작됨을 알린다.
  • 작동: 이 기호 이후부터 나오는 코드들이 sumArray라는 이름으로 묶여 실행될 실제 로직이다.

요약

이 한 줄은 "객체 생성 없이 바로 사용할 수 있고(static), 정수를 결과로 돌려주며(int), 이름은 sumArray이고, 정수 배열(int numbers[])을 입력받아 처리를 시작한다({)"는 선언이다.



1. for-each문이란?

for-each문은 자바 5부터 도입된 기능으로, 배열이나 리스트와 같은 데이터 뭉치에서 요소를 하나씩 차례대로 꺼내어 반복 작업을 수행한다. 기존 for문이 인덱스(방 번호)를 조절하며 접근하는 방식이었다면, for-each문은 데이터 그 자체에 집중하는 방식이다.


2. 문법 구조

for (타입 변수명 : 배열명) {
    // 반복 실행할 코드
}
  • 타입: 배열에 담긴 데이터의 자료형을 적는다. (예: int, String 등)
  • 변수명: 배열에서 하나씩 꺼낸 데이터를 임시로 담아둘 이름이다.
  • 배열명: 순회하고자 하는 대상 배열이나 리스트의 이름이다.

3. 기존 for문과의 비교

기존 for문과 for-each문의 가장 큰 차이는 인덱스(i)의 존재 여부다.

기존 for문 (인덱스 방식)

"0번 방부터 마지막 방까지 번호를 하나씩 올려가며 그 안에 있는 값을 가져와라"는 방식이다.

int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

for-each문 (내용물 추출 방식)

"배열 안에 있는 내용물을 처음부터 끝까지 하나씩 다 나에게 넘겨라"는 방식이다.

int[] arr = {1, 2, 3};
for (int n : arr) {
    System.out.println(n);
}

4. 장점과 단점

장점

  1. 가독성 향상: 코드의 줄 수가 줄어들고 로직이 명확해진다.
  2. 안전성: i < arr.length와 같은 조건을 잘못 작성하여 발생하는 인덱스 초과 오류를 방지할 수 있다.
  3. 간결함: 초기화식, 조건식, 증감식을 일일이 작성할 필요가 없다.

단점

  1. 인덱스 사용 불가: 현재 몇 번째 요소를 처리 중인지 알 수 없다.
  2. 수정 불가: 반복문 내부에서 배열의 원본 값을 직접 변경하는 작업에는 적합하지 않다. (복사본을 사용하기 때문)
  3. 단방향 순회: 무조건 처음부터 끝까지 순서대로만 진행한다. 역순으로 출력하거나 특정 구간을 건너뛰는 작업이 불가능하다.

5. 작동 원리 분석

컴퓨터 내부에서는 다음과 같은 순서로 작동한다.
1. 지정된 배열의 첫 번째 요소를 가져와 변수에 대입한다.
2. 중괄호 { } 안의 로직을 실행한다.
3. 다음 요소가 있으면 가져와 변수에 다시 대입하고 반복한다.
4. 더 이상 가져올 요소가 없으면 반복문을 종료한다.


6. 결론

배열이나 컬렉션의 모든 요소를 단순히 출력하거나 합산하는 등 전체 순회가 목적일 때는 for-each문을 사용하는 것이 가장 효율적이다. 하지만 방 번호가 필요하거나 배열의 값을 직접 수정해야 하는 특수한 경우에는 기존의 for문을 선택해야 한다. 상황에 맞는 적절한 반복문 선택이 좋은 코드를 만든다.

profile
성심당마스코트

0개의 댓글