web/JAVA & Spring

[JAVA] 혼자 공부하는 자바 인스턴스 멤버와 정적 멤버

3hoon 2022. 11. 29. 10:26

인스턴스 멤버란 객체마다 가지고 있는 멤버

정적 멤버란 클래스에 위치시키고 객체들이 공유하는 멤버

필드를 선언할 때는 객체마다 가지고 있어야할 데이터인지 

객체마다 가지고 있을 필요가 없는 공융데이터인지 구분할 필요가 있다.

이때 구분에 따라 인스턴스 멤버와 정적 멤버를 구분해 선언할 수 있다.

ex) 계산기의 색상 : 인스턴스 멤버 / 계산기의 파이값(3.14159...) : 정적 멤버

 

 

 

인스턴스 멤버

인스턴스 멤버는 객체를 생성한 후 사용할 수 있는 필드와 메소드라고 하는데

이를 인스턴스 필드, 인스턴스 메소드라고 부른다.

인스턴스 멤버는 꼭 위 사진과 같이 객체를 생성해야만 사용할 수 있는 특징이 있다.

 

this

 

객체 외부에서 인스턴스 멤버에 접근하려 할때 매개 변수와 가지고 있는 변수의 이름이 같은 경우

이를 구분하기 위해 자신의 변수에 this를 사용 할 수 있다.

즉 this는 어떠한 특정한 기능이 있는 것이 아닌 자신이 가지고 있는 필드를 표시하는 기능으로

생성자와 메소드의 매개 변수이름이 동일할 경우 이를 명시하기 위해 사용한다.

 

정적 멤버

 

정적 멤버는 고정된 이라는 의미로 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.

이 정적 멤버는 static이라고도 부르며 클래스에 위치하면서 객체들이 static을 공유하는 특징이 있다

 

하지만 객체를 생성하지 않고 사용할 수 있다는 특징 때문에

정적 멤버는 this 키워드를 사용할 수 없으며 정적 메소드 안에서 인스턴스 필드나 인스턴스 메소드를

사용할 수 없다. 

 

싱글톤

 

정적 멤버(static)을 사용할 때 주의 할 점

많은 static의 사용은 성능 저하를 불러올수 있다

프로그램이 끝날때까지 static의 값은 유지되기 때문이다.

그러면 어떻게 사용해야 할지 정리해보자면

 

1. 모든 인스턴스에 공통적으로 사용해야 하는 것에 static을 붙인다.

  - 위 코드의 width height affiliation같이 공통적으로 값이 유지되어야 하는 경우엔 static을 붙인다.

2. 대신 static의 값을 변경하면 모든 값이 변경된다. 모두 공유되기 때문이다.

3. 메소드 내에 다른 인스턴스 변수를 사용하지 않는다면 static을 붙이는 것이 좋다.

  - static 자체가 이미 메모리에 할당되어 있기에 그것만 가져오면 되기 때문에 효율이 높아진다.

4. static메서드는 인스턴스 변수를 사용할 수 없기때문에 모든 것에 static을 붙이는 것은 비효율적이다