Static이 무엇인가?
정적(static)은 ‘고정된’ 이란 의미를 가지고 있습니다.
static이라는 키워드는 필드와 메서드에 붙일 수 있는데,
다른 말로 정적 필드와 정적 메서드 라고도 하며 이 둘을 합쳐 정적 멤버라고 합니다.
(클래스 멤버라고도 한다.)
tips
static 그니까 똑같은 값인데 궂이 여러개 만들 일 없는거
// 정적 메서드(static) : 모든 객체가 공유하며 객체 생성없이 접근 가능
// static 은 this 가 있을 수 없음.
// static 데이터는 객체 생성 없이 접근 가능, new 안해도 사용가능
static 필드
public class MyClass {
public int a; //인스턴스 필드
public static int b; //정적 필드
}
클래스에 일반 필드 하나와 static필드를 하나씩 작성해 보았다.
main 메서드에서 MyClass 객체를 생성한 후에 값을 변경해 본다.
Count c1 = new Count();
c1.a += 5;
c1.b += 5;
System.out.println("인스턴스 변수 c1.a: " + c1.a); //5
System.out.println("정적 변수 c1.b: " + c1.b); //5
아직까지 큰 차이는 없다. 하나 더 생성해 본다.
Count c2 = new Count();
c2.a += 7;
c2.b += 7;
System.out.println("인스턴스 변수 c2.a: " + c2.a); //7
System.out.println("정적 변수 c2.b: " + c2.b); //12
변화가 생겼다. 인스턴스 변수인 a는 7인 반면 static변수 b는 7이 아닌 12를 가지고 있다.
한 개만 더 해보자
Count c3 = new Count();
c3.a += 8;
c3.b += 8;
System.out.println("인스턴스 변수 c3.a: " + c3.a); //8
System.out.println("정적 변수 c3.b: " + c3.b); //20
System.out.println("정적 변수 c1.b: " + c1.b); //20
System.out.println("정적 변수 c1.b: " + c2.b); //20
객체의 필드는 각 객체마다 고유하게 가지고 있는 값이다.
그렇기 때문에 객체를 생성할 때마다 그 객체들 내에 a라는 필드가 각각 존재하는
것이기 때문에 값이 다 다른 것을 확인할 수 있다.
하지만 static이 붙은 정적 변수는 값이 계속 누적되는 것을 확인할 수 있다.
왜냐하면, static이 붙은 변수는 객체마다 생성되는 것이 아닌, 따로 생성되어서
모든 객체가 공유하는 전역 변수로서 동작하기 때문이다.
'Java' 카테고리의 다른 글
Java* 다형성 (Polymorphism) (0) | 2024.04.22 |
---|---|
Java* 사용 제한자 final, 열거형 Enum (0) | 2024.04.22 |
Java* 객체지향 캡슐화(encapsulation) (0) | 2024.04.22 |
Java* 객체지향 접근 제한자 (Access Modifier) (0) | 2024.04.22 |
Java* 객체지향 상속 (Inheritance) (0) | 2024.04.22 |