일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코딩테스트
- 머신러닝
- Lv 2
- 우분투
- Ai
- 인공지능
- 데이터베이스
- programmers
- mysql
- db
- docker
- Kubernetes
- Java
- 쿠버네티스
- 깃
- 프로그래머스
- Linux
- 리눅스
- 파이썬
- 코테
- Python
- ubuntu
- DevOps
- github
- 정처기
- git
- LV 0
- 자바
- 자료구조
- 알고리즘
- Today
- Total
Myo-Kyeong Tech Blog
[ JAVA ] JAVA 기초 문법 - static 변수 본문
static 변수란?
- 클래스에서 공통으로 사용하는 변수
- 일반 멤버 변수는 인스턴스가 생성될 때마다 새로 생성되지만, static 변수는 프로그램이 실행되어 메모리에 올라갔을 때 딱 한 번만 메모리 공간에 할당
- static으로 선언한 변수는 인스턴스 생성과 상관없이 먼저 생성되고 그 값을 모든 인스턴스가 공유
static 변수 선언과 활용
static 변수를 다른 용어로 '정적 변수'라고도 합니다. 일반적으로 클래스 내부에 선언하고, static 키워드 다음에 변수의 자료형과 이름을 지정합니다.
public class [클래스명] {
static [자료형] [변수 이름];
// ....
}
1. 모든 인스턴스에서 공유하는 값을 표현할 때
static 변수는 클래스의 모든 인스턴스에서 공유되는 값을 표현하는 데 적합합니다.
예를 들어, 우리가 웹 서버를 만드는 데, 해당 웹 서버의 모든 요청(request)들이 동일한 데이터베이스 연결을 공유하길 원한다고 가정해봅시다. 이때 'static' 변수를 사용할 수 있습니다. 'DatabaseConnection' 클래스를 만들고 'static' 변수로 'dbConnection'을 선언하여 모든 인스턴스가 동일한 데이터베이스 연결을 공유하도록 만들 수 있습니다.
2. 인스턴스 없이 클래스 수준에서 작업을 수행할 때
객체를 생성하지 않고도 메서드를 호출해야 하는 경우에 static 메서드를 사용합니다. static 메서드 내부에서 static 변수를 사용하면 객체 생성 없이 값을 유지하거나 변경할 수 있습니다.
예를 들어, 'Math' 클래스는 'Math.sqrt()'나 'Math.pow()'와 같은 메서드를 제공합니다. 이 메소드는 'Math' 객체를 생성하지 않고도 호출할 수 있습니다.
3. 메모리 절약
모든 인스턴스가 동일한 값을 가지는 변수가 있다면, 그 변수를 각 인스턴스에 대해 별도로 저장하는 것은 메모리 낭비일 수 있습니다. 이런 경우에 static 변수를 사용하면 메모리를 절약할 수 있습니다.
static 변수 예시
Student 클래스에는 학생의 이름을 저장하는 'name' 인스턴스 변수와 학생 수를 알 수 있는 'studentCount'라는 static 변수를 가지고 있습니다.
public class Student {
public static int studentCount = 0; // 모든 학생들이 공유하는 변수
private String name; // 각 학생이 가지는 개별 변수
// 생성자
public Student(String name) {
this.name = name;
studentCount++; // 학생이 생성될 때마다 학생 수 증가
}
}
'Student' 클래스의 인스턴스가 생성될 때마다 'studentCount'는 1씩 증가하여 현재까지 생성된 학생 수를 나타냅니다.
public class Main {
public static void main(String[] args) {
Student s1 = new Student("Alice");
Student s2 = new Student("Bob");
System.out.println(Student.studentCount); // 출력: 2
}
}
일반 멤버 변수와 달리 static 변수는 프로그램이 실행되어 메모리에 로드될 때 딱 한 번만 메모리 공간에 할당됩니다. 즉, 'static' 변수는 클래스가 메모리에 로드될 때 생성되며, 해당 클래스의 어떠한 인스턴스보다 먼저 메모리에 차지하게 됩니다.
그렇기 때문에 'static' 변수는 인스턴스 생성과는 독립적으로 먼저 생성되며, 그 값은 모든 인스턴스가 공유하게 됩니다. 이는 클래스의 인스턴스를 생성하지 않아도 'static' 변수에 접근하거나 수정할 수 있음을 의미합니다.
// 인스턴스 생성 없이 클래스 이름을 통해 static 변수에 접근 가능
Student.studentCount = 5;
static 변수 주의사항
- 정적 변수에 대한 변경은 모든 객체에 영향을 미치기 때문에 주의해야 합니다.
- 정적 변수는 프로그램이 시작될 때 초기화되므로, 정적 변수의 초기화 순서와 상호작용에 주의해야 합니다.
- 너무 많은 정적 변수를 사용하면 메모리 사용량이 증가하고 코드 유지보수가 어려워질 수 있습니다.
'Programming > Java' 카테고리의 다른 글
[ JAVA ] JAVA 배열 java.util.Arrays 클래스 주요 메소드 정리 ( copyOf ,sort, equals, fill, binarySearch ) (0) | 2023.06.10 |
---|---|
[ JAVA ] JAVA 문자열 대문자 소문자 변환 - toUpperCase(), toLowerCase() (0) | 2023.06.10 |
[ JAVA ] JAVA 기초 문법 - 배열 ( Array ) 이란 ? (0) | 2023.05.30 |
[ JAVA ] Windows에 JDK Development Kit 17.0.7 설치 (0) | 2023.05.25 |
[ JAVA ] Windows에 Gradle 설치 (0) | 2023.05.24 |