본문 바로가기

TIL

Day17(클래스 멤버와 인스턴스 멤버)

 클래스 멤버와 인스턴스 멤버

 

클래스 변수

인스턴스의 변수(상태)값이 인스턴스마다 다른 값을 가질 수 있다는 점은 하나의 클래스를 여러개의 인스턴스로 만들어서 사용할 수 있다는 장점입니다.. 경우에 따라서 모든 인스턴스가 같은 값을 공유하고 싶을 때가 있습니다. 이럴 때 클래스 멤버를 사용합니다.

모든 메소드에 공통적으로 들어가는 값을 인스턴스 변수로 넣게 되면 중복이 되기 때문에 메모리를 필요 이상으로 사용하게 됩니다. 그렇기에 모든 인스턴스가 공유하는 변수를 만듭니다. 이러한 역할을 하는 것이 class입니다.

ex) static double PI = 3.14;

static을 멤버(변수,메소드) 앞에 붙이면 클래스의 멤버가 됩니다.static이라는 키워드가 붙어 있으면 static 뒤에 따라오는 변수는 static한 변수가 된다는 뜻이고 static한 변수라는 뜻은 이 변수가 클래스의 소속이 된다라는 뜻 입니다. 그리고 클래스의 소속이 된다라는 뜻은 모든 메소드,모든 인스턴스에서 동일한 값으로 가져오게 됩니다. 

클래스 변수에 접근하는 방법은 인스턴스를 통해 접근하거나 클래스를 통해서 직접 접근할 수 있습니다.

class Calculator2{

static int base = 0; 

int left, right;
}

있다라고 했을 때 base라는 변수는 정수를 담을 수 있는 변수이고 기본값으로 0을 설정하고, static이 있기 때문에 변수는 Calculator2의 멤버가 됩니다.즉 , 인스턴스의 멤버가 아니고 클래스의 멤버가 됩니다

 

 

 

클래스 메소드

static이라는 키워드를 달게되면 class 소속의 메소드가 됩니다.

즉,  static이 붙어 있는 메소드는 static이 붙어 있지 않은 메소드와 다르게 우리가 class를 통해서 직접적으로 접근해서 실행할 수 있다는 차이점을 가지고 있습니다.

Calculator3.sum(10,30);

Calculator c1 = new Calculator();

c1.setOporade(10,20);

c1.sum();

인스턴스를 지정하고 setOporade를 통해서 인스턴스 변수를 10과 20을 지정하는 이유는 c1이라고 하는 인스턴스가 다른 인스턴스들과 구분되게 10,20이라는 상태를 가지고 있기 때문입니다.

서로 다른 상태를 가지고 있는 변수들이 존재해야하는 필요가 있을 경우와 각 각의 연산의 결과의 출력이나 어떠한 행위에 대한 결과가 다르게 출력되야하는 경우에는 인스턴스를 만듭니다.

 

인스턴스 변수는 클래스 변수에 접근할 수 있지만 클래스 변수가 인스턴스 변수에 접근하는 것은 불가능합니다. 쉬운 이해로는 class가 만들어진 후 인스턴스가 만들어지는데 만들어지지도 않은 인스턴스를 클래스가 접근하는건 불가능하다고 생각하면 됩니다.

 

클래스를 사용하면 인스턴스를 사용하는 것보다 메모리도 절약할 수 있고 더 빠르게 동작하는 어플리케이션을 만들 수 있습니다.

 

 

'TIL' 카테고리의 다른 글

Day19(객체 )  (0) 2023.02.20
Day18  (0) 2023.02.20
Day16(클래스,객체,인스턴스,객체 지향 )  (0) 2023.02.17
Day15(static)  (0) 2023.02.16
Day14(Layout)  (0) 2023.02.15