middlefitting

[OOP] Java 클래스 내부에 선언된 변수에 관하여 본문

JAVA

[OOP] Java 클래스 내부에 선언된 변수에 관하여

middlefitting 2023. 2. 8. 23:53

클래스에 존재하는 변수

자바 클래스에서 사용할 수 있는 변수의 종류에 대해 알아보도록 하겠습니다.

 

Class에 존재하는 변수는 크게 4종류로 나누어 볼 수 있습니다.

 

그들은 인스턴스 변수, 클래스 변수, 지역 변수, 매개 변수입니다.

 

 

 

인스턴스 변수 (Instance Variables)

인스턴스 변수는 클래스 영역에 선언된 변수를 말합니다.

 

멤버 변수라고 표현하기도 합니다.

 

다음과 같이 정의를 할 수 있습니다.

public class HelloInstance {
    int 	age;
    String 	name;
}

이렇게 클래스 내부에 선언된 변수를 인스턴스 변수라고 합니다.

 

인스턴스 변수는 이름처럼 인스턴스가 생성되었을 때 생성이 되게 됩니다.

 

이러한 인스턴스 변수는 메서드에서 참조할 수 있고, 생성자에서도 사용할 수 있습니다.

 

 

 

클래스 변수

클래스 변수도 클래스 영역에 선언된 변수를 말합니다.

 

다음과 같이 정의를 할 수 있습니다.

public class HelloClass {
    static int 		age;
    static String 	name;
}

이렇게 클래스 내부에 선언된 변수입니다.

 

인스턴스 변수와는 무엇이 다를까요. 그것은 바로 static 접근제어자가 붙었다는 것입니다.

 

인스턴스 변수에 static 접근제어자가 붙게되면 그것은 컴파일 단계에 올라가게 되어 클래스마다 유일한 변수로서 작용하게 됩니다.

 

 

무슨 말인지 알아보기 위해 코드 예시를 보겠습니다.

public class HelloInstance {
    static int age;
    String name;

    public HelloInstance(String name) {
        this.name = name;
    }
}

class hello {
    public static void main(String[] args) {
        HelloInstance.age = 10;
        System.out.println(HelloInstance.age);
        // 10
        HelloInstance helloInstance = new HelloInstance("peter");
        System.out.println(HelloInstance.age);
        // 10
        helloInstance.age = 20;
        HelloInstance helloInstance2 = new HelloInstance("David");
        System.out.println(HelloInstance.age);
    	// 20
    }
}

이처럼 static 변수는 인스턴스를 새로 생성하든 말든 클래스에서 유일한 값을 가지게 됩니다.

 

즉 해당 변수를 변경하면 해당 클래스의 구현체인 다른 인스턴스들도 모두 영향을 받습니다.

 

왜냐하면 클래스의 Static 변수는 클래스가 컴파일 단계에서 메인 메모리에 올라가면서 딱 한번 생성되는 내용이기 때문입니다.

 

즉 클래스가 가지는 고유한 변수 정도로 이해하면 될 것 같습니다.

 

 

인스턴스 변수와 Static 변수는 이렇게 생명주기가 다르다 보니 다른 방향으로 활용을 할 수 있겠습니다.

 

인스턴스 변수의 경우는 인스턴스마다 차이가 존재하는 내용에 대해 값을 저장하는 용도로 활용할 수 있고,

 

클래스 변수는 클래스의 고유한 정보를 표현하는 용도로 활용을 하면 되겠습니다.

 

 

 

지역 변수 (Local Variables)

지역변수는 클래스 이외의 생성자, 메서드 블록에 내부에 선언되는 변수를 말합니다.

 

즉 생명주기는 메서드의 실행부터 종료될때까지만 유효한 변수가 되겠습니다. 

 

즉 매서드 블록 내에서만 사용이 가능하며, 블록이 끝나면 소멸됩니다.

 

메서드마다 한번 쓰고 버리는 변수라고 생각하시면 됩니다.

 

 

 

매개변수 (Parameters)

매개변수는 생성자나 메서드의 선언부에서 정의되는 변수를 말합니다.

 

매개변수도 지역변수와 같이 메서드 내에서만 사용이 가능하며, 해당 메서드가 호출될 때, 전달된 인자의 값으로 초기화가 이루어집니다.

 

매개변수는 반드시 전달되어야 하며, 전달되지 않으면 컴파일 오류가 발생되게 됩니다.

 

지역변수와 매개변수의 차이

지역변수와 매개변수는 생명주기가 비슷하기 때문에 그 차이점을 인지하고 사용하여야 합니다.

 

변수의 선언 위치

지역 변수는 메서드 내부에서 선언되지만 매개변수는 매서드 선언부에 선언됩니다.

 

변수의 접근 제어자

매개변수는 접근제어자의 사용이 불가능하지만, 지역변수는 접근 제어자를 통해 접근범위를 지정할 수 있습니다.

 

변수의 목적

매개변수는 해당 메서드를 사용하는 클라이언트와의 상호작용을 위해 사용합니다.

로컬 변수는 메서드 내부에서 임시적으로 값을 보관하기 위한 용도로 활용합니다.

 

 

 

변수에 접근할 수 있는 위치

이러한 변수들을 언제언제 사용할 수 있을까요.

 

쉽게 생각하면 자신의 생명주기를 포함하는 친구들을 사용을 할 수 있습니다

 

즉 메서드에서는 지역 변수, 인스턴스 변수, 클래스 변수를 모두 사용할 수 있습니다.

 

왜냐하면 메서드를 사용하기 위해서는 클래스도 이미 메모리에 올라와야 하고 인스턴스도 생성되어야 하기 때문입니다.

 

즉 메서드를 사용할 시점에는 이미 인스턴스 변수와 클래스 변수는 준비완료 상태인 것입니다.

 

더불어  인스턴스 변수와 클래스 변수는 인스턴스를 만들게 되면 접근 제어자만 가능하다면 메서드 호출 없이도 접근이 가능할

 

것이고,클래스 변수는 인스턴스를 만들지 않아도 접근이 가능할 것입니다.

 

이렇게 클래스에는 생명주기가 다른 지역 변수, 인스턴스 변수, 클래스 변수를 동해 굉장히 다양한 작업을 수행할 수 있게 됩니다.