[자바/JAVA] 자바의 변수종류 (멤버변수 vs 지역변수, 인스턴스멤버 vs 정적멤버)

박정현·2023년 8월 6일
0

🏠자바의 기초완성

목록 보기
13/23
post-thumbnail
post-custom-banner

자바의 변수 종류

1) 지역변수

지역변수는 메소드 내부에서 선언되어 사용되는 변수를 말한다, 메소드 내부에서 선언된 변수는 메소드 내부에서만 사용이 가능하다. 해당 메소드를 벗어나거나 메소드 실행이 끝나면 메모리에서 사라진다.

지역변수는 초기화하지 않으면 자동으로 해당타입의 기본값으로 초기화된다.

public static void main(String[] args) {
	String name = "김사과"; 
	int age= 20;
	Stirng address; // null로 초기화된다.
}

main메소드안에 변수 name과 phone, address을 선언했으므로 지역변수이다.


2) 멤버변수

클래스 영역에서 선언된 변수를 멤버변수라고 한다. 이때 static이 붙으면 클래스멤버, static이 붙지 않으면 인스턴스 멤버이다. 멤버변수는 클래스멤버와 인스턴스멤버를 통칭하는 말이다.

멤버변수를 필드, 소속변수, 클래스변수, 속성변수라고도 부른다.

멤버변수를 제외한 나머지 변수들은 모두 지역변수이며, 멤버변수 중에서 static이 붙으면 클래스변수, static이 붙지 않으면 인스턴스 변수로 나뉜다.

class A {
	// 클래스 영역
	String name; // 멤버변수, 인스턴스멤버
	static int age; // 멤버변수, 정적멤버

	void method1(){
		// 메소드 영역
		String address = "서울특별시"; // 지역변수
	}
}

① 인스턴스 멤버

멤버변수에서 static이 붙지 않는 변수를 인스턴스 멤버라고 한다. 외부에서 사용할 때 반드시 new연산자로 객체를 생성해야 접근이 가능하다. 외부에서 객체를 생성하여 인스턴스멤버를 사용하는 것을 인스턴스화, 객체화라고 한다. 객체를 생성한 후에는 객체 참조 연산자(.)를 사용해 “인스턴스명.인스턴스변수명”으로 변수를 사용할 수 있다.

  • A: 타입이 클래스임을 의미한다. A클래스는 사용자가 만든 것이므로 사용자정의함수라고 한다.
  • a1: new로 생성한 객체는 힙영역에 a1 변수는 스택영역에 저장되어 힙영역에 있는 A객체를 참조한다. a1 변수는 객체를 참조했다고 해서 객체참조변수라고 한다.
  • new: new는 객체를 생성하는 연산자이다.
  • A(): 생성된 객체의 종류를 결정한다. 객체의 기본생성자.

예제를 통해 인스턴스멤버를 선언하고 변수를 어떻게 사용하는지 살펴보자.

class A {
	String name; // 멤버변수, 인스턴스멤버
}

A a1 = new A();
a1.name = "김사과";
  • 클래스A에 인스턴스 멤버 name을 선언했다.
  • 외부에서 name를 초기화하기 위해 A객체를 new로 생성하고 객체 참조 연사자를 사용하여 name 변수를 “김사과”로 초기화했다.

① 정적멤버 (클래스 멤버)

멤버변수에서 static이 붙은 변수를 정적멤버 혹은 클래스멤버라고 부른다. 객체를 생성해야 접근이 가능한 인스턴스 멤버와는 다르게 정적멤버는 인스턴스를 생성하지 않아도 접근이 가능하다.

접근하는 방법은 “클래스명.클래스변수명’”으로 객체 참조 연산자(.)를 사용한다. static메소드는 정적멤버만 접근이 가능하지만 non-static메소드는 인스턴스멤버와 정적멤버 모두 접근이 가능하다.

예제를 통해 정적멤버를 선언하고 변수를 어떻게 사용하는지 살펴보자.

class B {
	static int age; // 멤버변수, 정적멤버
}

A.age = 20;
  • 클래스B에 static이 붙은 멤버변수 즉, 정적멤버 age를 선언했다.
  • 외부에서 age를 사용하기 위해 객체참조연산자를 이용하였고 20으로 초기화했다.



📚 Reference

신용권, 『혼자공부하는 자』, 한빛미디어(2023)

https://velog.io/@mingseok/지역변수-맴버변수

profile
개발을 개발괴발하지 않기 위한 노력
post-custom-banner

0개의 댓글