Fast Blinking Hello Kitty
 

[📖JAVA] 자바 멤버 변수 선언과 외부 접근 방법(➰클래스 변수, 인스턴스 변수)

📍 개요

클래스 변수인스턴스 변수의 개념과 역할을 학습해보는 시간을 가졌습니다.
◾ 학급 성적 관리 프로그램 예제를 통해 멤버 변수의 실질적인 사용 방법을 실습했습니다.


1️⃣ 멤버 변수 - 종류

📁 클래스 변수

✔️ 메소드 영역 저장

클래스 변수는 같은 클래스에서 만들어진 모든 객체라면 이 변수의 값을 공유합니다.
모든 객체가 데이터를 공유하므로, 클래스의 어떤 객체에서 이 데이터를 수정하면
다른 객체에서도 같은 변경이 반영됩니다.

❗클래스 변수는 무조건 static을 사용하여 선언해야 하며,
이로 인해 클래스의 모든 인스턴스가 동일한 값을 공유하게 됩니다.

📁 인스턴스 변수

✔️ 힙 영역 저장

인스턴스 변수는 클래스의 인스턴스(=객체)가 생성될 때마다 각각의 인스턴스에 속하는 변수를 말합니다.
객체마다 독립적으로 존재하는 데이터를 저장합니다.
각 객체가 자신만의 값을 가지며, 클래스 변수와는 달리 개별적인 상태를 유지합니다.

❗ 인스턴스 변수는 static을 사용하지 않고 선언되며,
각 객체가 자신의 인스턴스 변수 값을 가지게 됩니다.

 

💡쉽게 이해하기

학급 성적을 관리하는 프로그램을 만든다고 가정하면 학급에는 여러 명의 학생이 있습니다.
여기서 `학생 수`와 각 `학생 점수`를 의미하는 변수를 생성해야겠죠.
 
✔️ 학생 수는 학급 전체의 학생 수를 의미하기에 학급의 모든 학생이 같이 알아야 하는 정보입니다.
👉 클래스 변수는 static으로 선언되며, 클래스의 모든 인스턴스가 동일한 값을 공유합니다.
따라서, 학급 전체 학생 수와 같은 데이터는 클래스 변수로 선언하는 것이 적합합니다.
이렇게 하면 모든 학생 객체가 동일한 학생 수 정보를 참조하게 됩니다.
 
✔️ 학생의 점수는 각 학생마다 개별적으로 정보를 가지므로 학생마다 변수 값이 달라집니다.
👉 인스턴스 변수는 객체마다 독립적인 값을 가지며, 각 객체가 자신의 상태를 유지할 수 있게 합니다.
학생 점수와 같이 객체마다 달라야 하는 데이터는 인스턴스 변수로 선언하는 것이 적합합니다.
 

2️⃣ 멤버 변수 - 선언 및 초기화

전체 학생 수를 의미하는 totalStudent는 클래스 변수이고 score는 각 학생별 점수를 뜻하는 인스턴스 변수로 생성해주고 초기화 해줍니다.

이때 중요한 점은 멤버 변수들은 main 밖에 선언해야됩니다!

public class Student {
    /* 클래스 변수와 인스턴스 변수는 이 공간에 작성합니다. */
    static int totalStudent = 30; // 클래스 변수
    int score = 0; // 인스턴스 변수
    
    public Student(int score) { // 생성자
           this.score = score;
    }
}

 

3️⃣ 멤버 변수 - 접근 방법

저는 또 다른 클래스 파일을 만들어 완전히 외부에서 접근할 수 있도록 해주었는데요. 접근 할 때에는 main안에 아래와 같이 작성해줍니다.

✔️ 클래스 변수 : `클래스이름.클래스변수`
✔️ 인스턴스 변수 : `객체.인스턴스변수`

public class OuterClass {
    public static void main(String[] args) {
        // 클래스 변수는 클래스 이름을 통해 직접 접근할 수 있습니다.
        System.out.println("전체 학생 수: " + Student.totalStudent);

        // 인스턴스 변수는 객체를 생성한 후 객체를 통해 접근해야 합니다.
        Student student1 = new Student(90);
        Student student2 = new Student(80);
        Student student3 = new Student(70);

        System.out.println("학생 1의 점수: " + student1.score);
        System.out.println("학생 2의 점수: " + student2.score);
        System.out.println("학생 3의 점수: " + student3.score);
    }
}

 
이상으로 이번 포스팅에서는 멤버 변수의 두 가지 종류인 클래스 변수와 인스턴스 변수에 대해 살펴보았는데요. 자바 공부를 하면서 멤버 변수라는 말 자체를 많이 들어보았는데 확실하게 정리해보는 시간을 가질 수 있었습니다. 그러면 다음 시간에 찾아뵙겠습니다.

📝 부트캠프 회고

1️⃣ 잘했던 점
부트캠프에서 배웠던 내용을 활용해 학급 성적 관리 프로그램 예제를 만들어 클래스 변수와 인스턴스 변수의 실질적인 사용 방법을 연습해보았습니다. 이 과정을 통해 변수의 개념이 실무에 어떻게 적용되는지 이해하는 데 도움이 되었습니다.

2️⃣ 부족했던 점
클래스 변수와 인스턴스 변수의 사용에 있어서 주의사항에 대한 설명이 부족했던 것 같습니다.
주의할 점은 인스턴스 변수는 인스턴스가 존재하는 동안만 유지되지만, 클래스 변수는 클래스가 메모리에서 제거될 때까지 유지되기 때문에 클래스 변수 사용 시 메타 데이터가 과도하게 증가하지 않도록 주의해야 합니다!

3️⃣ 향후 개선 방향
클래스 변수와 인스턴스 변수를 사용할 때 자주 발생하는 문제에 대해 조금 더 자세히 살펴보아야겠습니다.

728x90
320x100