프로그래밍자바 개발자

Java에서 지역 변수, 인스턴스 변수 및 정적 변수의 차이를 설명하십시오. 사용의 특징이 어떻게 오류로 이어질 수 있습니까?

Hintsage AI 어시스턴트로 면접 통과

답변

지역 변수 — 메서드 또는 블록 본문 내에서 선언되고 존재하며 자동으로 초기화되지 않습니다. 초기화되지 않은 지역 변수를 사용하는 것은 컴파일 오류를 초래합니다.

인스턴스 변수 (static이 아닌 필드) — 각각의 객체에 개별적으로 속하며, 객체 인스턴스가 생성될 때 초기화됩니다.

정적 변수 (static 필드) — 클래스의 모든 인스턴스에 대해 공통적이며, 클래스 전체를 통틀어 단 하나의 인스턴스가 존재합니다. 하나의 객체에서의 변경은 이 클래스의 다른 모든 객체에서 보이게 됩니다.

코드 예시
public class Example { private int instanceVar; // 인스턴스 변수 private static int staticVar; // 정적 변수 public void foo() { int localVar = 0; // 지역 변수 } }

트릭 질문

정적 변수는 private일 수 있으며 클래스의 서로 다른 인스턴스 간에 어떻게 보입니까?

답변: 네, 정적 변수는 private일 수 있습니다. 그 변경 사항은 클래스의 모든 인스턴스에 반영됩니다. 왜냐하면 이들은 객체가 아닌 클래스에 속하기 때문입니다.

public class MyClass { private static int counter = 0; public MyClass() { counter++; } public static int getCounter() { return counter; } }

MyClass의 여러 인스턴스를 생성하면 동일한 카운터가 증가합니다.

주제와 관련된 실제 오류의 예


이야기

엔터프라이즈 애플리케이션에서 개발자는 사용자 상태를 정적 필드에 잘못 넣었습니다. 이로 인해 사용자가 다중 사용자 환경에서 서로의 데이터를 "보게" 되었습니다.


이야기

멀티스레드 애플리케이션을 작성할 때 인스턴스 변수가 적절한 동기화 없이 static 메소드 내에서 사용되었습니다. 이는 데이터 경합 및 예기치 않은 결과를 초래했습니다.


이야기

개발자는 클래스 필드 대신 지역 변수를 사용하여 중간 결과를 저장하기로 결정했습니다. 변수는 메소드 종료 후 사라졌으며 프로그램은 항상 null을 반환했습니다. 이는 테스트 중 즉시 발견되지 않았습니다.