코드 작성
package ex_static; public class Ex1 { public static void main(String[] args) { /* * 정적(static) 멤버 변수 = 클래스 멤버 변수 * * < 정적(클래스) 멤버 정의 기본 문법 > * static 데이터타입 변수명[ = 초기값]; * * < 정적(클래스) 멤버 사용 문법 > * 클래스명.변수명; * */ // StaticEx 클래스의 클래스 변수 a는 클래스가 메모리에 로딩될 때 함께 로딩되므로 // 인스턴스 생성 전에 메모리에 로딩되며, 인스턴스 생성 없이도 클래스명만으로 접근 가능한 멤버! System.out.println("StaticEx.a = " + StaticEx.a); // System.out.println("StaticEx.a = " + StaticEx.b); // 오류 발생! // => 인스턴스 멤버변수 b는 반드시 인스턴스를 통해서만 접근 가능! // StaticEx 클래스의 인스턴스 생성 StaticEx se = new StaticEx(); // => 인스턴스 생성 시 Heap 영역에 인스턴스 멤버도 함께 로딩 System.out.println("b = " + se.b); // 반드시 인스턴스를 통해 접근 System.out.println("se.a = " + se.a); // => 클래스 멤버변수도 일반 인스턴스 멤버변수처럼 접근 할 수 있으나 // 가급적 static 접근 방식(클래스명.변수명)으로 접근하도록 하자! // StaticEx 클래스의 변수 a의 값을 100으로 변경, b의 값을 200으로 변경 후 출력 se.a = 100; // StaticEx.a = 100; System.out.println("StaticEx.a = " + StaticEx.a); se.b = 200; System.out.println("변경 후 se.a = " + se.a); System.out.println("변경 후 se.b = " + se.b); // StaticEx 클래스의 새로운 인스턴스(se2) 생성 StaticEx se2 = new StaticEx(); System.out.println("se2.a = " + se2.a); // 변경된 100이 출력 System.out.println("se2.b = " + se2.b); // 새 인스턴스 값 20 출력 // => 인스턴스를 새로 생성하더라도 정적 멤버변수는 // 하나의 메모리 공간을 모든 인스턴스에서 공유하므로 // 하나의 인스턴스에서 값을 변경하면 모든 인스턴스가 변경된 값을 공유 // 대표적인 static 멤버변수의 예 // 수학관련 기능을 제공하는 Math 클래스의 멤버변수는 모두 static double pi = 3.141592; System.out.println("파이 값 : " + pi); // Math 클래스 상수 PI가 제공되며 static 멤버변수로 제공 // => 별도의 인스턴스 생성없이 클래스명만으로 접근 가능 System.out.println("파이 값: " + Math.PI); // 정수를 다루는 Integer 클래스의 멤버변수 static System.out.println("INT형 표현범위 최소값 : " + Integer.MIN_VALUE); System.out.println("INT형 표현범위 최대값 : " + Integer.MAX_VALUE); } } class StaticEx { static int a = 10; // 클래스(정적) 멤버 변수 선언 int b = 20; // 인스턴스 멤버 변수 선언 }
정적(Static)멤버 변수 선언 방법 및 예시
출력 결과
StaticEx.a = 10
b = 20
se.a = 10
StaticEx.a = 100
변경 후 se.a = 100
변경 후 se.b = 200
se2.a = 100
se2.b = 20
파이 값 : 3.141592
파이 값: 3.141592653589793
INT형 표현범위 최소값 : -2147483648
INT형 표현범위 최대값 : 2147483647
나의 소감
정적 멤버 변수는 인스턴스 생성 필요 없이 클래스명만으로 접근할 수 있다
그러면 왜 이런 기능이 있을까?
예상컨데 단순히 편의만을 위해서 만든건 아닌것 같고 Math 같은 모두가 공통으로 많이 쓸만한걸
모아놓은 모음집??? 같은게 아닐까... ㅎㅎ
'JAVA' 카테고리의 다른 글
static, main, instance 생성 시점 차이 | 21/12/29 (0) | 2022.01.11 |
---|---|
정적(Static) 메서드 | 21/12/29 (0) | 2022.01.11 |
추상클래스 활용2 | 21/12/27 (0) | 2022.01.11 |
추상클래스(abstract) 활용 | 21/12/27 (0) | 2022.01.11 |
추상메서드(abstract) | 21/12/27 (0) | 2022.01.10 |