프로그래밍 언어/Java

[Java] 13. 클래스 메서드와 인스턴스 메서드

WooZzing 2025. 4. 3. 16:57

 

 

 

 

자바(Java)에서 메서드를 만들다 보면 static 키워드를 붙이는 메서드와 그렇지 않은 메서드가 존재합니다. 어떤 메서드는 객체 없이 클래스명으로 호출하고, 어떤 메서드는 꼭 객체를 만들어야 사용할 수 있습니다. 그 차이가 바로 클래스 메서드(static 메서드)인스턴스 메서드의 차이입니다.

 

 

클래스 메서드

클래스 메서드는 static 키워드가 붙은 메서드로, 객체를 생성하지 않고도 호출할 수 있는 메서드입니다. 클래스 메서드는 아래와 같은 특징을 가지고 있습니다.

 

  • 클래스가 메모리에 올라갈 때 함께 생성됨
  • 클래스 이름을 통해 직접 호출할 수 있음
  • 인스턴스 변수나 인스턴스 메서드에는 접근 불가능
  • 주로 공통 기능, 유틸리티 메서드 등에 사용

 

 

사용 예시

 

 

실습 예제

MathUtil 클래스

public class MathUtil {
    // 클래스 메서드 (객체 없이 호출 가능)
    public static int square(int num) {
        return num * num;
    }

    public static double getPi() {
        return 3.14159;
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        int result = MathUtil.square(5);       // 25
        double pi = MathUtil.getPi();          // 3.14159

        System.out.println("5의 제곱: " + result);
        System.out.println("파이 값: " + pi);
    }
}

 

- 출력 결과 -

5의 제곱: 25
파이 값: 3.14159

여기서 MathUtil은 객체를 생성하지 않고도 square()와 getPi()를 호출할 수 있습니

 

주의 사항

인스턴스 변수나 인스턴스 메서드 사용 불가 ❌

public class Example {
    int number = 10;

    public static void printNumber() {
        // System.out.println(number); // X 컴파일 오류
    }
}

클래스 메서드는 객체 없이 실행되기 때문에, 객체에 속한 정보인 number를 알 수 없습니다.

 

오직 클래스 변수(static 변수)나 다른 클래스 메서드만 사용가능 ⭕

public class Counter {
    static int count = 0;

    public static void increment() {
        count++;
    }

    public static int getCount() {
        return count;
    }
}

 


인스턴스 메서드

인스턴스 메서드는 static 키워드가 없는 메서드로, 객체를 생성한 후에 호출할 수 있는 메서드입니다. 인스턴스 메서드는 아래와 같은 특징을 가지고 있습니다.

 

  • 객체마다 별도로 동작함
  • 객체가 가진 인스턴스 변수나 상태를 사용할 수 있음
  • 주로 객체의 고유 동작을 정의할 때 사용
  • 객체 생성 후 접근 가능

 

 

사용 예시

 

 

실습 예제

Student 클래스

public class Student {
    String name;
    int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    // 인스턴스 메서드
    public void introduce() {
        System.out.println("안녕하세요, 저는 " + name + "이고 점수는 " + score + "점입니다.");
    }

    public boolean isPassed() {
        return score >= 60;
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        Student s1 = new Student("지민", 85);
        Student s2 = new Student("영수", 55);

        s1.introduce();  // "안녕하세요, 저는 지민이고 점수는 85점입니다."
        s2.introduce();  // "안녕하세요, 저는 영수이고 점수는 55점입니다."

        System.out.println(s1.isPassed());
        System.out.println(s2.isPassed());
    }
}

 

- 출력 결과 -

안녕하세요, 저는 지민이고 점수는 85점입니다.
안녕하세요, 저는 영수이고 점수는 55점입니다.
true
false

 

여기서 introduce()와 isPassed()는 모두 인스턴스 메서드이며, 각 객체가 가진 name과 score 값을 기준으로 동작합니다.

 

 

주의 사항

인스턴스 메서드는 객체가 있어야 호출 가능 ❗

Student s = new Student("민수", 90);
s.introduce();  // O 가능

Student.introduce(); // X 컴파일 오류: 객체 없이 호출 불가

 

 

 

 


클래스 메서드 vs 인스턴스 메서드 차이

 

요약 하자면

클래스 메서드는 객체 없이 사용하는 공통 기능, 인스턴스 메서드는 객체의 상태를 활용하는 고유한 동작을 정의할 때 사용됩니다.

 

 

 

 

읽어주셔서 감사합니다 😊

 


소스 코드 바로가기