Journey to CS/프로그래밍 언어

[Java] 메서드의 메모리 적재 원리와 클래스 선언 규칙

Cordilog 2026. 2. 27. 18:15

1. 메서드를 메모리에 올리는 두 가지 방법

자바에서 메서드는 성격에 따라 메모리에 적재(Load)되는 시점과 방식이 다르다. 

1️⃣라이브러리 클래스에서의 메서드

보통 기능을 제공하는 역할을 하는 클래스들이다.

  • 인스턴스 메서드 (Instance Method): new 연산자를 통해 객체를 생성하는 순간 메모리에 올라간다. 객체마다 고유한 상태(필드)를 가질 수 있으며, 반드시 객체 생성 후에만 사용할 수 있다.
  • 정적 메서드 (Static Method): 프로그램이 실행되자마자 메모리(Method Area)에 자동으로 올라간다. 객체 생성 없이 클래스명.메서드명()으로 즉시 호출할 수 있다.

2️⃣실행 클래스에서의 메서드

public static void main이 포함된, 프로그램의 시작점이 되는 클래스다.

  • 프로그램이 시작될 때 누군가 이 클래스를 객체로 만들어줄 수 없으므로, 내부 메서드들은 반드시 static으로 선언되어야 main에서 바로 사용할 수 있다. 객체를 생성할 방법이 없는 시점에서 호출되어야 하기 때문이다.

 

2. 소스 코드 예시

// 파일명: MainApp.java

class Calculator {
    int result; // 인스턴스 필드

    // 인스턴스 메서드 (객체 생성 후 사용 가능)
    void add(int a, int b) {
        this.result = a + b;
    }

    // 정적 메서드 (객체 생성 없이 사용 가능)
    static int multiply(int a, int b) {
        return a * b;
    }
}

public class MainApp {
    public static void main(String[] args) {
        // 1. 정적 메서드는 객체 생성 없이 바로 호출
        int res1 = Calculator.multiply(10, 20);

        // 2. 인스턴스 메서드는 반드시 'new'가 필요함
        Calculator myCalc = new Calculator();
        myCalc.add(10, 20);
    }
}

 

3. 메모리 적재 구조

위 코드가 실행될 때 JVM(자바 가상 머신)의 메모리 영역은 다음과 같은 상황이 된다. 

 

4. 클래스 선언과 파일 구성 규칙

한 파일에 여러 클래스를 작성할 때 반드시 지켜야 할 규칙이 있다.

이는 자바 컴파일러가 파일을 찾는 방식과 관련이 있다.

1️⃣파일명과 public 클래스의 관계

  • 단 하나의 public : 한 소스 파일(.java)에는 public 클래스가 단 하나만 존재할 수 있다.
  • 파일명과 클래스명 : public 클래스의 이름은 반드시 파일 이름과 동일해야 한다. 만약 public class MainApp이라면 파일명은 반드시 MainApp.java여야 한다.

2️⃣어떤 클래스를 public으로 선언할까?

  • 프로그램의 입구: 보통 main 메서드를 가지고 있어 프로그램의 시작점 역할을 하는 클래스를 public으로 지정한다.
  • 외부 공개용: 다른 패키지에서도 접근해야 하는 대표 클래스를 public으로 두고, 나머지 보조 클래스들은 접근 제한자 없이(default) 선언하여 같은 파일 내에 둔다.

3️⃣파일 분리

한 파일에 여러 클래스를 넣어도 컴파일하면 클래스 파일(.class)은 각각 생성되므로 실행에는 지장이 없다.

하지만 실무에서는 유지보수와 가독성을 위해 클래스당 파일 하나를 만드는 것이 관례다.

 

5. 요약

  • Static은 프로그램 시작 시점에, Instance는 new 시점에 메모리에 올라간다.
  • 실행 클래스(main 포함)의 메서드는 객체 생성 주체가 없으므로 static이어야 한다.
  • 한 파일에는 하나의 public 클래스만 허용되며, 그 이름이 파일명이 된다.