[Java] static과 non-static && 접근 제어
자바에서 Program이란 class들의 집합이다.
static 멤버는 class 멤버이고, non-static멤버는 object 멤버이다.
1) 왜 main method는 반드시 static이어야 하는가?-> class는 object를 찍어내기 위한 설계도의 용도로써 허상의 개념이기 때문에 프로그램의 시작을 알려줄 main method는 반드시 static이어야만 한다.
2) 왜 static 메서드에서 같은 class의 non-static 멤버를 access할 수 없는가?-> non-static 멤버는 object 멤버이므로 class가 실행되지 않았을때, 허상이다.따라서, static method와 같은 class에 있더라도 non-static 멤버를 access할 수 없다.
3) 다른 클래스에 속한 static 멤버는 어떻게 access하는가?-> class명.member명
4) static 멤버의 용도-> main method-> 상수 혹은 class당 하나만 유지하고 있으면 되는 값(혹은 객체) - e.g. Math.PI, System.out 등-> 순수하게 기능만으로 정의되는 method, 대표적인 예로는 수학 함수들 - e.g. abs, sqrt, min 등
접근 제어: public, private, default, protected
1) public: class 외부에서 접근이 가능하다.
2) private: 클래스 내부에서만 접근이 가능하다.
3) default: 동일 package에 있는 다른 class에서 접근 가능하다.
4) protected: 동일 package의 다른 class와 다른 package의 하위 class에서도 접근 가능하다.
다형성(Polymorphism)
-> super class 타입의 변수가 sub class 타입의 객체를 참조할 수 있다.
Computer theComputer = new Notebook("Bravo", "Intel", 4, 240, 2/4, 15.07.5);
-> Computer 타입의 변수 theComputer가 Notebook 타입의 객체를 참조하고 있다.
System.out.println( theComputer.toString() );
-> theComputer는 Computer 타입의 변수이면서 실제로는 Notebook 개체를 참조하고 있다.
그리고 두 clas는 각자의 toString()을 가지고 있다. 그렇다면 여기서 둘 중 어떤 toString() 메서드가 실행될까?
NoteBook class의 toString() 메서드가 실행된다.
즉, 동적 바인딩(dynamic binding)이 일어난다.
'Programing > Java' 카테고리의 다른 글
[Java] 추상클래스와 인터페이스 (0) | 2020.12.28 |
---|---|
[Java] Object Class와 Wrapper Class (0) | 2020.12.26 |
[Java] String 클래스 기본 메서드 (0) | 2020.12.10 |
[Java] 값에 의한 호출 (0) | 2020.12.09 |
[Java] Tree 구현 (0) | 2020.12.08 |