Static

Bam·2023년 2월 22일
0

자바

목록 보기
14/19

클래스 변수(Class Variable) 또는 정적 변수(Static Variable)를 선언할 때 사용합니다.

public class Car {
    static int count = 0;

    public Car() {
        count++;
    }
}

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.count); // 3
    }
}

클래스 메소드(Class Method) 또는 정적 메소드(Static Method)를 선언할 때 사용합니다.

public class Calculator {
    public static int add(int a, int b) {
        return a + b;
    }
}
public class Main {
    public static void main(String[] args) {
        int result = Calculator.add(10, 20);
        System.out.println(result); // 30
    }
}

static을 남용 할 경우

객체 지향 프로그래밍의 철학에 어긋납니다.
static 키워드는 객체 지향 프로그래밍의 핵심 원칙 중 하나인 캡슐화(Encapsulation)를 어기는 경우가 있습니다. 캡슐화란 객체 내부의 세부 구현 사항을 숨기고 외부에서는 인터페이스를 통해 객체를 사용하는 것을 의미합니다. 하지만 static 키워드를 사용하면 클래스 변수와 클래스 메소드가 공유되기 때문에, 다른 객체에서 클래스 변수의 값을 변경할 수 있습니다. 또한, static 메소드는 다른 인스턴스 변수에 접근할 수 없으며, 상속을 통한 다형성(Polymorphism)을 지원하지 않습니다.

메모리 관리가 어렵습니다.
static 변수는 프로그램이 시작할 때 메모리에 할당되며, 프로그램이 종료될 때까지 유지됩니다. 따라서, 메모리 관리가 어려워지는 경우가 있습니다. 만약 static 변수를 계속 사용하면, 해당 변수의 값을 메모리에서 해제할 수 없으며, 계속해서 메모리를 차지하게 됩니다.

다중 스레드 환경에서 문제가 발생할 수 있습니다.
static 변수는 모든 인스턴스가 공유하기 때문에, 다중 스레드 환경에서 문제가 발생할 수 있습니다. 여러 스레드가 동시에 static 변수에 접근하면, 예기치 않은 결과가 발생할 수 있습니다. 이를 방지하기 위해서는 스레드 동기화(Thread Synchronization) 기술을 이용하여 동시 접근을 제어해야 합니다.

profile
Challenger

0개의 댓글