[Static 개념]
[Static 멤버생성]
[메모리영역]
Static[변수, 메서드]
**↓** 2. **(생성)**
Static & 4. Heap
Static : 변수, 메서드를 생성하여 Static영역에 할당되도록 or 참조할 수 있도록 하는 영역을 말함
Static : 클래스들이 할당, Garbage Collector의 관리 영역 밖에 존재함을 의미함, 모든 객체가 메모리를 공유함
Heap : 객체들이 할당, Grabage Collector의 관리하며, 메모리를 공유하지 않음
[Static 멤버 선언]
필드나 메서드를 생성 시 인스턴스로 생성할 것인지? **정적으로 생성할 것인지?**에 대한 판단 기준은 공용으로 사용하느냐 아니냐로 생각하면 됨
그냥 생성한다면 자동으로 인스턴스로 생성되며 정적으로 생성할려면 필드와 메서드 선언시 Static이라는 키워드를 추가적으로 붙여줘야함
[예제]
// static 멤버선언
// Type Field = initial value
// 타입 필드 = 초기값;
static String hello = "Hello";
// static 리턴 타입 메서드{}
public static void hello() {}
[Static 필드 사용]
[예제]
// static 필드
class Point {
// 클래스 필드
static int point = 0;
// 인스턴스 필드
int point2 = 0;
}
// PointTest Class
public class PointTest {
public static void main(String[] args) {
// 첫번째 Hello
Point point1 = new Point();
// 두번째 Hello
Point point2 = new Point();
// 클래스 필드 point를 1씩 증가시킴
point1.point++;
// 인스턴스 필드 point2를 1씩 증가시킴
point1.point2++;
// 두번째 point2의 클래스 필드 출력
System.out.println(point2.point); // 1
// 두번째 point2의 인스턴스 필드 출력
System.out.println(point2.point2); // 0
}
}
[예제설명]
[Static 메서드 사용]
[예제]
// static 메서드
class Print {
// 클래스 메서드
static void print() {
System.out.println("클래스 메서드");
}
// 인스턴스 메서드
void print2() {
System.out.println("인스턴스 메서드");
}
}
// PrintTest
public class PrintTest {
// Main Method
public static void main(String[] args) {
// 인스턴스를 생성하지 않아도 호출가능
Print.print(); // 클래스 메서드
// 인스턴스 생성
Print print = new Print();
// 인스턴스를 생성하여야만 호출이 가능함
print.print2(); // 인스턴스 메서드
}
}
[예제설명]