package static2;
public class DecoUtil1 {
public String deco(String str) {
String result = "*" + str + "*";
return result;
}
}
deco()
는 문자열을 꾸미는 기능을 제공한다. 문자열이 들어오면 앞 뒤에 *
을 붙여서 반환한다.
package static2;
public class DecoMain1 {
public static void main(String[] args) {
String s = "hello java";
DecoUtil1 utils = new DecoUtil1();
String deco = utils.deco(s);
System.out.println("before: " + s);
System.out.println("after: " + deco);
}
}
deco()
메서드를 호출하기 위해서는 DecoUtil1
의 인스턴스를 먼저 생성해야 한다.
그런데 deco()
라는 기능은 멤버 변수도 없고, 단순히 기능만 제공할 뿐이다. 인스턴스가 필요한 이유는 멤버 변수(인스턴스 변수)등을 사용하는 목적이 큰데, 이 메서드는 사용하는 인스턴스 변수도 없고, 단순히 기능만 제공한다.
static
이 붙지 않은 메서드는 인스턴스를 생성해야 호출할 수 있다. 이것을 인스턴스 메서드라 한다.
package static2;
public class DecoUtil2 {
public static String deco(String str) {
String result = "*" + str + "*";
return result;
}
}
DecoUtil2
는 메서드 앞에 static
이 붙어있다. 이렇게 하면 정적 메서드를 만들 수 있다.
그리고 이 정적 메서드는 정적 변수처럼 인스턴스 생성 없이 클래스 명을 통해서 바로 호출할 수 있다.
package static2;
public class DecoMain2 {
public static void main(String[] args) {
String s = "hello java";
String deco = DecoUtil2.deco(s);
System.out.println("before: " + s);
System.out.println("after: " + deco);
}
}
Decoutil2.deco(s)
코드를 보자.
static
이 붙은 정적 메서드는 객체 생성 클래스명 + .
(dot) + 메서드 명으로 바로 호출할 수 있다. 정적 메서드 덕분에 불필요한 객체 생성 없이 편리하게 메서드를 사용했다.
메서드 앞에도 static
을 붙일 수 있다. 이것을 정적 메서드 또는 클래스 메서드라 한다. 정적 메서드라는 용어는 static
이 정적이라는 뜻이기 때문이고, 클래스 메서드라는 용어는 인스턴스 생성 없이 마치 클래스에 있는 메서드를 바로 호출하는 것처럼 느껴지기 때문이다.