[JAVA] static
안녕하세요 여러분!
오늘은 자바(Java)의 static 키워드에 대해 알아보겠습니다.
1. Static 의 정의
자바에서 static 키워드는 변수와 메소드에 사용되며, 객체를 생성하지 않고도 사용할 수 있는 변수와 메소드를 의미합니다. 즉, 클래스를 통해 직접 접근할 수 있는 멤버들입니다.
2. Static 변수
Static 변수는 클래스 변수라고도 부릅니다.
클래스 내에서 선언되고 static 키워드를 사용하여 정의됩니다.
static 변수는 클래스당 하나만 존재하며, 모든 객체가 공유하는 변수입니다.
예시:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Car {
static int numberOfCars = 0;
Car() {
numberOfCars++;
}
}
public class Main {
public static void main(String[] args) {
Car car1 = new Car();
Car car2 = new Car();
Car car3 = new Car();
System.out.println("생성된 자동차의 수: " + Car.numberOfCars);
}
}
|
cs |
위의 예제에서는 Car 클래스에 static 변수 numberOfCars를 선언했습니다. 자동차 객체를 생성할 때마다 생성자에서 numberOfCars를 증가시키며, 생성된 자동차의 수를 출력합니다.
3.Static 메소드
Static 메소드는 클래스 메소드라고도 부릅니다.
static 메소드는 객체를 생성하지 않고도 호출할 수 있는 메소드입니다.
주로 유틸리티 함수나 객체 생성 없이도 동작하는 메소드에 사용됩니다.
예시:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class MathUtil {
static int add(int a, int b) {
return a + b;
}
static int subtract(int a, int b) {
return a - b;
}
}
public class Main {
public static void main(String[] args) {
int result1 = MathUtil.add(5, 3);
int result2 = MathUtil.subtract(7, 2);
System.out.println("5 + 3 = " + result1);
System.out.println("7 - 2 = " + result2);
}
}
|
cs |
위의 예제에서는 MathUtil 클래스에 두 개의 static 메소드인 add와 subtract를 선언했습니다. 객체를 생성하지 않고도 메소드를 호출하여 덧셈과 뺄셈 결과를 출력할 수 있습니다.
4.주의사항
- Static 변수는 모든 객체가 공유하기 때문에, 값을 수정하면 모든 객체에서 수정된 값을 참조하게 됩니다.
- Static 메소드에서는 static이 아닌 멤버에 직접 접근할 수 없습니다.
5.Static 블록
Static 블록은 클래스가 로드될 때 한 번만 실행되는 특별한 블록입니다.
주로 static 변수를 초기화하는 데 사용됩니다.
예시:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class MyStaticBlock {
static int[] numbers;
static {
numbers = new int[10];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i * 2;
}
}
}
public class Main {
public static void main(String[] args) {
for (int number : MyStaticBlock.numbers) {
System.out.println("Number: " + number);
}
}
}
|
cs |
위의 예제에서는 MyStaticBlock 클래스에 static 블록을 사용하여 numbers 배열을 초기화했습니다. 이 배열은 클래스가 로드될 때 한 번만 초기화되고, main 메소드에서 배열의 값을 출력할 수 있습니다.
6. Static과 객체지향 프로그래밍
Static을 사용하면 객체 생성 없이도 변수와 메소드에 접근할 수 있지만, 객체지향 프로그래밍의 원칙과 다소 상반될 수 있습니다.
객체지향 프로그래밍은 객체 간의 상호작용을 통해 문제를 해결하는 것을 목표로 하는데, static은 객체 간의 상호작용이 아닌 클래스 단위로 접근하기 때문입니다.
따라서, 상황에 맞게 적절히 사용해야 합니다.
정리
- Static 키워드는 변수와 메소드, 블록에 사용할 수 있습니다.
- Static 변수는 클래스 당 하나만 존재하며 모든 객체가 공유합니다.
- Static 메소드는 객체 생성 없이 호출할 수 있습니다.
- Static 블록은 클래스가 로드될 때 한 번만 실행되며 주로 초기화 작업에 사용됩니다.
- Static은 객체지향 프로그래밍의 원칙과 다소 상반되는 개념이므로 적절한 상황에서 사용해야 합니다.
이 글을 통해 자바에서의 static 키워드에 대해 알아보았습니다.
여러분의 코딩 공부에 도움이 되길 바랍니다!