📍 개요
◾ 클래스 변수와 인스턴스 변수의 개념과 역할을 학습해보는 시간을 가졌습니다.
◾ 학급 성적 관리 프로그램 예제를 통해 멤버 변수의 실질적인 사용 방법을 실습했습니다.
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️⃣ 향후 개선 방향
클래스 변수와 인스턴스 변수를 사용할 때 자주 발생하는 문제에 대해 조금 더 자세히 살펴보아야겠습니다.
'☕ JAVA' 카테고리의 다른 글
[📖JAVA] 클래스 구성 요소(필드 생성자 메소드)와 객체 비교 (0) | 2024.09.05 |
---|---|
[📖JAVA] 불변 객체 참조형 변수와 사이드 이펙트 (0) | 2024.09.05 |
[🥸JAVA] 자바 조건문(if, switch)과 반복문(for, while) 정리 (0) | 2024.09.04 |
[🥸JAVA] 실무에서 자주 사용하 자바 연산자 종류(➰단항, 이항, 삼항!) (0) | 2024.09.03 |
[🥸JAVA] 자바 자동/강제 타입 변환, 문자열 숫자 변환(➰parseInt, valueOf 메서드) (2) | 2024.09.02 |