static 멤버의 접근 방법
1) 클래스 내부에서 자유롭게 접근
2) 클래스 이름으로 접근
3) 객체 이름으로 접근
class AccessWay{
static int num=0;
AccessWay(){
incrCnt();
}
public void incrCnt() {
num++;
}
}
public class ClassVarAccess {
public static void main(String[] args) {
AccessWay way = new AccessWay();
// 생성자 안에 있는 매서드가 호출됨(num+1)
AccessWay.num++;
// 클래스명으로 접근(num+1)
way.num++;
// 객체로 접근(num+1)
System.out.println("num = "+AccessWay.num);
}
}
위의 세가지 방법이 있지만 객체 이름 방식보다는 클래스 이름으로 접근하는 방식을 선호한다.
왜냐? static은 객체별로 생성되는 변수가 아니고 클래스에 유일하게 공유할 수 있는 변수이므로 클래스 소속으로 호출하는 것이 더 명확하다.
언제 static으로 만들어야할까?
1) 모든 객체가 동일한 정보를 공유해야할때
2) 클래스에서 바로 호출해야할 필요성이 있을때
3) 범용적인 멤버일 경우
class StudyClass {
static int schoolNum = 0;
// 학교 전체 학생수 -> 클래스에 1개만 존재하고 공유되는 정보이므로 static
int cNum = 0;
// 해당 반 학생수 -> 반마다 다른 수가 입력되므로 instance
String className;
// 해당 반 이름 -> 반마다 다른 이름이 입력되므로 instance
StudyClass(int num, String cName) {
className = cName;
cNum = num;
schoolNum += num;
}
void showStudyClassInfo() {
System.out.println(className + " : " + cNum + "명");
}
static void showSchoolInfo() {
System.out.println("학생수: " + schoolNum);
}
}
public class School {
public static void main(String[] args) {
StudyClass sc1 = new StudyClass(15, "1반");
StudyClass sc2 = new StudyClass(20, "2반");
StudyClass sc3 = new StudyClass(24, "3반");
sc1.showStudyClassInfo();
sc2.showStudyClassInfo();
sc3.showStudyClassInfo();
}
static 멤버 |
instance 멤버 |
|
|
'Programming > Java * Spring' 카테고리의 다른 글
[Java] 07. Is Kind Of 관계, Has A 관계 (0) | 2019.03.26 |
---|---|
[Java] 06. String, StringBuilder 속도 비교 (0) | 2019.03.25 |
[Java] 04. 접근 권한(Access Authority) (0) | 2019.03.20 |
[Java] 03. 패키지(Package) (0) | 2019.03.20 |
[Java] 02. 배열의 복사(Arrays.copy) (0) | 2019.03.15 |