인스턴스 멤버
- 객체(인스턴스)마다 가지고 있는 필드와 메서드
- 이들은 각각 인스턴스필드, 인스턴스 메서드라고 부른다
객체가 생성된 후에 사용할 수 있는 객체 소속 멤버
- 인스턴스 멤버는 객체에 소속된 멤버이기 때문에 객체가 없이 사용이 불가능하다
- this
객체(인스턴스) 자신의 참조(번지)를 가지는 키워드
객체 내부에서 인스턴스 멤버임을 명확히 하기 위해 this.사용
매개변수와 필드명이 동일할 때, 인스턴스 필드임을 명확히 하기 위해 사용
정적멤버와 static
- 정적(static)멤버란?
1) 클래스에 고정된 필드와 메서드 - 정적필드, 정적 메서드
객체의 공유메모리, 클래스 소속멤버
객체생성없이 사용 가능 ex)클래스명.정적멤버 = 데이터;
2) 정적멤버는 클래스에 소속된 멤버
- 객체 내부에 존재하지 않고, 메서드 영역에 존재
- 정적 멤버는 객체를 생성하지 않고 클래스로 바로 접근해서 사용
- 정적 멤버 선언
1) 필드 또는 메서드 선언할 때, static 키워드를 붙인다
class 클래스명{
static 타입 필드;
static 리턴타입 메서드명(매개변수){}
}
cf) 클래스를 통해서 만들어지는 객체들은 다른 주소에 실제 메모리를 가지고 사용한다.
객체의 static 변수는 특정한 클래스에서 생성된 객체에서 동일하게 사용할 수 있다. 객체가 공유하는 필드이기에 class 변수라고 한다.
참조변수.static변수 ==> 클래스명.static변수
Building.drawingPay=3000000; // 객체 생성전에 클래스명.static변수로 사용가능
class Building{
String loc; // instance변수 - 위치
int siteCost; // instance변수 - 부지비용
static int drawingPay; // static변수 - 도면비용
public Building(String loc,int siteCost) {
this.loc=loc;
this.siteCost=siteCost;
}
void showInfo() {
System.out.println(loc+"에 있는 타워");
System.out.println("도면비용: "+drawingPay);
System.out.println("부지비용: "+siteCost);
}
}