non - static member
- 공간적 특성 - 멤버들은 객체마다 독립적으로 별도 존재(인스턴스 멤버)
- 시간적 특성 - 필드와 메소드는 객체 생성 후 비로소 사용 가능
- 비공유 특성 - 멤버들은 다른 객체에 의해 공유되지 않고 배타적이다.
static member
- 공간적 특성 - static 멤버들은 클래스 당 하나만 생성(클래스 멤버)
- 시간적 특성 - static 맴버들은 클래스가 로딩될 때 공간 할당, 객체를 생성하지 않고 사용가능하다.
- 공유의 특성 - static 멤버들은 동일한 클래스의 모든 객체에 의해 공유
difference of non - static member and static member
static member의 활용
1. 전역 변수와 전역 함수를 만들 때 활용할 수 있다.
- Math클래스: java.lang.Math, 모든 필드와 메소드가 public static으로 선언, 다른 모든 클래스에서 사용할 수 있다.
2. 공유 멤버를 작성할 때
- static 필드나 메소드는 하나만 생성해서 클래스의 객체를 공유한다.
static 메소드의 제약 조건
- static 메소드는 non - static 멤버에 접근할 수 없다. 객체가 생성되지 않은 상황에서도 static 메소드는 실행될 수 있기 때문에, non - static 메소드와 필드 사용이 불가능하지만 non - static 메소드는 static 멤버를 사용할 수 있다.
- static 메소드는 this 사용이 불가능하다. static 메소드는 객체가 생성되지 않은 상황에서도 호출이 가능하므로, 현재 객체를 가리키는 this 레퍼런스는 사용할 수 없다.
final 클래스와 메소드
final 클래스 - 클래스 상속 불가능
final class FinalClass {
....
}
class SubClass extends FinalClass { // 컴파일 오류. FinalClass 상속 불가능
....
}
final 메소드 - 오버라이딩 불가능
public class SuperClass {
protected final int finalMethod() { ... }
}
class SubClass extends SuperClass { // SubClass가 SuperClass 상속
protected int finalMethod() { ... } // 컴파일 오류, 오버라이딩 할 수 없음
}
final 필드
상수 선언, 선언 시 초기 값을 지정해야 한다. 상수 필드는 실행 중에 값을 변경할 수 없다.
class SharedClass {
public static final double PI = 3.14;
}
public class FinalFieldClass {
final int ROWS = 10; // 상수 정의, 초기 값 10 설정
void f() {
int[] intArray = new int [ROWS}; // 상수 활용
'ROWS = 30;' // 컴파일 오류 발생, final 필드 값을 변경할 수 없다.
}
}
Math메소드 설명 |
|
static double random() | 0.0 이상 1.0 미만의 범위에서 임의의 double형 값을 하나 생성하여 반환함. |
static double abs(double a) static double abs(float a) static double abs(int a) static double abs(long a) |
전달된 값이 음수이면 그 값의 절댓값을 반환하며, 전달된 값이 양수이면 인수를 그대로 반환함. |
static double ceil(double a) | 전달된 double형 값의 소수 부분이 존재하면 소수 부분을 무조건 올리고 반환함. |
static double floor(double a) | 전달된 double형 값의 소수 부분이 존재하면 소수 부분을 무조건 버리고 반환함. |
static long round(double a) static int round(float a) |
전달된 값을 소수점 첫째 자리에서 반올림한 정수를 반환함. |
static double rint(double a) | 전달된 double형 값과 가장 가까운 정수값을 double형으로 반환함. |
static double max(double a, double b) static float max(float a, float b) static long max(long a, long b) static int max(int a, int b) |
전달된 두 값을 비교하여 큰 값을 반환함. |
static double min(double a, double b) static float min(float a, float b) static long min(long a, long b) static int min(int a, int b) |
전달된 두 값을 비교하여 작은 값을 반환함. |
static double pow(double a, double b) | 전달된 두 개의 double형 값을 가지고 제곱 연산을 수행하여, ab을 반환함. |
static double sqrt(double a) | 전달된 double형 값의 제곱근 값을 반환함. |
static double sin(double a) static double cos(double a) static double tan(double a) |
전달된 double형 값에 해당하는 각각의 삼각 함숫값을 반환함. |
static double toDegrees(double angrad) | 호도법의 라디안 값을 대략적인 육십분법의 각도 값으로 변환함. |
static double toRaidans(double angdeg) | 육십분법의 각도 값을 대략적인 호도법의 라디안 값으로 변환함. |