: '고정된'이란 의미를 가지고 있으며 정적변수와 정적 메소드를 만들 수 있다.
: static로 정적 변수와 정적 메소드를 만들 수 있다.
: 자바에서는 새로 생성된 클래스에 직접적으로 static을 붙일 수는 없다.
: 하지만 클래스 안에 있는 내부 클래스에서는 static를 붙일 수 있다.
인스턴스를 만들 수 없다.
: 보통 클래스를 만들고 new를 해서 객체를 만드는 것을 인스턴스라고 하는데 이 인스턴스를 할 수 없다.
: 객체를 만들 수 없기에 클래스가 가지고 있는 속성으로 가지고 올 수 있다.
모든 맴버는(매서드 등) static을 가지고 있어야한다.
: static을 가지고 있는 영역에서는 모든 매서드와 같은 요소들에게 static을 붙여야 한다.
non-static에서는 static을 사용할 수 없다.
: static은 static이 있는 곳에서 사용할 수 있다.
: non-static에서 사용하고 싶다면 인스턴스를 해서 객체를 만들어 가져와야 한다.
: 통일한 정보를 가지고 있는 클래스에 사용하면 좋다
: 보통 문자열처리, 수학적계산 등 유틸리티와 같은 클래스에 유용하다.
: 메서드는 일반적으로 객체화 한 후에 사용하지만 static을 붙이면 class에서 바로 사용함
: new 없이 바로 사용가능하므로 편리하다.
public class Static{
public static void main(String[] arge){
//public static void main(String[] args)> 정보전달 매개변수
// 클래스와 객체를 따로 만드는 이유는
// 같은 구조를 가지지만 서로 다른 정보를 가지게 하기 위해서
// 클래스의 복사본으로 객체를 만들어서 서로 다른 정보를 저장하기 위함이다.
// static이 붙어있지 않은 매서드는
// 객체를 생성하여 사용한다.
Person p1 = new Person(20,"홍길동");
Person p2 = new Person(30,"이순신");
p1.introduce();
p2.introduce();
p1.age++;
p1.introduce();
// 두 객체를 아우르는 공통 특징
// 인류 평균 나이가 80세 일때 두객체가 가지고 있는 평균나이
// 변수에 각각 값을 지정해주어야하며
// 평균나이가 수정이 되어야 할때 각각 지정한 값을 변경해주어야 한다.
// 이렇게 각각 지정해서 하나하나 수정하는 것은 매우 번거롭다.
p1.avgAge=80;
p2.avgAge=80;
// 모든 객체가 공유하는 정보는 static으로 변경하여 사용한다.
// static을 붙이면 class를 불러 바로 사용한다.
Person.printAvgAge();
}
}
// main 매서드와 비슷해짐
public class Person(
int age;
String name;
static int avgAge = 80; // 인류 평균 나이
// 생성자는 객체 만들 때 사용하기 때문에 객체를 만들지 않아도 사용가능한
// static 변수는 static 초기화를 따로 해준다.
static{
avgAge = 80;
}
public Person (int age, String name){
this.name = name;
this.age = age;
}
public void introduce(){
System.out.printf("안녕하세요 %d살 %s입니다.\n",age,name);
}
public static void printAvgAge(){
System.out.printf("인류 평균 나이는 %d살입니다..\n",avgAge);
}
}
- non-static에서는 static을 사용할 수 없다.
- 객체가 개성적으로 사용하는 메서드와 변수에는 static을 사용할 수 없다.
- 정말 공통적인 부분에만 써야한다.
- 남발하면 문제가 생기니 생각을 깊게 하고 사용할 것