자바/자바 문법

중복 선언 오류

Blue_bull 2025. 1. 15. 19:36

1. 선언이 중복되면 발생하는 오류

Random rand = new Random();
Random rand = new Random();

오류 문구:

java: variable rand is already defined in method main(java.lang.String[])


오류 발생 원인 :

  • 같은 메서드 내부에서 동일한 이름의 변수를 두 번 선언하려고 했기 때문이다. Java는 같은 스코프(scope) 내에서 동일한 이름의 변수를 선언할 수 없다.

2. 선언과 정의란?

(1) 선언 (Declaration)

  • 변수, 메서드, 클래스 등의 이름과 타입, 구조를 지정하여 컴파일러에게 해당 요소가 존재한다는 것을 알리는 작업이다.

  • 구체적인 실행 내용(구현) 이나 메모리 할당을 반드시 포함하지 않아도 된다.

  • 선언의 JVM 관점:

    • JVM은 선언 자체를 메모리에 로드하거나 실행하지 않는다.
    • 선언은 컴파일 단계에서 유효성 검사를 통해 해당 요소가 코드에서 사용 가능한지를 보장한다.
    • 선언된 변수나 메서드는 구체적인 초기화나 구현 없이 실행 단계에서 사용될 수 없다.(2) 정의 (Definition):
    • (1) 선언을 포함하며, 구체적인 실행 내용(구현) 또는 값의 초기화를 통해 해당 요소를 실행 가능한 상태로 만드는 작업이다.
    • (2) 컴파일러에게 실행 로직을 제공하고, 런타임 시에는 JVM이 메모리를 할당하여 실행에 사용한다.
  • (3) JVM 관점:

변수의 정의(JVM 관점) :

  • JVM은 정의된 변수에 대해 메모리를 할당하고 초기값(기본값 또는 명시적 값)을 저장한다.

  • 런타임 시 메모리에 올라가 사용 가능하다.

    ~~~java
    int number; // 변수 선언: 타입과 이름만 지정, 값 초기화 없음
    int number = 10; // 변수 선언 + 정의: 초기값 10으로 메모리에 저장

    메서드의 정의(JVM 관점):

  • JVM은 정의된 메서드의 바이트코드(Bytecode)를 생성하여 메서드 영역(Method Area)에 저장한다.

  • 런타임에 호출될 수 있다.

    public int add(int a, int b); // 메서드 선언: 이름, 반환 타입, 매개변수만 지정, 구현 없음
    public int add(int a, int b) { // 메서드 선언 + 정의: 구현 포함
    return a + b;
    }

    클래스의 정의(JVM 관점):

  • JVM은 클래스 정의를 클래스 로더를 통해 메모리에 로드하며, 메서드 영역에 저장한다.

  • 정의된 클래스는 인스턴스를 생성하거나 정적 멤버를 사용할 수 있다.

  • 클래스 이름과 구조를 선언한 뒤, 필드 초기화나 메서드 구현이 포함된 상태이다.

    public class MyClass; // 클래스 선언: 이름만 지정, 구현 없음
    public class MyClass { // 클래스 선언 + 정의: 필드와 메서드 포함
    int value = 10; // 필드 정의
    public void display() {
        System.out.println(value); // 메서드 정의
    }
    }

3. 스코프(scope):

  • 스코프는 변수의 유효 범위를 의미하며, 변수 선언 위치에 따라 결정된다.
  • 스코프의 유형:
    • 클래스 스코프: 클래스 전체.
    • 메서드 스코프: 메서드 내부.
    • 블록 스코프: { } 블록 내부.
  • 중복 선언 문제:
    • 같은 스코프 안에서는 동일한 이름의 변수를 선언할 수 없다.
    • 중복 선언을 피하려면 변수 이름을 변경하거나 다른 스코프에서 선언해야 한다.

'자바 > 자바 문법' 카테고리의 다른 글

new 연산자란?  (1) 2025.01.24
참조 변수와 기본 자료형 변수  (0) 2025.01.21
자바 throw 키워드 기초 이해.  (0) 2025.01.14
자바 try-catch  (0) 2025.01.14
컬렉션 Map의 값 여러 개 넣는 법.  (0) 2025.01.13