-
[JAVA] static 변수Languages/Java 2021. 2. 18. 19:10반응형
static 변수
여러개의 인스턴스가 같은 메모리 값을 공유하기 위해 사용
인스턴스는 각각의 메모리를 갖게 된다
static 변수는 인스턴스가 생성될 때 마다 다른 메모리를 가지는 것이 아니라
프로그램이 메모리에 적재(load) 될때 데이터 영역의 메모리에 생성된다
따라서 인스턴스의 생성과 관계없이 클래스 이름으로 직접 참조한다
Student.serialNum = 100;//serailNum이 static변수,클래스변수라고도 한다
멤버변수는 다른 말로 인스턴스 변수라고 한다static변수의 예
여러 인스턴스가 하나의 메모리값을 공유할때 필요
학생이 생성될때마다 학번이 증가해야하는 경우
기준이 되는 값은 static변수로 생성하여 유지한다
ex)각 학생이 생성될때 마다 static변수 값을 복사해 와서 하나 증가
시킨 값을 생성던 인스턴스 학번 변수에 저장해 준다static 변수 vs 인스턴스 변수
serial number 를 static으로 선언하면 모든
student instance에 대해 하나의 변수로 유지되고
이러한 변수를 class변수라 한다static 메서드
클래스 메서드 라고도 한다
메서드의 static키워드를 사용하여 구현
주로 static변수를 위한 기능 제공
static메서드 에서 인스턴스 변수를 사용할 수 없다
static메서드도 인스턴스의 생성과 관계 없이 클래스 이르므로 직접 메서드를 호출
Student.getSerialNum(); //getSerialNum()이 static메서드
인스턴스의 변수의 경우 꼭 인스턴스가 먼저 생성되어야 하므로 static메서드에서는
생성이 불확실한 인스턴스 변수를 사용할 수 없다Student
package staticEx; public class Student { private static int serialNum = 10000; //static변수는 참조변수로 잘 사용하지 않는다 student.serialNum int studentID; String studentName; public Student() { serialNum++; studentID = serialNum; } public static int getSerialNum() { int i = 10;//지역변수 i++; System.out.println(i); /*studentName = "홍길동"; //멤버변수, 인스턴스변수 스테틱매써드에서는 사용불가!*/ return serialNum; //static 변수,클래스 변수 } }
StudentTest
package staticEx; public class StudentTest1 { public static void main(String[] args) { Student studentJ = new Student(); System.out.println(studentJ.getSerialNum()); Student studentT = new Student(); System.out.println(studentT.studentID); } }
static 응용 : singleton 패턴
Company
package singleton; public class Company { private static Company instance = new Company(); private Company() { } public static Company getInstance() { if(instance == null) instance = new Company(); return instance; } }
CompanyTest
package singleton; import java.util.Calendar; public class CompanyTest { public static void main(String[] args) { Company c1 = Company.getInstance(); Company c2 = Company.getInstance(); System.out.println(c1); System.out.println(c2); Calendar ca1 = Calendar.getInstance(); } }
반응형'Languages > Java' 카테고리의 다른 글
[JAVA]객체 배열, 배열 복사, 다차원 배열, arraylist (0) 2021.02.22 [JAVA]java 배열 (0) 2021.02.22 [JAVA]객체 간의 협력 (0) 2021.02.18 [JAVA]JAVA THIS (0) 2021.02.18 [JAVA]JAVA 생성자,참조자료형,정보은닉 (0) 2021.02.18