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 클래스만 허용되며, 그 이름이 파일명이 된다.
'Journey to CS > 프로그래밍 언어' 카테고리의 다른 글
| [Java] static과 인스턴스 - JVM이 main 메서드를 찾아가는 방법 (0) | 2026.02.26 |
|---|---|
| [Java] 래퍼 클래스(Wrapper Class)와 오토 박싱 (0) | 2026.01.22 |
| [Java] 기본형(Primitive)과 참조형(Reference)의 메모리 구조 차이 (0) | 2026.01.22 |
| [파이썬] OOP - 캡슐화 개념과 데이터 은닉, getter/setter 이해하기 (0) | 2025.04.10 |
| [파이썬] os 모듈, 언제 어떻게 쓰면 좋을까? (0) | 2025.03.21 |