본문 바로가기

Programing/Java

[Java] static과 non-static && 접근 제어

728x90
반응형

[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)이 일어난다.

728x90
반응형

'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