클래스에서 static이라는 키워드는 어떤 역할이에요?

조회수 3587회

소스코드

package hello;

public class Hello {

    Clock clock = new Clock();

    public static void main(String args[]) {
        clock.sayTime();
    }
}

이런 코드가 있었을때

에러메세지

Cannot access non-static field in static method main 이런 에러가 나오는데요.

그래서 static Clock clock = new Clock(); 이렇게 바꾸니까 잘 됩니다. static이 있고 없고의 차이가 뭔가요?

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    static멤버는 특정한 객체에 속하는게 아니라 클래스 자체에 속합니다. 무슨 말이냐면 static은 모든 객체에서 하나만 존재해서 만약에 백만개의 인스턴스가 있어도 모든 인스턴스가 static 멤버 하나를 공유해서 쓰는 개념입니다.

    또한 static 메소드도 특정한 객체에 속하지 않기때문에 인스턴스 멤버를 참조할수없습니다. 그래서 static멤버는 static메소드에서 밖에 참조되지 않습니다. 인스턴스 메소드는 static멤버를 참조할수있고요.

    public class Example {
        private static boolean staticField;
        private boolean instanceField;
        public static void main(String[] args) {
            //static 메소드는 static멤버를 참조할수있습니다.  
            staticField = true;
    
            // static메소드는 객체화됐을때 인스턴스 멤버에 접근할수있습니다.
            Example instance = new Example();
            instance.instanceField = true;
        }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)