Java/Java Study

[객체지향] Static 메서드는 언제 쓸까?

모모토 2021. 6. 2. 14:59
반응형

● 인스턴스 메서드

  1. 인스턴스 생성 후, '참조 변수. 메서드명()'으로 호출
  2. 인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)와 관련된 작업을 하는 메서드
  3. 메서드 내에서 인스턴스 변수 사용 가능


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

  1. 객체 생성 없이 '클래스 이름. 메서드 이름()'으로 호출
  2. 인스턴스 멤버와 관련 없는 작업을 하는 메서드
  3. 메서드 내에서 인스턴스 변수 사용불가


인스턴스 메서드는 객체를 생성하여 참조 변수를 이용하여 접근해야 한다.

반면에 클래스 메서드는 별도의 객체 생성 없이 호출이 가능한 메서드이다

자바를 좀 공부한 사람들은 아마도 위의 내용을 다 잘 알고 있을 수도 있다.

그렇다면 혹시 Static을 언제 붙여야 하는지 당신은 아는가?

먼저 인스턴스 메서드는 왜 객체를 선언해야 하는지 알아보자,

인스턴스 메서드는 인스턴스 변수(iv)를 사용해야 하는 메서드이다.

public class MyMath { long a,b; long add(){ return a + b; } public static void main(String[] args) { MyMath myMath = new MyMath(); // 객체생성 System.out.println(myMath.add()); //인스턴스 변수에 값을 넣어주지않으면 결과:0 myMath.a = 100L; //인스턴스 변수 a,b myMath.b = 100L; System.out.println(myMath.add()); } }


실행결과

0 200


객체라는 것은 인스턴스 변수들의 집합이다. 그리고 인스턴스 메서드는 인스턴스 변수가 필요하다.

위의 코드에서 인스턴스 메서드에 인스턴스 변수 a, b를 가지고 작업을 하기 때문에

객체를 선언해야 메서드를 호출을 할 수가 있는 것이다.

인스턴스 메서드라는 '도구'는 인스턴스 변수라는 재료가 있어야 무언갈 할 수 있는 것이다.

반면에 static 메서드는 인스턴스 변수 대신에 매개변수를 받기 때문에 별도의 객체 선언이 없이도 메서드를 사용 가능한 것


따라서 인스턴스 변수 대신에 우리가 값을 직접 넣어서 쓴다. 그리고 우리는 static 메서드의 a, b를 지역변수라고 부른다.

또한 클래스 안에 static 메서드를 만들 때 static메서드 안에 인스턴스 변수는 쓸 수없다.

인스턴스 변수는 객체가 생성되어야 사용할 수 있는데 static메서드는 객체 생성 없이도 호출이 가능해야 하기 때문이다.

static이 붙지 않는 인스턴스 메서드는 객체가 생성되어야만 쓸 수 있다는 보장이 확립되기 때문에 이 경우는 가능하다.


따라서 호출시마다 개별로 값을 지정해줘야 하는 변수나 메서드는 인스턴스 멤버로 해야 하고,

항상 일관된 공통적인 값을 갖는 변수나, 호출 시에 인스턴스 변수를 쓸 일이 없는,

인스턴스 변수가 필요 없는 메서드를 만들려면 static을 붙여줘야 한다.

메서드에 static을 붙여주는 건 단순히 공통적으로 쓰이기 위해서 붙여주는 것이 아니라는 것을 잘 알아두고,

인스턴스 변수를 쓰는가 지역변수를 쓰는가를 잘 파악해서 static의 필요 유무를 확실히 해주자