JAVA / static 변수

아몬드봉봉·2023년 12월 12일
0

Java

목록 보기
9/17

static 변수

  • static 키워드를 통해 생성된 정적멤버는 static 메모리 영역에 할당된다.
  • static 메모리 영역에 할당된 모든 객체는 공유되어 하나의 멤버를 어디서든지 참조할 수 있다.
  • Garbage Collector의 관리 영역 밖에 존재해 static 영역에 있는 멤버들은 프로그램이 종료 될때까지 메모리가 할당된 상태로 존재한다.
  • static을 남발하면 시스템 성능에 악영향을 줄 수 있다.
  • static 변수는 클래스 변수이다.
  • 객체를 생성하지 않아도 static 자원에 접근이 가능하다.

공통으로 사용하는 변수가 필요한 경우

  • 여러 인스턴스가 공유하는 기준 값이 필요한 경우
  • 학생마다 새로운 학번 생성
  • 카드회사에서 카드를 새로 발급할때마다 새로운 카드 번호를 부여
  • 회사에 사원이 입사할때 마다 새로운 사번이 필요한 경우

static 변수 선언과 사용하기

static int serialNum;

  • 인스턴스가 생성될 때 만들어지는 변수가 아닌, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당
  • 클래스 변수, 정적변수라고도 함 (인스턴스 변수)
  • 인스턴스 생성과 상관없이 사용 가능하므로 클래스 이름으로 직접 참조

Student serialNum = 100;

static 변수 예제 1
public class Employee {
    
    public static int serialNum = 1000;
 
    private int employeeId;
    private String employeeName;
    private String department;
    
    public int getEmployeeId() {
        return employeeId;
    }
    public void setEmployeeId(int employeeId) {
        this.employeeId = employeeId;
    }
    public String getEmployeeName() {
        return employeeName;
    }
    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }
    public String getDepartment() {
        return department;
    }
    public void setDepartment(String department) {
        this.department = department;
    }
    
}
 
---------------------------------------------------
 
public class EmployeeTest {
    
    public static void main(String[] args) {
        
        Employee employeeLee = new Employee();
        employeeLee.setEmployeeName("이순신");
        
        System.out.println(employeeLee.serialNum);
        
        Employee employeeKim = new Employee();
        employeeKim.setEmployeeName("김유신");
        employeeKim.serialNum++;
        
        System.out.println(employeeLee.serialNum);
        System.out.println(employeeKim.serialNum);
        
    }
    
}
  • employeeLee.serialNum => 1000
  • employeeLee.serialNum => 1001
  • employeeKim.serialNum => 1001
static 변수 예제 2
public class Employee {
    
    public static int serialNum = 1000;
 
    private int employeeId;
    private String employeeName;
    private String department;
    
    public Employee() {
        
        serialNum++;
        employeeId = serialNum; // 따로 변수에 담아줘야 다른 번호를 받는다.
        
    }
    
    public int getEmployeeId() {
        return employeeId;
    }
    public void setEmployeeId(int employeeId) {
        this.employeeId = employeeId;
    }
    public String getEmployeeName() {
        return employeeName;
    }
    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }
    public String getDepartment() {
        return department;
    }
    public void setDepartment(String department) {
        this.department = department;
    }
    
}
 
---------------------------------------------------
 
public class EmployeeTest {
    
    public static void main(String[] args) {
        
        Employee employeeLee = new Employee();
        employeeLee.setEmployeeName("이순신");
        
        System.out.println(Employee.serialNum);
        
        Employee employeeKim = new Employee();
        employeeKim.setEmployeeName("김유신");
        employeeKim.serialNum++;
        
        System.out.println(employeeLee.getEmployeeName() + "님의 사번은 " + employeeLee.getEmployeeId());
        System.out.println(employeeKim.getEmployeeName() + "님의 사번은 " + employeeKim.getEmployeeId());
        
    }
    
}
  • Employee.serialNum => 1001
  • employeeLee.getEmployeeName() + "님의 사번은 " + employeeLee.getEmployeeId()
    이순신님의 사번은 1001
  • employeeKim.getEmployeeName() + "님의 사번은 " + employeeKim.getEmployeeId()
    김유신님의 사번은 1002

출처

https://coding-factory.tistory.com/524
https://mangkyu.tistory.com/47

profile
성장을 즐기는 백엔드 자바 개발자

0개의 댓글

관련 채용 정보