클래스멤버 - 인스턴스변수(필드)/인스턴스 메소드
인스턴스 필드(변수)
static으로 선언되지 않은 모든 변수(필드)는 인스턴스필드
public double r;
클래스의 인스턴스와 연관, 생성된 모든 객체는 자신만의
복사본을 가진다.
클래스 내부에서 이름하나만으로 지칭된다.
public double r;
public double area() {
return PI * r * r;
}
클래스 외부에서는 클래스를 인스턴스화한 객체.변수명 형
태로 사용한다. 인스턴스 필드(변수)의 값은 한객체를 다른
객체와 구분한다.
Circle c = new Circle(); c.r=2.0;
Circle c1 = new Circle(); c1.r=5.0;
인스턴스 메소드
static으로 선언되지 않은 모든 메소드
public double area();
클래스의 인스턴스(객체)와 연관된다.
static이든, 아니든 모든 클래스멤버 사용가능
클래스 외부에서는 클래스를 인스턴스화한 객체.메소드명 형태로 사용한다.
인스턴스 필드(변수)의 값은 한객체를 다른객체와 구분한다.
Circle c = new Circle(); c.r=2.0;
double a = c.area(); //객체 c에는 이미 r 값이 setting됨
- 매개변수가 없는 c.area()가 어떤 데이터에 대해 수행될건지 어떻게 아는가? 사실 모든 인스턴스 메소드는 암시적인 this 매개변수를 가지고 실행된다. This는 메소드가 호출되는 객체(Circle)이다. This 매개변수는 항상 필요하지는 않기에 메소드 시그네쳐에 보이지 않는다.
메소드가 그자신의 필드(변수)등을 접근한다는것을 명시적으로 this를 이용하여 지정할수 있다.
public double area() {
return Circle.PI * this.r * this.r;
}
클래스 멤버예제(Circle1.java)
class Circle {
//클래스 변수(필드), 상수정의
public static final double PI = 3.141592;
//클래스 메소드
public static double radianToDegree(double rads) {
return rads * 180 / PI;
}
//인스턴스 필드(변수), 원의반지름
public double r;
//인스턴스 메소드, 원의 면적계산
public double area() { return PI * r * r; }
//인스턴스 메소드,원주계산
public double circumference() { return 2 * PI * r; }
}
public class Circle1 {
public static void main(String[] args) {
Circle c = new Circle();
c.r = 4.0;
//인스턴스 메소드 이용
System.out.println("반지름이 4인 원의 면적은 : " + c.area());
System.out.println("반지름이 4인 원의 원주는 : " + c.circumference());
//클래스 메소드및 클래스변수(필드) 이용
System.out.println("2 * PI의 Degree는 : " +
Circle.radianToDegree(2.0*Circle.PI) + "도 입니다.");
}
}