'
본문 바로가기
study/Programming

[JAVA 기초] static 메소드 vs 인스턴스 메소드

by meowdule 2025. 4. 21.

 

1. static 메소드란?


📌 static

정적인 메소드를 의미하며, 객체를 생성하지 않고도 호출할 수 있는 메소드입니다.

💡 클래스에 고정(static)되어 있는 메소드 → 공용 메소드라고도 함


📌 특징

  • 객체 생성 없이 클래스명으로 바로 호출 가능
  • 클래스가 메모리에 올라갈 때 함께 올라감 (한 번만 로딩)
  • 인스턴스 변수나 메소드에는 직접 접근할 수 없음
    (단, 객체를 생성하면 접근 가능은 하지만 권장하지 않음)

 

 

 

 

 

2. 인스턴스 메소드란?


📌 인스턴스 메소드

static 키워드가 없는 일반적인 메소드입니다.
객체(인스턴스)를 생성한 뒤 참조변수.메소드이름() 형식으로 호출합니다.


📌 특징

  • 메모리에는 객체가 생성될 때 함께 올라감
  • 객체마다 별도로 존재하므로 객체 상태에 따라 동작
  • 클래스명으로 직접 호출할 수 없음

 

 

 

 

 

 

3. 호출 방식 비교

 

구분 호출 방식 설명
static 메소드 클래스명.메소드() 객체 없이 호출 가능
인스턴스 메소드 참조변수.메소드() 객체 생성 후 호출 가능
 
public class Calculator {

    // static 메소드
    public static int add(int a, int b) {
        return a + b;
    }

    // 인스턴스 메소드
    public int multiply(int a, int b) {
        return a * b;
    }
}

 


📌 호출 예시

public class Application {

    public static void main(String[] args) {

        // static 메소드 호출 (클래스명 사용)
        int result1 = Calculator.add(10, 20);
        System.out.println("static 메소드 결과: " + result1);

        // 인스턴스 메소드 호출 (객체 생성 후 참조변수 사용)
        Calculator calc = new Calculator();
        int result2 = calc.multiply(5, 4);
        System.out.println("인스턴스 메소드 결과: " + result2);
    }
}

 



📌 실습 예제: sumTwoNumbers() 호출

public class Application {

    public static void main(String[] args) {

        // 1. static 메소드 호출 (클래스명 사용)
        int sum1 = sumTwoNumbers(10, 20);
        System.out.println("1) 클래스명 생략하고 호출: " + sum1);

        // 2. static 메소드 호출 (클래스명 명시)
        int sum2 = Application.sumTwoNumbers(30, 40);
        System.out.println("2) 클래스명 명시하고 호출: " + sum2);
    }

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

 

1) 클래스명 생략하고 호출: 30
2) 클래스명 명시하고 호출: 70
✅ 같은 클래스 내부에서는 클래스명을 생략해도 호출 가능하지만,
다른 클래스에 정의된 static 메소드는 반드시 클래스명.메소드()형식으로 호출해야 합니다.

 

 

 

 

 

 

 

4. 정리

 

항목 static 메소드 인스턴스 메소드
메모리 시점 클래스 로딩 시 객체 생성 시
호출 방식 클래스명.메소드() 참조변수.메소드()
객체 생성 필요 여부 ❌ 불필요 ✅ 필요
사용 목적 공용 기능 (예: 수학 계산) 객체에 따라 다르게 동작하는 기능

 

 

 

 

 

마무리
다음 게시글에서는 클래스 분리와 메소드 호출에 대해 학습하겠습니다.