JavaRush /Java Blog /Random-KO /Java의 전역 변수: 언제 사용합니까?
Анзор Кармов
레벨 31
Санкт-Петербург

Java의 전역 변수: 언제 사용합니까?

Random-KO 그룹에 게시되었습니다
안녕하세요! 이 기사에서는 전역 변수, 해당 선언 및 적절한 사용 예에 ​​대해 설명합니다. 작은 참고 사항: 전역 클래스 변수, 즉 하나의 클래스 내에서 액세스할 수 있는 변수는 고려하지 않습니다. 우리는 전체 애플리케이션의 전역 변수, 즉 전체 애플리케이션 내에서 접근할 수 있는 변수에 대해 이야기할 것입니다. Java의 전역 변수: 언제 사용합니까?  - 1

전역 변수를 만드는 방법

전역 변수는 응용 프로그램의 어느 곳에서나 액세스할 수 있는 변수입니다. 즉, 해당 범위는 전체 애플리케이션입니다. Java에서 이러한 변수를 생성하려면 공용 클래스에서 공용 정적 변수를 생성해야 합니다.
public class Example {
    public static int a;
    public static int b;
    public static String str;
}
변수 ab- str가 전역 변수가 되었습니다. 애플리케이션 내의 다른 클래스에서 직접 액세스할 수 있습니다.
public class GlobalVarsDemo {
    public static void main(String[] args) {
        Example.a = 4;
        Example.b = 5;
        Example.str = "Global String variable value";

        System.out.println(Example.a);
        System.out.println(Example.b);
        System.out.println(Example.str);
    }
}
메소드를 실행하면 main다음과 같은 출력이 표시됩니다.

4
5
Global String variable value
전역 변수는 2가지 유형으로 나눌 수 있습니다.
  • 편집할 수 있는 변수;
  • 읽기만 가능한 변수
후자를 전역 상수라고 합니다. 전역 상수를 생성하려면 변수를 만들고 final변수를 정의할 때 값을 할당해야 합니다.
public class Constants {

    public static final double PI = 3.1415926535897932384626433832795;
    public static final String HELLO_WORLD_STR = "Hello, World!";

}
Java 명명 규칙에 따라 모든 상수의 이름은 대문자로 지정해야 하며 단어는 밑줄 문자로 구분됩니다. 따라서 우리는 상수를 만들었고 이제 그 값을 변경할 수 없습니다. Java의 전역 변수: 언제 사용합니까?  - 2그러나 그 값을 읽을 수 있습니다:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(Constants.HELLO_WORLD_STR);
    }
}
결론:

Hello, World!
public class ConstantsDemo {
    public static void main(String[] args) {
        double r = 10;
        String message = String.format("Площадь круга с радиусом %f=%f", r, getCircleSquare(r));
        System.out.println(message);

    }

    static double getCircleSquare(double r) {
        return Constants.PI * r * r;
    }
}
결론:

Площадь круга с радиусом 10,000000=314,159265

전역 변수를 사용해야 합니까?

