자바로 코딩하던 중 아래와 같은 코드에서 오류에 직면했다. 자바는 보다 완벽한 객체지향 프로그래밍을 위해 생성된 언어이며, Class를 선언함으로써 객체지향을 달성한다는 사실을 잊고 있어서 발생한 오류였다.


 

1
2
3
4
5
6
7
8
9
10
11
12
public class Woo{
    int i = 10;        
    
    void printWoo(){
        System.out.println("Wookoa!");
    }
    
    public static void main(String[] args){        
        printWoo();    
        i = 20;
    }    
}

 




에러의 내용은 아래와 같다.


Exception in thread "main" java.lang.Error: Unresolved compilation problems: 

 Cannot make a static reference to the non-static method printWoo() from the type Woo

 Cannot make a static reference to the non-static field i

 

static이 아닌 메소드나 필드를 참조 할 수 없다는 내용이다. 이유는, static 맴버들이 먼저 컴파일되기 때문에 static이 아닌 메소드나 필드는 정의되지 않았기 때문이다. 따라서, 모든 메소드나 필드를 static 맴버로 바꾸거나 Woo 클래스의 객체를 생성해서 접근해야 한다.




- 첫번째 방법: static 맴버로 전환


1
2
3
4
5
6
7
8
9
10
11
12
public class Woo{
    static int i = 10;        
    
    static void printWooZone(){
        System.out.println("Wookoa");
    }
    
    public static void main(String[] args){        
        printWoo();    
        i = 20;
    }    
}

 




- 두번재 방법: 해당 클래스의 객체를생성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Woo{
    int i = 10;        
    
    void printWoo(){
        System.out.println("Wookoa");
    }
    
    public static void main(String[] args){
        Woo woo;
        woo = new Woo();
        
        woo.printWoo();    
        woo.i = 20;
    }    
}

 




 

Private comment