본문 바로가기

JAVA

JAVA #21 static 메서드와 인스턴스 메서드

1. staic 메서드 (클래스 메서드), 인스터스 메서드 -> iv 사용여부의 차이

 

인스턴스 메서드

 - 인스턴스 생성 후, '참조변수. 메서드이름()' 으로 호출

 - 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드

 - 메서드 내에서 인스턴스 변수(iv) 사용가능

 

 

static 메서드( 클래스 메서드)

 - 객체생성없이 '클래스이름. 메서드이름()' 으로 호출 ex) Math.random(), Math.round()

 - 인스턴스 멤버(iv,im)와 관련없는 작업을 하는 메서드

 - 메서드 내에서 인스턴스 변수(iv) 사용불가

 

 

class MyMath2 {
	long a,b; // iv 인스턴스 변수
    
    long add() { // 인스턴스메서드
    	return a + b;
    }
    
    static long add(long a, long b)// lv 지역변수 { // 클래스메서드(static 메서드)
    	return a + b;
     }
   }
class MathTest2 { 
	public static void main(String args[]) { 
    System.out.println(MyMath2.add(200L,100L)); // 클래스메서드 호출 -> 객체생성없이 호출가능
    MyMath2 mm = new MyMath2(); // 인스턴스 생성.
    mm.a = 200L;
    mm.b = 100L;
    System.out.println(mm.add()); // 인스턴스메서드 호출

 

 

메소드를 만든 후에 static을 붙일지 말지 생각해야 함 

-> iv를 사용하면 인스턴스 메서드, iv를 사용하지 않으면 static 메서드!

 

static을 언제 붙여야 할까?

- 속성(멤버 변수)중에서 공통 속성에 static을 붙인다.

 

- 인스턴스 멤버(iv,im)을 사용하지 않는 메서드에 static을 붙인다.

 

 

 

 

static 메서드는 인스턴스 변수(iv)를 사용할 수 없다.

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);	    // 에러!!!! 인스턴스 변수를 사용할 수 없다.
        Syetem.out.println(cv);		// 클래스 변수는 사용할 수 있다.
        }
      } // end of class

 

Q. static 메서드는 static 메서드 호출가능?

A. 네

 

Q. static 메서드는 인스턴스 변수 사용가능?

A. 아니요

 

Q. static 메서드는 인스턴스 메서드 호출가능

A. 아니요

 

Q. 왜? static 메서드는 인스턴스 멤버를 쓸 수 없나요?

A. static 메서드 호출시 객체(iv묶음)가 없을 수도 있어서