본문 바로가기

Java/문법

7-1장 필드

1. 필드와 지역 변수의 구분

 

 - 필드(filed)

  - 클래스에 포함된 변수 

  - 객체의 속성값 지정 

  - 힙 메모리의 객체 내부 생성

  - 힙 메모리의 객체 안에 저장되는 필드는 객체가 사라지지 않는 한 절대로 삭제되지 않음

 

 - 지역 변수 

  - 메서드에 포함된 변수 

  - 스택 메모리에 생성

  - 자신이 선언된 메서드의 중괄호가 닫혀 메서드가 종료되면, 그 메서드 안에 선언된 모든 지역 변수가 메모리에서 통째로 삭제

 

class A {
	int m  =3;  //상위 중괄호가 클래스일때는 필드 
    int n = 4;
    void work1(){
    	int k=5; //상위 중괄호가 메서드일 때는 지역변수 
        System.out.println(k);
        work2(3);
    }
    
    void work2(int i) { //상위 중괄호가 메서드일 때는 지역변수
    	int j =4;
        System.out.println(i+j);
    }
 }

 - 클래스 A에는 필드 m,n과 메서드 work1(), work2() 존재

 - work1()메서드 안에서는 지역변수 k를 선언해 사용

 - work2()메서드 에서는 지역 변수 i와 j를 선언해 사용

A a = new A();
System.out.println(a.m); //3
System.out.println(a.n); //4
a.work1(); //5->7

 - 힙 메모리에 클래스 A의 객체 생성

 - 객체 안에는 필드 m,n과 메서드 work1(), work2() 가 저장

 - 참조 변수 a에는 객체의 위칫값 저장

 - work1()메서드가 호출되면  work1() 메서드 안에 정의된 지역변수 k가 스택 메모리에 저장(int k =5) , 

 - work1() 메서드 안에서 work2()메서드가 호출되면 work2() 메서드 안에 정의된 지역변수 i,j가 스택 메모리에 저장(int i =3, int j =4)

 -프레임(frame) : 정의된 메서드의 중괄호에 해당하는 범위

 - 해당 메서드의 실행이 종료되면 자바 가상 머신은 해당 메서드의 프레임을 통째로 삭제 

 - work2()가 완료되면 work2()프레임이 모두 삭제되며, work1()메서드도 완료되면 work1() 프레임도 삭제 

 

package createobject;

//클래스 생성
class A {
	int m = 3; //필드
	int n = 4;  //필드
	void work1() {
		int k=5; //지역 변수 
		System.out.println(k);
		work2(3); //work2()안에 정의된 지역 변수를 스택 메모리에 추가 
	}
	void work2(int i) { //인수를 변수 i에 대입해 입력매개변수로 활용
		int j =4;
		System.out.println(i+j);
	}
}
public class create0bject_2 {
	public static void main(String[] args) {
		//클래스로 객체 생성
		A a = new A();
		//필드 값 출력
		System.out.println(a.m);
		System.out.println(a.n);
		//메서드 호출
		a.work1(); //work1()안에 정의된 지역변수를 스택 메모리에 추가 
	}
}

 

2. 필드와 지역 변수의 초깃값

 

 - 필드 

  - 직접 초기화 하지 않아도 강제로 초기화

  - 힙 메모리에는 빈 공간이 저장될 수 없기 때문에 힙 메모리에 위치하는 필드는 강제로 초기화 

 

 - 지역 변수 

  - 직접 초기화 하지 않으면 저장 공간이 빈 공간 그대로 있어 값을 출력하고자 할때 오류 발생

  - 스택 메모리는 강제로 초기화되지 않음

 

package createobject;

//클래스 정의
class A {
	boolean m1;
	int m2;
	double m3;
	String m4;
	void printFieldValue() {
		System.out.println(m1);
		System.out.println(m2);
		System.out.println(m3);
		System.out.println(m4);
	}
	void printLocalVariable() {
		int k;
		//System.out.println(k); 지역 변수를 초기화 하지 않아 오류 발생
	}
}
public class createobject_3 {
	public static void main(String[] args) {
		//클래스를 활용해 객체 생성
		A a = new A();
		//객체 활용
		a.printFieldValue();
		
	}
}

'Java > 문법' 카테고리의 다른 글

8-1장 패키지와 임포트  (0) 2023.04.24
7-4장 this 키워드와 this() 메서드  (0) 2023.04.24
7-3장 생성자  (0) 2023.04.24
7-2장 메서드  (0) 2023.04.24
6-2장 객체의 생성과 활용  (0) 2023.04.24