정적 멤버의 특성
정적 메소드는 클래스의 인스턴스가 아닌 클래스 자체에 속하므로, 특정 객체와 연관되지 않는다. 따라서 정적 메소드는 클래스 이름을 통해 직접 호출할 수 있으며, 객체를 생성하지 않고도 접근할 수 있다.
public class MathUtil {
public static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int sum = MathUtil.add(5, 10); // 정적 메소드 호출
System.out.println("5 + 10 = " + sum);
}
}
이 예시에서 MathUtil 클래스의 add 메소드는 두 개의 정수를 더한 값을 반환하며, main 메소드에서 객체를 생성하지 않고 "MathUtil.add(5, 10)"을 통해 호출된다. 다음은 정적 메소드를 잘못 호출한 예시이다.
public class MathUtil {
public static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
MathUtil obj = new MathUtil(); // 객체 생성
int sum = obj.add(5, 10); // 잘못된 정적 메소드 호출
System.out.println("5 + 10 = " + sum);
}
}
위 코드에서 add 메소드를 객체 obj를 통해 호출하는 것은 잘못된 방법이다. 정적 메소드는 클래스 이름으로 직접 호출해야 한다.
this 키워드의 의미
this는 인스턴스 메소드 내에서 현재 객체의 참조를 나타낸다. 이는 특정 객체에 대한 정보가 필요할 때 사용된다. 그러나 정적 메소드는 객체가 생성되지 않기 때문에 this를 사용할 수 없다. 즉, 정적 메소드는 클래스에 고정되어 있기 때문에 특정 인스턴스와 연결되어 있지 않다.
public class Dog {
private String name; // 강아지 이름
private int age; // 강아지 나이
// 생성자
public Dog(String name, int age) {
this.name = name; // this를 사용하여 인스턴스 변수 초기화
this.age = age; // this를 사용하여 인스턴스 변수 초기화
}
// 인스턴스 메소드: 강아지의 정보 출력
public void displayInfo() {
System.out.println("강아지 이름: " + this.name);
System.out.println("강아지 나이: " + this.age + "살");
}
// 정적 메소드: 강아지 정보 출력
public static void displayStaticMessage() {
// this를 사용할 수 없음
System.out.println("이 메소드는 정적 메소드입니다. 인스턴스 변수에 접근할 수 없습니다.");
}
}
결론
정적 메소드 내에서는 인스턴스 변수를 직접 참조할 수 없기 때문에 this를 사용할 수 없다. 따라서 정적 메소드에서 this를 사용하려고 하면 컴파일 오류가 발생한다.
'Language > JAVA' 카테고리의 다른 글
[JAVA]method 종류 (0) | 2024.11.20 |
---|---|
[JAVA]메모리 구조 (0) | 2024.11.04 |
[JAVA]Runnable 인터페이스를 구현해서 스레드를 만드는 이유 (0) | 2024.09.28 |
[JAVA]예외(Exception) vs 에러(Error) (0) | 2024.09.21 |
[JAVA]currentThread() (0) | 2024.09.21 |