static method

NOAH·2021년 1월 20일
0
post-thumbnail

Static 메서드와 인스턴스메서드

메서드 앞에 static이 붙어 있으면 클래스 메서드, 아니면 인스턴스 메서드입니다.

클래스 메서드도 클래스 변수처럼, 객체 생성 없이

클래스이름.메서드리이름(매개변수)

같은 식으로 호출이 가능합니다.

Static method와 instace method의 특징을 알아볼까요.

  • 클래스 변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있습
    니다.

static이 붙은 변수는 클래스가 메모리에 올라갈 때 동시에 생성되기 때문입니다.

*클래스 메서드(static)는 인스턴스 메서드/변수를 사용할 수 없다.

Class TestClass {
	 void instaceMethod(){} // instance method
     	static void staticMethod () {} // Static Method
        
        void instceMethod2(){
        
        instanceMethod(); // Able to call other instace method
        staticMethod();// Able to call static mothod
        }
        
       static void staticMethod2(){
       instanceMethod(); // Error!!! 
       //Class method not possible to call insstace method 
       staticMethod(); // able to other class method
}

인스턴스 변수가 존재하지 않을 수도 있기 때문입니다.

그래서 클래스 메서드에서 인스턴스변수/메서드의 사용을 금지합니다. 반면에 인스턴스변수나 인스턴스메서드에서는 static이 붙은 멤버들을 사용하는 것이 언제나 가능합니다.

static을 언제 붙여야 할까?

어떤 경우에 클래스 메서드를 어떤 경우에 인스턴스 메서드를 사용해야 할까요?

  • 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에는 static을 붙인다.

생성된 각 인스턴스는 독립적이지만, 모든 인스턴스가 공통으로 가져야할 값은 static을 붙여 클래스 변수로 정의해야 합니다.

  • 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.

객체를 생성없이 사용할 수 있는 것이 static method의 큰 특징입니다.
그러므로 iv(인스턴스변수)나 im(인스턴스 메서드)를 사용한다는 것 자체가 이미 객체가 생성되었다는 것을 의미합니다.
반대로 iv와 im이 쓰이지 않았다면 static을 붙여보는 것을 고려합니다. 이는 이전의 어떤 객체의 생성 유무에 관계없이 호출가능하며, 메서드의 호출시간도 짧아지므로 성능이 향상되기 때문입니다.

참조 : 자바의 정석 static

0개의 댓글