본문 바로가기
  • Let's study
알고리즘/Java

[Java] 함수

by 코딩고수이고파 2026. 7. 13.

함수(Function)란?

특정 작업을 여러 번 반복해야 할 때, 같은 코드를 계속 작성하면 코드의 중복이 심해진다는 문제가 생긴다.

이때 사용하는 것이 함수(Function)​이다.

반복되는 코드를 따로 빼서 함수라는 틀로 선언해두고, 필요한 곳에서 함수를 호출해서 사용하면 된다. 이렇게 하면 같은 코드를 여러 번 작성할 필요가 없어지고, 코드를 수정해야 할 때도 함수만 수정하면 되기 때문에 관리하기도 훨씬 편하다.

함수는 클래스 안에 선언해야 하며, 함수 안에 또 다른 함수를 선언할 수는 없다.

public class Main {
    public static void main(String[] args) {
        work();
        work();
        work();
    }

    public static void work() {
        System.out.println("work1");
        System.out.println("work2");
        System.out.println("work3");
    }
}

매개변수를 이용하는 함수

함수를 사용할 때마다 같은 값만 사용하는 것이 아니라, 상황에 따라 다른 값을 전달하고 싶을 때가 있다.

이때 사용하는 것이 매개변수(Parameter)​이다.

매개변수는 함수를 선언할 때 전달받을 값을 저장하는 변수이다.

함수를 호출할 때 값을 전달하면, 전달된 값이 매개변수에 저장되어 함수 안에서 사용할 수 있다.

 

함수를 호출할 때 전달하는 값을 인수(Argument)​라고 하며, 전달한 인수는 함수의 매개변수(Parameter)​에 순서대로 저장된다.

또한 함수를 호출할 때는 매개변수의 개수와 자료형이 함수를 선언한 것과 일치해야 한다.

만약 개수가 다르거나 자료형이 다르면 오류가 발생한다.

public static void main(String[] args) {
    work(10, 20);
    work2("라푼젤");
}

// 매개변수 개수, 타입 일치해야 됨.
public static void work(int num1, int num2) {
    System.out.println(num1 + num2);
}

public static void work2(String name) {
    System.out.println("안녕하세요 저는 " + name + "입니다.");
}

리턴값이 있는 함수

함수는 작업을 수행한 뒤 리턴(return)​을 이용해 결과값을 외부로 전달할 수 있다.

쉽게 말하면 함수가 자신의 리턴값으로 변신한다고 생각하면 된다.

예를 들어 아래 코드에서 plus() 함수는 두 수를 더한 결과를 리턴한다.

public static void main(String[] args) {
    plus(10, 20);  // 30
    plus(5, 15);  // 20

}
public static int plus(int num1, int num2) {
    System.out.println(num1 + num2);

    return num1 + num2;
}

하지만 위 코드에서는 리턴값을 사용하지 않았기 때문에, 단순히 계산 결과만 반환하고 끝난다.

리턴값을 사용하는 이유

리턴값이 필요한 가장 큰 이유는 함수의 결과를 이용해 다른 작업을 할 수 있기 때문이다.

예를 들어 원의 넓이를 구하는 함수가 있다고 해보자.

public static void main(String[] args) {

    double rst1 = circleArea(10);
    double rst2 = circleArea(20);

    System.out.println(rst1);
    System.out.println(rst2);

    System.out.println(rst1 / 2); // 157.0
    System.out.println(rst2 * 2); // 1256.0
}

public static double circleArea(int radius) {
    return radius * radius * 3.14;
}

circleArea() 함수는 계산한 원의 넓이를 리턴하기 때문에, 그 결과를 변수에 저장할 수도 있고 다른 계산에 사용할 수도 있다.

예를 들어 circleArea(10)314.0으로 변신하므로 아래와 같이 생각할 수 있다.

double rst1 = 314.0;

