SW공부 21일차

Guryena·2023년 1월 25일
0

CS

목록 보기
13/34

1. static 변수의 다른 용어 3가지를 말해 보시오.

static 키워드를 변수 앞에 붙이면 static 변수 라고 한다.
클래스 변수, 공유 변수 (c언어 에서는 static 변수를 정적 변수라고 함)
static 키워드가 안 붙어 있으면 인스턴스 변수이다.
(static 키워드는 함수 앞에 붙일 수 도 있다.)

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

  • 1) method area
    호출된 class(틀)의 메모리 생성, 그 안에 데이터 멤버 중 static 변수, static함수의 정보(값이 들어 있음)

  • 2) call stack
    메인함수 안에 생성되는 객체(메모리 주소를 가리킴)와 호출되는 함수들
    순차적으로 생성 되었다가 사용이 끝나면 사용이 끝나는 순서로(생성된 순서와 반대 순서) 삭제됨

  • 3) heap
    객체의 instance 변수와 메소드 정보, static 변수를 포함하고 있는 class의 주소 정보 (동일한 class의 객체이고, static 변수가 있다면 static 변수 정보는 공유: 같은 주소 공유)

3.static 변수의 접근 방법은?

class 내부 접근

  • static 변수가 선언된 class 내에서는 이름만으로 직접 접근 가능

class 외부 접근

  • private 으로 선언되지 않으면 클래스 외부에서도 접근 가능
    접근 수준 지시자가 허용하는 범위에서 접근 가능
  • class 또는 instance의 이름을 통해 접근
    way.num++; 과 같이 instance 이름으로 접근하는 경우는 static변수에 접근하는지, instance 변수에 접근하는지 저 문장만 보고 파악하기 어렵다.

    하지만 AccessWay.num++; 처럼 class 이름으로 접근하면 static변수에 접근한다는 것을 문장만 보고도 알 수 있다.(class 이름은 첫 문자 대문자이기 때문에)

    그래서 instance 이름으로 static변수에 접근하는 것 보다는 class 이름으로 접근하는 것이 더 좋은 방법이다.

4.클래스 변수의 활용의 예를 드시오.

공유변수이기 때문에 공유가 중요하다.

instance 별로 가지고 있을 필요가 없는 변수 → static 변수 선언이 좋다.

값의 참조가 목적인 변수, 값의 공유가 목적인 변수
그리고 그 값이 외부에서도 참조하는 값이라면 public으로 선언한다.

1) Math.PI

public static final double PI = 3.14159265358979323846;

값의 공유가 목적

2) 이 값은 변하지 않기 때문에 instance 생성 시마다 각각 instance 별로 이 값을 가지기 위한 메모리 공간을 잡을 필요가 없다. 효율적으로 메모리 공간을 활용하기 위해서는 이런 변수들은 static 선언을 해 줄 필요가 있다.

static 붙이면 class에 속하는게 아님 (class에서 자리만 빌려 옴):

사실 C언어에서 온거라 객체지향에서는 맞지 않는 표현이긴 함

5.static 함수에 instance 변수가 올 수 없는 이유는?

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

static 함수는 instance 생성이 없어도 class가 스캔 되면서 이미 method area에 메모리 방이 만들어 질 수 있다. instance 변수는 new를 통해서 객체가 만들어져야 변수에 대한 메모리 공간 할당이 가능하다.(그래서 instance 변수임) static 함수는 객체 생성 없이 바로 사용이 가능하다는 점을 볼 때 아직 객체가 생성되지 않아 메모리 할당이 안된 변수를 사용하는 것은 불가능 하기 때문이다. 즉, static함수는 stiatc 변수를 사용 해야 한다. (static변수를 컨트롤 하는 것은 static함수이다.

반면에 instance 함수는 static, instance 변수 모두 사용할 수 있는데, static변수가 메모리에 먼저 올라와 있기 때문에(메모리 생성 시기가 빠름) 호출할 수 있는 것이다.

6.instance 함수안에 스태틱 변수와 함수가 올수 있는 이유는?

  • instance 함수는 static, instance 변수와 함수를 모두 사용할 수 있는데, static이 메모리에 먼저 올라와 있기 때문에(메모리 생성 시기가 빠름) 당연히 둘 다 호출할 수 있다.

    static은 스캔되면 바로 메모리 방을 생성하지만 instance 변수나 함수는 객체가 생성되어야 메모리가 할당된다.

0개의 댓글