Search

클래스(static) & 인스턴스 메소드

클래스 메소드(static 메소드와) 인스턴스 메소드

클래스 메소드

메소드 이름 앞에 static이 붙은
인스턴스와 관계 없는(인스턴스 변수나 메소드를 사용하지 않는) 메소드
클래스이름.메소드이름 방식으로 호출 가능

인스턴스 메소드

메소드 이름 앞에 static이 붙지 않은
인스턴스 변수와 관련된 작업, 즉 메소드의 작업을 수행하는 데 인스턴스 변수를 필요로 하는 메소드
인스턴스(객체)를 생성해야 호출 가능
인스턴스 변수는 인스턴스(객체)를 생성해야 만들어지므로

1. 클래스 설계 시, 멤버 변수 중 모든 인스턴스에 공통으로 사용하는 것엔 static

2. 클래스 변수(static 변수)는 인스턴스를 생성하지 않아도 사용 가능

3. 클래스 메소드(static 메소드)는 인스턴스 변수 사용 불가 (인스턴스 메소드에서 클래스 변수는 사용 가능)

4. 메소드 내에서 인스턴스 변수를 사용하지 않는다면 static을 붙이는 걸 권장

MyMathTest2.java

클래스 멤버와 인스턴스 멤버 간의 참조와 호출

같은 클래스의 멤버 참조/호출별도의 인스턴스 생성 없이 가능
다른 클래스의 멤버 참조/호출인스턴스 생성 필요
class TestClass { void instanceMethod() {} // 인스턴스 메소드 static void staticMethod() {} // static 메소드 void instanceMethod2() { // 인스턴스 메소드 instanceMethod(); // 다른 인스턴스 메소드 호출 staticMethod(); // static 메소드 호출 } static void staticMethod2() { // static 메소드 instaceMethod(); // 에러. 인스턴스 메소드는 인스턴스를 생성하고 호출해야 함. staticMethod(); // static 메소드 호출 } } class TestClass2 { int iv; // 인스턴스 변수 static int cv; // 클래스 변수 void instanceMethod() { // 인스턴스 메소드 System.out.println(iv); // 인스턴스 변수 사용 가능 System.out.println(cv); // 클래스 변수 사용 가능 } static void staticMethod() { // static 메소드 System.out.println(iv); // 인스턴스 변수 사용 불가능 System.out.println(cv); // 클래스 변수 사용 가능 } }
Java
MemberCall.java
실제 같은 클래스 내에서 클래스 멤버가 인스턴스 멤버를 참조 또는 호출해야 하는 경우는 드뭄.
→ 인스턴스 메소드로 작성해야 할 메소드를 클래스 메소드로 한 것이 아닌지 생각해보자.

참고 자료