인터넷에는 많은 기사가 있는데, 그 주요 메시지는 다음과 같습니다: 전역 변수는 사악하고 나쁘고 끔찍합니다. 진짜야? 모든 사람이 스스로 결론을 내릴 수 있도록 전역 변수의 장단점을 제시해 보겠습니다. Java의 전역 변수: 언제 사용합니까?  - 삼단점부터 시작하겠습니다. 읽고 편집할 수 있는 전역 변수가 있는 클래스가 있는 애플리케이션을 상상해 보겠습니다. 시간이 지남에 따라 프로젝트의 클래스 수, 전역 변수 및 전역 변수를 사용하는 즉, 이에 의존하는 메서드의 수가 늘어납니다. 시간이 지남에 따라 각 전역 변수는 시스템의 여러 부분에서 다양한 목적으로 읽혀집니다. 변수 값은 시스템의 다른 부분에서 업데이트될 수 있습니다. 이 애플리케이션 세계의 전체적인 그림은 훨씬 더 복잡해지며 이로 인해 다음과 같은 단점이 발생합니다 .
  1. 가독성이 떨어지고 코드 이해가 어려워집니다.
  2. 코드 유지 관리의 복잡성이 증가합니다.
  3. 하나의 전역 변수를 변경하려면 해당 변수가 시스템의 다른 부분에서 유효하지 않은 값으로 설정되지 않도록 전체 코드를 분석해야 합니다.
  4. 디버깅하기 매우 어려운 오류가 증가합니다.

    객체의 배열인 전역 변수를 상상해 봅시다. 예를 들어 시스템의 한 부분에서는 이 배열에 문자열이 필요하고 시스템의 다른 부분에서는 누군가 부동 소수점 숫자를 사용하기로 결정했습니다. 누구도 이것을 이해하고 싶어하지 않을 것입니다.

  5. 코드에서 전역 변수를 사용하는 경우와 전역 변수를 사용하는 일부 라이브러리를 사용하는 경우 변수 이름이 동일할 수 있습니다. 이로 인해 애플리케이션 측면과 사용 중인 라이브러리 측면 모두에서 오류가 발생할 수 있습니다.
  6. 전역 변수를 사용하는 시스템의 여러 부분 간의 연결성을 높입니다. 반대로, 코드의 느슨한 결합을 위해 노력해야 합니다. 하나의 무거운 시스템을 갖는 것보다 여러 개의 작은 하위 시스템을 서로 느슨하게 연결하는 것이 더 좋습니다. 뇌는 너무 복잡하고 혼란스러운 일을 처리하는 것보다 여러 가지 간단한 일을 처리하는 것이 더 쉽기 때문입니다.
  7. 테스트에서는 어떤 전역 변수가 필요하고 어떻게 초기화해야 하는지 모르기 때문에 단위 테스트 작성이 더 어려워집니다.
  8. 멀티스레드 애플리케이션에서는 서로 다른 스레드에서 전역 변수를 사용하면 디버깅하기 어려운 오류가 증가하고 프로젝트 복잡성이 증가합니다. 이 때문에 이러한 변수에 대한 액세스를 보다 정확하게 구성하고 동기화 및 잠금 기능을 갖추어야 합니다. 이로 인해 향후 단락이 발생할 수 있습니다. 예를 들어 스레드 A는 작업을 위해 변수 X를 잠갔고 스레드 B는 작업을 위해 변수 Y를 잠갔으며 이제 스레드 A에는 변수 Y가 필요하고 스레드 B에는 변수 X가 필요합니다. 결과적으로 프로그램이 중단됩니다.
그러나 이것은 모두 부정확합니다. 이것은 위험에 대한 설명으로, 프로젝트의 성장과 그 안에 포함된 전역 변수의 수가 증가함에 따라 그 가능성이 증가합니다. 전문가로 넘어 갑시다 :
  1. 소규모 프로젝트에서 전역 변수는 프로젝트를 작동시키는 가장 간단한 방법입니다.
  2. 때로는 전역 변수 사용에 대한 두려움으로 인해 프로젝트가 더욱 복잡해집니다. 그런 다음 프로그래머는 싱글톤을 만들고 다른 디자인 패턴을 사용하기 시작합니다.
  3. 프로그래밍에서는 불변 값에 의존해야 하는 경우가 많습니다.

    가장 합리적인 것은 이러한 값을 상수로 작성하는 것입니다. 상수만이 변수의 값이 시간이 지나도 변하지 않음을 보장하기 때문입니다. 이러한 상수는 항상 찾을 수 있습니다( , , Integer.MAX_VALUEInteger.MIN_VALUE) . 그러나 프로그래밍은 표준 라이브러리 사용에만 국한되지 않습니다. 고유한 상수에 의존해야 하는 일종의 고유한 논리를 작성해야 하는 경우가 종종 있습니다. 그렇기 때문에 때로는 상수(읽기 전용 전역 변수)를 사용하면 작업이 훨씬 더 쉬워집니다.Boolean.TRUECollections.EMPTY_LIST

일반적으로 전역 변수를 과도하게 사용하지 말고, 가능하면 상수만 사용하세요. 소규모 프로젝트에서는 전역변수를 사용하는 것도 나쁘지 않다고 앞서 말한 바 있다. 하지만 초보 개발자라면 전혀 사용하지 않는 것이 좋습니다. 두 가지 이유:
  1. 초보 개발자가 작성하는 모든 것은 본질적으로 작은 프로젝트입니다. 그리고 그의 프로젝트에서 전역 변수를 사용하면 어디에서나 전역 변수를 사용하는 방법을 배울 수 있습니다.
  2. 먼저 "금지된 속임수" 없이 수행하는 방법을 배우는 것이 좋습니다. 그리고 경험을 통해 그러한 기술을 사용하는 것이 적절한 시기를 저절로 이해하게 될 것입니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION