자바의 정석

인스턴스 멤버와 정적 멤버

야생늑대 2022. 4. 15. 20:44
반응형

▶ 객체마다 필드값이 달라야 한다면 해당필드는 객체마다 가지고 있는것이 맞다.

  하지만 객체마다 사용하는 필드값이 같은 경우 객체마다 가지고 있게되면 메모리 낭비이며,

  필드 값을 같게 맞추는 추가적인 작업이 필요할 수도 있다.

  그래서 자바에서는 필드를 클래스 한 곳 에 위치시키고 객체들이 공유할 수 있도록하는 정적멤버와   필드를 객체마다 가지고 있는 인스턴스 멤버를 구분해서 선언할 수 있도록 하고 있다.

 

①인스턴스멤버와 this

 객체를 생성한 후 사용 할 수 있는 필드와 메소드. (객체에 소속된 멤버이기 때문에 객체없이는 사용 할 수 없다.)

 

  인스턴스 멤버 선언

인스턴스 멤버이기 때문에 외부클래스에서 사용하기 위한 객체생성 필요

Car객체 (myCar)    Car객체 (yourCar)
gas : 10  gas :20

 위 코드를 실행하면 인스턴스 필드(gas)는 객체 마다 따로 저장되고  인스턴스 메소드 setSpeed()는 메소드 영역에

   저장되고 공유된다.

▶메소드는 코드블록이므로 객체마다 동일한 코드 블록을 가지고 있을 필요가 없기 때문이다.

▶그런데도 인스턴스 메소드라는 용어가 붙은 이유는 메모리블록 내부에 인스턴스 필드등이 사용되는 경우도

    있기 때문이다.


this 

객체 내부에서 인스턴스멤버에 접근하기 위해 사용한다.

내가 자신을 '나' 라고 가리키듯이 객체는 자신을 this 라고 한다.

 

↑위의 코드처럼 생성자나 메소드의 매개변수의 이름이 필드와 동일한 경우, 인스턴스 멤버인 필드임을 명시하고자

할 때 사용된다.  ( ※ 매개변수는 일반적으로 필드이름과 같도록 작성한다. 그런데 이렇게 되면 매개변수가 우선순위가 더높기때문에 메소드내부에서 필드에 접근할 수 없다. 그래서 this. 연산자를 사용한다.)

 


② 정적멤버와 static

▶클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.

(정적 필드, 정적 메소드)

정적 멤버 선언

public class 클래스{	
    //정적 필드
	static 타입 필드 [ =초기값];

	//정적 메소드
    static 리턴 타입 메소드 (매개변수선언, ...) { .... }
    }

▶클래스에 고정된 멤버이므로 클래스(바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스 별로 관리된다.

따라서 클래스의 로딩이 끝나면 바로 사용할 수 있다.

 

필드와 메소드를 선언할 때 정적필드로 선언할 것인지, 인스턴스 필드로 선언할 것인지의 판단기준이 필요하다.

 

 

정적 필드 - 변하지않는 공용(공통된)데이터 

인스턴스 필드 - 객체마다 다른 값으로 사용되어져야하는 데이터 

 

인스턴스 메소드 - 인스턴스 필드를 포함하는 있는 메소드

정적 메소드 - 인스턴스 필드를 포함하고 있지않은 메소드

 

정적 멤버 사용

클래스.필드;

클래스.메소드(매개값, ...)

 

 

메소드내에서 인스턴트 변수 사용불가.

iv가 필요없다는 것은 객체가 필요없다는 것

im,iv 사용 안하는 메소드에 static을 붙인다.

 

static 메소드는 static 메소드 호출가능

왜 static 메소드는 인스턴스멤버를 쓸수 없나? static메소드 호출 시 객체(iv묶음) 가 없을수도 있어서

 

둘의 차이점 iv를 사용하냐 안하냐.     객체는 iv(인스턴스 변수)의 묶음!

 

 static 를 붙일지 말지를 결정할 줄 알아야 한다. 

  메소드를 만들었으면  static 를 붙일지 말지를 결정해줘야한다.

iv를 사용하지않을 때 사용  -  

 

 

 

 

반응형

'자바의 정석' 카테고리의 다른 글

매개변수의 다형성  (0) 2022.08.22
상속  (0) 2022.05.23
메소드 Method  (0) 2022.04.12
생성자 Constructor  (0) 2022.04.12
필드 Field  (0) 2022.04.11