JAVA/객체지향 프로그래밍 (OOP) 기초
인스턴스 메서드 vs 클래스(static) 메서드
by DEVLIB
2025. 4. 13.
개념 요약
구분 |
인스턴스 메서드 |
클래스(static) 메서드 |
정의 방법 |
void method() |
static void method() |
호출 방법 |
객체명.메서드() |
클래스명.메서드() |
객체 필요 여부 |
필요함 (new) |
필요 없음 |
사용하는 변수 |
인스턴스 변수 사용 가능 |
인스턴스 변수 사용 불가 |
대표 예 |
s1.getName() |
Math.random(), Integer.parseInt() |
인스턴스 메서드 예제
public class Person {
String name;
public Person(String name) {
this.name = name;
}
// 인스턴스 메서드
public void sayHello() {
System.out.println("안녕하세요! 저는 " + name + "입니다.");
}
}
사용 방법:
Person p1 = new Person("홍길동");
p1.sayHello(); // 객체를 통해 호출
클래스(static) 메서드 예제
public class MathUtil {
// 클래스 메서드 (static)
public static int square(int x) {
return x * x;
}
}
사용 방법:
int result = MathUtil.square(5); // 객체 없이 호출
System.out.println(result); // 출력: 25
인스턴스 vs static 비교 실습
public class Example {
int value = 10;
void instanceMethod() {
System.out.println("인스턴스 값: " + value);
}
static void staticMethod() {
// System.out.println("값: " + value); // 에러: static에서는 인스턴스 변수 사용 불가
System.out.println("클래스 메서드입니다.");
}
}
Example ex = new Example();
ex.instanceMethod(); // OK
Example.staticMethod(); // OK (객체 없이 호출 가능)
static 메서드 주의사항
- 인스턴스 변수/메서드에 접근 불가
- 객체의 상태에 의존하지 않는 기능(계산, 변환 등)에 적합
예: Math.sqrt(), Integer.parseInt("123")
언제 어떤 걸 쓰나요?
상황
|
추천 방식 |
객체마다 다른 값이 필요한 경우 |
인스턴스 메서드 |
모든 객체가 공통적으로 사용하는 기능 |
static 메서드 |
계산기, 유틸리티 함수, 변환기 등 |
static 메서드 |
마무리 요약
항목 |
인스턴스 메서드 |
클래스(static) 메서드 |
호출 방식 |
객체명.메서드() |
클래스명.메서드() |
객체 생성 필요 |
필요 |
불필요 |
인스턴스 변수 사용 |
가능 |
불가능 |
연습 아이디어
- Calculator 클래스: add()는 static, showInfo()는 인스턴스 메서드로
- Student 클래스: printName()은 인스턴스, schoolName()은 static으로