이렇게 전달받은 값을 이용해 rst1 / 2처럼 추가 계산을 하거나, 다른 함수의 매개변수로 전달하는 등 다양한 작업을 할 수 있다.

즉, 함수의 결과를 2차 작업에 활용하려면 함수가 결과값을 리턴해야 한다.

지역 변수

함수 안에서 선언하는 모든 변수는 지역변수(Local Variable)​이다.

지역변수는 자신이 선언된 함수 안에서만 사용할 수 있으며, 함수의 실행이 끝나면 메모리에서 자동으로 해제된다.

public static void main(String[] args) {
    int a = 10; // 4바이트
    String b = "hello"; // 8바이트

    work();

    int c = 20; //4바이트
    String d = "world"; // 8바이트
}

public static void work() {
    int c = 10; // 4바이트
    String d = "hello"; // 8바이트

    System.out.println(c);
    System.out.println(d);

}

main() 함수에서는 a, b, c, d가 지역변수이고, work() 함수에서는 c, d가 지역변수이다.

여기서 중요한 점은 함수마다 사용하는 메모리가 서로 분리되어 있다는 것이다.

  • main() 함수는 a(4바이트)와 b(8바이트)를 사용한다.
  • work() 함수도 c(4바이트)와 d(8바이트)를 사용한다.

work() 함수가 호출되면 work()만의 메모리 공간이 생성되고, 함수가 종료되면 work()에서 사용한 메모리만 해제된다. main()에서 사용하던 변수들은 그대로 유지된다.

즉, work() 함수의 cmain() 함수의 c는 이름만 같을 뿐 서로 다른 변수이다.

지역변수의 가장 큰 특징은 함수가 실행되는 동안에만 존재하고, 함수가 끝나면 메모리에서 자동으로 사라진다​는 것이다. 그래서 다른 함수에서는 해당 지역변수를 사용할 수 없다.

인스턴스 변수

변수는 선언하는 위치에 따라 인스턴스 변수지역변수로 나뉜다.

지역변수는 함수 안에서 선언하는 변수이고, 함수가 실행되는 동안에만 사용할 수 있다. 함수의 실행이 끝나면 메모리에서 자동으로 해제된다.

반면 인스턴스 변수는 클래스 안에 선언하고, 객체가 생성될 때 함께 생성되는 변수이다. 객체가 존재하는 동안에는 계속 사용할 수 있으며, 여러 메서드에서 같은 값을 공유할 수 있다.

public class Instance {
    public static void main(String[] args) {
        Person p1 = new Person();

        p1.age = 20;
        p1.name = "홍길동";
        p1.home = "서울";
        p1.height = 180.5;

        p1.introduce();
    }
}

class Person {
    int age;
    String name;
    String home;
    double height;

    public void introduce() {
        System.out.println("나이: " + age + " 이름: " + name + " 사는 곳: " + home + " 키: " + height);
    }
}

Person 클래스의 age, name, home, height는 모두 인스턴스 변수이다.

Person p1 = new Person();을 실행하면 Person 객체가 생성되고, 이와 동시에 인스턴스 변수들도 함께 생성된다.

이후 p1.age = 20, p1.name = "홍길동"처럼 값을 저장하면, introduce() 메서드에서도 같은 값을 그대로 사용할 수 있다.

반면 introduce() 메서드 안에서 선언하는 변수는 모두 지역변수이다.

public void introduce() {
    int year = 2026; // 지역변수
}

yearintroduce()가 실행되는 동안에만 존재하며, 메서드가 종료되면 메모리에서 자동으로 해제된다.

'알고리즘 > Java' 카테고리의 다른 글

[Java] static 변수 / 메서드  (0) 2026.07.14
[Java] 리스트(List) / 맵(Map)  (0) 2026.07.14
[Java] 클래스  (0) 2026.07.13
[Java] 배열의 복사  (0) 2026.07.13
[Java] 반복문 for, while  (0) 2026.07.10

댓글