자바(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 인스턴스 메서드 차이
요약 하자면
클래스 메서드는 객체 없이 사용하는 공통 기능, 인스턴스 메서드는 객체의 상태를 활용하는 고유한 동작을 정의할 때 사용됩니다.
읽어주셔서 감사합니다 😊
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 15. 오버로딩 (0) | 2025.04.07 |
---|---|
[Java] 14. 재귀호출 (0) | 2025.04.07 |
[Java] 12. 메서드란? (0) | 2025.04.02 |
[Java] 11. 클래스 변수와 인스턴스 변수 (0) | 2025.04.02 |
[Java] 10. 캡슐화란? (0) | 2025.03.27 |