안녕하세요! 이 기사에서는 전역 변수, 해당 선언 및 적절한 사용 예에 대해 설명합니다. 작은 참고 사항: 전역 클래스 변수, 즉 하나의 클래스 내에서 액세스할 수 있는 변수는 고려하지 않습니다. 우리는 전체 애플리케이션의 전역 변수, 즉 전체 애플리케이션 내에서 접근할 수 있는 변수에 대해 이야기할 것입니다.
전역 변수를 만드는 방법
전역 변수는 응용 프로그램의 어느 곳에서나 액세스할 수 있는 변수입니다. 즉, 해당 범위는 전체 애플리케이션입니다. Java에서 이러한 변수를 생성하려면 공용 클래스에서 공용 정적 변수를 생성해야 합니다.public class Example {
public static int a;
public static int b;
public static String str;
}
변수 a
및 b
- 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 명명 규칙에 따라 모든 상수의 이름은 대문자로 지정해야 하며 단어는 밑줄 문자로 구분됩니다. 따라서 우리는 상수를 만들었고 이제 그 값을 변경할 수 없습니다. 그러나 그 값을 읽을 수 있습니다:
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
전역 변수를 사용해야 합니까?
인터넷에는 많은 기사가 있는데, 그 주요 메시지는 다음과 같습니다: 전역 변수는 사악하고 나쁘고 끔찍합니다. 진짜야? 모든 사람이 스스로 결론을 내릴 수 있도록 전역 변수의 장단점을 제시해 보겠습니다. 단점부터 시작하겠습니다. 읽고 편집할 수 있는 전역 변수가 있는 클래스가 있는 애플리케이션을 상상해 보겠습니다. 시간이 지남에 따라 프로젝트의 클래스 수, 전역 변수 및 전역 변수를 사용하는 즉, 이에 의존하는 메서드의 수가 늘어납니다. 시간이 지남에 따라 각 전역 변수는 시스템의 여러 부분에서 다양한 목적으로 읽혀집니다. 변수 값은 시스템의 다른 부분에서 업데이트될 수 있습니다. 이 애플리케이션 세계의 전체적인 그림은 훨씬 더 복잡해지며 이로 인해 다음과 같은 단점이 발생합니다 .- 가독성이 떨어지고 코드 이해가 어려워집니다.
- 코드 유지 관리의 복잡성이 증가합니다.
- 하나의 전역 변수를 변경하려면 해당 변수가 시스템의 다른 부분에서 유효하지 않은 값으로 설정되지 않도록 전체 코드를 분석해야 합니다.
- 디버깅하기 매우 어려운 오류가 증가합니다.
객체의 배열인 전역 변수를 상상해 봅시다. 예를 들어 시스템의 한 부분에서는 이 배열에 문자열이 필요하고 시스템의 다른 부분에서는 누군가 부동 소수점 숫자를 사용하기로 결정했습니다. 누구도 이것을 이해하고 싶어하지 않을 것입니다.
- 코드에서 전역 변수를 사용하는 경우와 전역 변수를 사용하는 일부 라이브러리를 사용하는 경우 변수 이름이 동일할 수 있습니다. 이로 인해 애플리케이션 측면과 사용 중인 라이브러리 측면 모두에서 오류가 발생할 수 있습니다.
- 전역 변수를 사용하는 시스템의 여러 부분 간의 연결성을 높입니다. 반대로, 코드의 느슨한 결합을 위해 노력해야 합니다. 하나의 무거운 시스템을 갖는 것보다 여러 개의 작은 하위 시스템을 서로 느슨하게 연결하는 것이 더 좋습니다. 뇌는 너무 복잡하고 혼란스러운 일을 처리하는 것보다 여러 가지 간단한 일을 처리하는 것이 더 쉽기 때문입니다.
- 테스트에서는 어떤 전역 변수가 필요하고 어떻게 초기화해야 하는지 모르기 때문에 단위 테스트 작성이 더 어려워집니다.
- 멀티스레드 애플리케이션에서는 서로 다른 스레드에서 전역 변수를 사용하면 디버깅하기 어려운 오류가 증가하고 프로젝트 복잡성이 증가합니다. 이 때문에 이러한 변수에 대한 액세스를 보다 정확하게 구성하고 동기화 및 잠금 기능을 갖추어야 합니다. 이로 인해 향후 단락이 발생할 수 있습니다. 예를 들어 스레드 A는 작업을 위해 변수 X를 잠갔고 스레드 B는 작업을 위해 변수 Y를 잠갔으며 이제 스레드 A에는 변수 Y가 필요하고 스레드 B에는 변수 X가 필요합니다. 결과적으로 프로그램이 중단됩니다.
- 소규모 프로젝트에서 전역 변수는 프로젝트를 작동시키는 가장 간단한 방법입니다.
- 때로는 전역 변수 사용에 대한 두려움으로 인해 프로젝트가 더욱 복잡해집니다. 그런 다음 프로그래머는 싱글톤을 만들고 다른 디자인 패턴을 사용하기 시작합니다.
- 프로그래밍에서는 불변 값에 의존해야 하는 경우가 많습니다.
가장 합리적인 것은 이러한 값을 상수로 작성하는 것입니다. 상수만이 변수의 값이 시간이 지나도 변하지 않음을 보장하기 때문입니다. 이러한 상수는 항상 찾을 수 있습니다( , ,
Integer.MAX_VALUE
등Integer.MIN_VALUE
) . 그러나 프로그래밍은 표준 라이브러리 사용에만 국한되지 않습니다. 고유한 상수에 의존해야 하는 일종의 고유한 논리를 작성해야 하는 경우가 종종 있습니다. 그렇기 때문에 때로는 상수(읽기 전용 전역 변수)를 사용하면 작업이 훨씬 더 쉬워집니다.Boolean.TRUE
Collections.EMPTY_LIST
- 초보 개발자가 작성하는 모든 것은 본질적으로 작은 프로젝트입니다. 그리고 그의 프로젝트에서 전역 변수를 사용하면 어디에서나 전역 변수를 사용하는 방법을 배울 수 있습니다.
- 먼저 "금지된 속임수" 없이 수행하는 방법을 배우는 것이 좋습니다. 그리고 경험을 통해 그러한 기술을 사용하는 것이 적절한 시기를 저절로 이해하게 될 것입니다.
GO TO FULL VERSION