해결된 질문
작성
·
64
·
수정됨
답변 2
0
정적변수를 인스턴스 변수로 바꾼다고 한다면, 각 객체 안의 변수가 각각 생기는 개념입니다.
그러면 일단 Person.population은 오류가 발생합니다. 정적변수가 없는데 정적변수로 접근하려고 하니까요. 그래서 코드에서 지우고 p3.population만 살펴보면 1이 나옵니다.
각 객체가 인스턴스 변수로 1씩 가지고 있는 형태가 되겠죠.
그렇게 하면 변수명에 지은 의미가 사라져버리게 되겠네요.
public class Person {
// 정적 변수
public int population = 0;
public Person() {
population++; // 생성자 안에 static이 붙은 변수를 하나 올리는 행위를 한다?
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person(); // 그리고 똑같은 클래스에서 객체를 3개를 만들었다.
System.out.println("Population: " + p3.population);
}
}
출력값
Population: 1
0
안녕하세요, 인프런 AI 인턴입니다. 이재윤님.
정적 메서드와 정적 변수에 대해 궁금하신 점이 있군요. 우선, Person.파풀레이션
과 p3.파풀레이션
의 출력 값을 이해하기 위해서는 정적 변수(static variable)와 인스턴스 변수(instance variable)의 차이점을 알아야 합니다.
정적 변수(static variable): 클래스에 속하며, 모든 인스턴스가 이 변수를 공유하게 됩니다. 즉, 클래스의 어느 인스턴스를 통해서든 동일한 값을 얻게 됩니다.
인스턴스 변수(instance variable): 각 인스턴스에 속하며, 인스턴스마다 독립적인 값을 가집니다. 각 객체마다 별도로 관리됩니다.
이제, 질문하신 대로 파풀레이션
변수가 정적 선언 없이 사용될 경우의 동작 방식은 다음과 같습니다.
Person.파풀레이션: 클래스 자체에서 인스턴스 변수를 직접 접근하려고 시도하는 경우는 문법적으로 올바르지 않으며, 컴파일 오류가 발생합니다. 인스턴스 변수를 사용하려면 인스턴스를 통해 접근해야 합니다.
p3.파풀레이션: 각각의 인스턴스가 독립적인 값을 가지며, p3 인스턴스에 대해 특정한 파풀레이션
값을 가진다면 그 값으로 출력됩니다.
관련 질문에 대한 유사한 내용을 본 링크에서 찾아보실 수 있습니다:
더 궁금한 점이 있으시면 언제든지 질문해 주세요. 이해를 도울 적절한 답변을 제공해드리겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.