-> 각 인스턴스 객체별로 독립적으로 가지고 있는 변수
-> 클래스 이름 기준 전체 1개만 존재하는 변수
-> 객체 생성 필요없이 클래스 이름만 가지고 접근 및 호출이 가능
//new 안해도 사용 가능!!
-> 정적 멤버 변수/메소드에서는 인스턴스 멤버 변수/메소드를 호출할 수 없다.
(이미 태어난 입장에서 아직 태어나지도 않은 놈들한테 접근이 안된다)
인스턴스 -> 인스턴스 o
인스턴스 -> 정적(static) o
정적 -> 인스턴스 x
정적 -> 정적 o
static double pi = 3.14; //정적(static) 멤버 변수
String color; //인스턴스 멤버 변수
void powerOn() { //인스턴스 멤버 메소드
System.out.println("전원 On");
}
static double calculateCircleArea(int radius) { //원 넓이 계산
//반지름 * 반지름 * 3.14
double area = radius * radius * pi;
return area;
}
void printInfoInstance() { //인스턴스 메소드
powerOn(); //인스턴스 메소드
System.out.println("컬러 계산기" + color);//인스턴스 변수
}
static void printInfoStatic() {
// powerOn(); //인스턴스 메소드(태어나지않은) //정적->인스턴스x
// System.out.println("컬러 계산기" + color); //인스턴스 변수(태어나지않은) //정적->인스턴스x
calculateCircleArea(5); //static끼리는 가능
System.out.println("원주율 : " + pi); //static끼리는 가능
}
//new 생성 안하고 O 다 static변수,메소드니까!
System.out.println("static 변수 pi 값 : " + Calculator.pi);
System.out.println(Calculator.calculateCircleArea(3));
Calculator.printInfoStatic();
=> 출력
static 변수 pi 값 : 3.14
28.26
원주율 : 3.14
=> 초기값이 최종값으로 인식되는..
=> 초기값 이후에 변경 불가능!
=> 상수 : 바뀌지 않는 고정 값
static final double BANK_RATE = 2.6;
-> 상수형 변수는 대문자로! _로 단어구분
(1) public : 다 쓸수있어!
(2) protected : 같은 패키지 + 자식 클래스
(3) default : 같은 패키지에서만
(4) private : 같은 클래스에서만!
1.라이브러리 클래스 (ClassAccess)
public class ClassAccess {
//필드 //필드변수는 외부에서 접근 못하게 막아놓고
private int a;
private int b;
//메소드 //get,set은 접근할수있게 열어둔다
public int getA() { //돌려주는, 불러와
return a;
}
public void setA(int a) { //받아오는, 저장하고
if (a<0) {
this.a = 0;
return;
}
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
//생성자
public ClassAccess() { //default 접근 제한 -> 같은 패키지에서만!
}
//메소드
public void methodPublic() {
}
protected void methodProtected() {
}
void methodDefault() {
}
private void methodPrivate() {
}
}
public class ClassPackage {
ClassAccess ca = new ClassAccess();
//ca.a = 20; //필드변수 a는 private 접근 불가능
ca.setA(20); //setA 메소드는 public 접근 가능 //setA 메소드로 저장하고
ca.setA(-50); //내부 로직에 걸려서 0으로 저장
//ca.a = -50; //내가 원하는 값의 범위들만 쓰려면 변수a는 막고 set get으로만 접근!
System.out.println(ca.getA()); //getA 메소드로 불러와
ca.methodPublic(); //public은 전체공개 가능o
ca.methodProtected(); // protected 패키지 + 자식 가능o
ca.methodDefault(); // default 같은 패키지o
//ca.methodPrivate(); // private는 같은 클래스 안에서만 사용가능!!
// ClassAccess에서만 사용가능!
}
=> 내가 원하는 값의 범위들만 쓰려면 변수a는 private으로 막고 public으로 set get으로만 접근!