JAVA

[JAVA] static과 인스턴스(Instance)

jojelly 2021. 11. 11. 05:16
반응형

Static


static은 변수를 선언하거나 메소드를 생성할때 같이 붙여준다.

이렇게 생성한 변수는 "프로그램이 실행될 때 Java메모리에 할당되며, 이는 프로그램이 종료될 때 해제된다"

이 뜻은 해당 클래스의 객체를 생성하지 않고도 static자원에 접근이 가능하다는 뜻!

 

Calculator라는 클래스가 있다. num1이란 변수와 Add()라는 메소드를 static으로 선언하였고, num2는 static이 없다.

기본적으로 Calculator라는 클래스 내부의 자원에 접근하려면 아래처럼 해당 클래스의 인스턴스(객체)를 생성해야 한다.

하지만 static을 사용하게 되면 위와 같이 인스턴스(객체)를 생성하기 전에 메모리에 static변수가 할당되어 인스턴스를 생성하지 않아도 된다.

 

위와 같이 이미 메모리에 static변수가 할당되어 있어 인스턴스 생성없이 바로 사용/접근 할 수 있는 것이며, 이는 메모리를 통해 해당 변수를 모두가 공유하기 때문이다. 따라서 static으로 공유된 변수를 사용할때 그만큼 메모리를 따로 할당하지 않고 절약할 수 있는 것이다.

 

 

그럼 만약 num2를 Add()메소드에서 사용하려면 한다면??

"Cannot make a static reference to the non-static field num2"라는 메세지가 나온다.

해석하면 static영역에서는 non-static 필드인 num2를 사용할 수 없다고 나오며, num2를 static으로 바꾸라는 뜻이다.

 

 

인스턴스(Instance)


인스턴스란 클래스에 속하는 객체를 말한다.

예를들어 위처럼 계산기(Calculator)라는 클래스가 있고, 프로그램을 개발하며 계산이 필요한 부분에서 계산을 위해

계산기(Calculator) 객체를 생성하면 계산기(Calculator)라는 인스턴스가 생성되는 것이다.

클래스를 객체를 만들기 위한 틀이라 생각하면 되는데,

쉽게말해 피자를 만드는 과정을 예로 들겠다.

피자라는 클래스는 도우, 토핑, 소스, 재료 등 피자를 만드는데 필요한 여러가지 구성요소(멤버변수)를 가지고 있다.

여기서 만들어지는 결과물(Object)은 피자라는 객체가 되며, 만들어지는 방식에 따라 여러가지 피자(Instance)가 생성될 수 있으며

이러한 피자가 만들어지는 과정, 즉 피자를 굽는다는 행위가 '인스턴스화 하다'라고 보면 된다.

1) 피자(클래스)라는 틀에서 -> 2) 피자를 만든다(인스턴스화) -> 3) 이에 결과물로 피자(인스턴스)가 생성된다

피자를 굽는 과정에 따라 여러가지 다른 피자들이 만들어 지는데 이 피자들을 인스턴스라고 말한다.


static은 프로그램이 실행될 때 메모리 영역에 할당되므로, 인스턴스 과정(객체생성)없이 모두가 접근할 수 있는 공유자원인 것이다.

여기서 추가로 볼 것은, 모두가 접근할 수 있는 공유자원이기 때문에 static에는 this라는 내것이라는 개념이 존재하지 않는다.

 

 

참고:

https://gangnam-americano.tistory.com/20

반응형