Java

멤버 변수

hs_developer 2022. 5. 24. 23:41

 

멤버 변수는메소드 밖에서 선언된 변수를 말한다. 메소드 안에서 선언된 변수는 지역 변수라 한다.

 

 

 

 

멤버 변수의 구성

[public/private/protected] [static/final] 변수 타입 변수명;

 

멤버 변수 선언

int a;
public int b;
private MyClass myclass;

 

선언과 초기화, 생성을 같이 할 수 있는데 다음과 같다.

public int b=0;
private MyClass myclass = new MyClass();

 

 

접근 제어 한정자 Access control modifier - 멤버 변수

 

public

:: 모든 클래스에서 접근 가능하다

 

private

:: final은 한 번 선언되면 변경이 불가능하다.

 

protected

:: public과 default의 중간 쯤 된다. 같은 패키지 내에서는 default와 같이 접근 제한이 없지만, 다른 패키지에서는 자식 클래스만 접근 허용한다. 

:: 멤버변수, 생성자, 메소드에서만 사용 가능하다.

 

접근 한정자 사용 안 함

:: 같은 패키지 내의 클래스에서만 접근 가능하다.

 

 

객체 변수 

1. 객체 속성 변수

:: 기본 자료형(int, float, char, byte)의 값을 가지는 변수

public int b;

 

2. 객체 참조 변수

:: 생성된 객체를 지정하는 변수

:: 객체에 대한 참조 (reference) 즉, 객체가 생성 저장된 주소를 갖는다.

private MyClass myclass;

 

 

클래스 변수 - static 키워드

 

:: 클래스 변수는 정적 변수라고도 한다.

:: static으로 선언하고 전역 변수(global variable)의 개념을 가진다.

:: 그 클래스로부터 생성된 모든 객체들이 하나의 클래스 변수를 공유한다.

:: 일반 변수와 달리 객체 이름을 통해 접근 불가하고 클래스 이름을 통해 접근한다.

 

Static 키워드를 통해 생성된 정적 멤버들은 Heap 영역이 아닌 Static 영역에 할당된다. Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점이 있지만 Garbage Collector의 관리 영역 밖이기에 Static 영역에 있는 멤버들은 프로그램 종료 시까지 메모리가 할당된 채로 존재한다. 때문에, Static을 너무 남발하면 만들고자 하는 시스템 성능에 악영향을 줄 수 있다.

 

 

정적 필드 사용 예시

 

1.

1
0
class Number
{
	static int num1=0;
	int num2=0;
}


public class Static {

	public static void main(String[] args) {
		
		Number number1 = new Number();
		Number number2 = new Number();
		
		number1.num1++; // 같은 메모리
		number1.num2++; // 다른 메모리
		
		System.out.println(number2.num1); // 같은 메모리
		System.out.println(number2.num2); // 다른 메모리
	}

 

 

2.

내 이름은 가가
내 이름은 나나
class Name
{
	static void print() {
		System.out.println("내 이름은 가가");
	}
	
	void print2() {
		System.out.println("내 이름은 나나");
	}
		
	
}

public class Static{
	
	public static void main(String[] args) {
		
		Name.print(); // static 변수는 인스턴스 생성하지 않아도 호출 가능
		
		Name name = new Name(); // 인스턴스 생성
		name.print2(); // 인스턴스 생성해야만 호출 가능
		
	}
}

 

final 변수

:: final 변수 지정해 선언 시 변할 수 없는 상수 값을 가진다.

:: final 변수는 단 한 번 초기화 가능하며 그 후는 값을 변경할 수 없다.

:: 변수 이름은 주로 대문자를 사용한다.

 

 

참고

https://ji-gwang.tistory.com/123