● 인스턴스 메서드
- 인스턴스 생성 후, '참조 변수. 메서드명()'으로 호출
- 인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수 사용 가능
● static 메서드 (클래스 메서드)
- 객체 생성 없이 '클래스 이름. 메서드 이름()'으로 호출
- 인스턴스 멤버와 관련 없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수 사용불가
인스턴스 메서드는 객체를 생성하여 참조 변수를 이용하여 접근해야 한다.
반면에 클래스 메서드는 별도의 객체 생성 없이 호출이 가능한 메서드이다
자바를 좀 공부한 사람들은 아마도 위의 내용을 다 잘 알고 있을 수도 있다.
그렇다면 혹시 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의 필요 유무를 확실히 해주자
'Java > Java Study' 카테고리의 다른 글
[Collections Framework] Arrays.sort( ); - (Comparable & Comparator) (0) | 2021.06.03 |
---|---|
[Collections Framework] Arrays (0) | 2021.06.03 |
[Collections Framework] LinkedList (vs Array) (0) | 2021.05.31 |
[Collections Framework] Iterator 와 메서드 iterator (0) | 2021.05.27 |
[Collections Framework] ArrayList (0) | 2021.05.27 |