21일 차 - 클래스 변수, Static 함수의 특성 (23.01.25)

yvonne·2023년 1월 25일
0

📂Java

목록 보기
21/51
post-thumbnail

1. 자바의 메모리 영역을 3가지로 나누고, 해당 영역에 들어가는 정보를 말하여 보시오.

메서드 영역 (Method Area): 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보와 같은 각종 필드 정보들과 메서드 정보, 데이터 Type 정보, Constant Pool, static변수, final class 등이 생성되는 영역

힙 영역 (Heap Area): new 키워드로 생성된 객체와 배열이 생성되는 영역

  • 주기적으로 가비지 컬렉터(garbage collector)가 제거하는 영역

스택 영역 (Stack Area): 지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역



2.클래스(Static) 변수의 활용의 예를 드시오.

  • 클래스 변수는 공유하기 위한 변수이기 때문에 인스턴스 별로 가지고 있을 필요가 없는 변수에 선언

  • 값의 참조가 목적인 변수

  • 값의 공유가 목적인 변수

  • 그 값이 외부에서도 참조하는 값이라면 public으로 선언

 <<Math.PI>>

public static final double PI = 3.14159265358979323846;
  • 이 값은 변하지 않기 때문에 인스턴스 생성 마다 각각의 메모리 공간을 잡을 필요 X



3.클래스 함수의 활용의 예를 드시오.

class NumberPrinter {
	private int myNum = 0;

	static void showInt(int n) {
		System.out.println(n);
	}

	static void showDouble(double n) {
		System.out.println(n);
	}

	void setMyNumber(int n) {
		myNum = n;
	}

	void showMyNumber() {
		showInt(myNum);
	}

}
public class ClassMethod {

	public static void main(String[] args) {

		NumberPrinter.showInt(20);
		NumberPrinter np = new NumberPrinter();
		np.showDouble(3.15);
		np.setMyNumber(75);
		np.showMyNumber();
	}

}



4.Static 함수에 인스턴스 변수와 함수가 올수 없는 이유는?

  • 메모리 생성 시기가 다르기 때문이다.

  • Static은 클래스가 가장 먼저 스캔되어 method area에 메모리 방이 생성되는데 인스턴스 변수는 객체 생성 후에 메모리 공간이 할당되므로 아직 메모리 할당이 되지 않은 변수를 사용하는 것은 불가능

  • static함수는 stiatc 변수를 사용 해야 한다. (static변수를 컨트롤 하는 것은 static함수)




5.인스턴스 함수안에 Static 변수와 함수가 올수 있는 이유는?

  • 반면에 인스턴스 함수는 static, 인스턴스 변수 모두 사용할 수 있다.
  • static변수가 메모리에 먼저 올라와 있기 때문에(메모리 생성 시기가 인스턴스 변수보다 빠름) 호출 가능
profile
개발 연습장

0개의 댓글