13. 함수(Function)와 메서드(Method)

박은서's avatar
Dec 16, 2025
13. 함수(Function)와 메서드(Method)

1. 함수(Function)

1️⃣ 함수란?

1) 함수의 개념

특정한 일을 하도록 미리 만들어 놓은 ‘작업 버튼’ 같은 것
  • 어떤 일을 묶어서
  • 이름을 붙여두고
  • 필요할 때마다 불러서 쓰는 코드 덩어리
→ 함수는 입력을 받아서 정해진 작업을 한 뒤 결과를 내놓는 코드 덩어리
⚠️ 상태에 따라 다른 값이 나오는 건 함수라고 할 수 없음

2) 자바에서 함수

👉 자바에는 “독립 함수”가 없다
⚠️ 자바에서는 모든 함수 = 클래스 안에 있는 메서드(Method)

2️⃣ 함수의 기본 구조(일반적인 개념)

1) 기본 구조

반환값 함수이름(입력값) { 처리 내용 return 결과; }

2) 예시

add(3, 5) → 8

3️⃣ 함수의 구성 요소

1) 함수 이름

  • 함수 호출 시 사용

2) 매개변수(Parameter)

  • 함수로 전달되는 값

3) 반환값(Return)

  • 함수 실행 결과
  • 없으면 void

4️⃣ 함수의 호출 과정

  1. 함수 호출
  1. 매개변수 값 전달
  1. 함수 내부 실행
  1. return 값 전달
  1. 호출 위치로 복귀
📌 이 과정은 Stack 메모리에서 이루어짐

5️⃣ Consumer (소비자, 소비 함수)

1) 개념

입력은 받지만(consume), 아무것도 돌려주지 않는 함수
👉 값을 받아서 사용(소비)만 하고, 반환값은 없음

2) Consumer가 필요한 경우

  • 출력
  • 로그
  • 값 저장
  • 화면 표시

3) 실습

void 입력해서 사용
package ex04; // add(+), minus(-), multi(*), divide(/) public class Cal01 { static void add(int a, int b){ //void 중요! 생략불가 System.out.println("a+b="+(a+b)); } static void minus(int a, int b){ System.out.println("a-b="+(a-b)); } static void multi(int a, int b){ System.out.println("a*b="+(a*b)); } static void divide(int a, int b){ System.out.println("a/b="+(a/b)); } public static void main(String[] args) { add(3,5); //static에 있는 것 "class이름.OO"로 불러 와야 함. 같은 파일에서는 생략 가능 minus(10,7); multi(2,6); divide(16,4); } }
notion image

6️⃣ Supplier (공급자, 공급 함수)

1) 개념

함수로 도출된 값을 공급(리턴)하는 함수

2) Supplier가 필요한 경우

  • 객체 생성
  • 기본값 제공
  • 지연 로딩(Lazy Loading)

3) 실습

int, String 등 return값의 타입을 입력해서 사용
package ex04; // add(+), minus(-), multi(*), divide(/) public class Cal02 { static int add(int a, int b){ return a+b; } static int minus(int a, int b){ return a-b; } static int multi(int a, int b){ return a*b; } static int divide(int a, int b){ return a/b; } public static void main(String[] args) { int r1 = add(3,5); int r2 = minus(3,5); int r3 = multi(3,5); int r4 = divide(3,5); System.out.println(r1+r2+r3+r4); } }
notion image
 

2. 메서드(Method)

1️⃣ 메서드란?

클래스 안에 정의된 동작(행위), 객체가 할 수 있는 일을 코드로 표현한 것
행위를 통해 상태(변수)를 변경
⚠️ 상태에 따라 출력값이 달라지거나 상태를 변경시키는 것은 메서드
⚠️ 객체 지향 프로그래밍에서 상태에 따라 변경되는 메서드 지양

2️⃣ 메서드의 기본 구조

1) 기본 구조

접근제어자 반환타입 메서드이름(매개변수) { 실행문; return 반환값; }

2) 예시

public int add(int a,int b) { return a + b; }

3️⃣ 메서드의 구성 요소

1) 접근 제어자

  • public : 어디서나
  • protected : 상속 관계
  • default : 같은 패키지
  • private : 클래스 내부

2) 반환 타입

  • 메서드 실행 결과 타입
  • 없으면 void
void print() { }

3) 메서드 이름

  • 동사형 권장 (calculate, print)

4) 매개변수

  • 메서드 호출 시 전달받는 값
  • 여러 개 가능

5) return 문

  • 메서드 종료
  • 반환값 전달

4️⃣ 메서드의 호출

1) 인스턴스 메서드

Calculator c=new Calculator(); int result= c.add(3,4);
📌 객체를 통해 호출

2) static 메서드

  • 객체 생성 ❌
  • 클래스 소속
class MathUtil { static int square(int x) { return x * x; } }
int r = MathUtil.square(5);

5️⃣ 메서드와 메모리 구조

  • 호출 시 Stack 영역에 쌓임
  • 지역 변수는 메서드 종료 시 제거
main() └─add() └─ return

6️⃣ 실습

package ex04; public class Tv01 { boolean on = false; // 상태 / 메인 전에 적으면 상태가 됨. 메인 안에 적으면 상태 아님. public static void main(String[] args) { // 이 라인에서는 static만 떠있는 상태 Tv01 tv = new Tv01(); // 객체(Object) 생성 / new class명() - static이 아닌 것들 메모리(힙이라는 공간)에 다 띄움 System.out.println(tv.on); tv.on = true; System.out.println(tv.on); } }
false → on으로 상태 변경. 문법적으로는 맞지만 프로그램에서 이렇게 사용하지 않음
상태는 무조건 행위를 통해 변경 → 이게 메서드
행위를 적는 라인은 class 중괄호 안에 입력(main 전)
package ex04; public class Tv01 { boolean status = false; // 상태 / 메인 전에 적으면 상태가 됨. 메인 안에 적으면 상태 아님. void on(){ // on을 실행하면 true로 상태가 변화 -> 메서드 System.out.println("tv가 켜졌어요."); status = true; // 상태변경 } void off(){ // off를 실행하면 false로 상태가 변화 -> 메서드 System.out.println("tv가 꺼졌어요."); status = false; } public static void main(String[] args) { // 이 라인에서는 static만 떠있는 상태 Tv01 tv = new Tv01(); // 객체(Object) 생성 / new class명() - static이 아닌 것들 메모리(힙이라는 공간)에 다 띄움 System.out.println(tv.status); tv.on(); System.out.println(tv.status); tv.off(); System.out.println(tv.status); } }
notion image
 

필기 정리

notion image
Share article