[Java] Static

호호빵·2022년 10월 28일
0

Java

목록 보기
10/19

변수 선언

class Foo {
	// 변수 선언
    public static String classVar = "I calss var";
    public String instanceVar = "I instance var";
}

public class Main {
    public static void main(String[] args) {
        System.out.println(Foo.classVar);
        System.out.println(Foo.instanceVar); // Error
    }
}

static으로 선언한 변수 classVar는 클래스 Foo로 바로 호출가능
instance로 선언한 변수는 불가능 <- 인스턴스를 통해서 사용하도록 고안 됨

메소드 선언

class Foo {
	// 변수 선언
    public static String classVar = "I calss var";
    public String instanceVar = "I instance var";

	// 메소드 선언
    public static void classMethod() {
        System.out.println(classVar);    // 클래스 변수에는 접근 가능
        System.out.println(instanceVar); // Error
    }
    
    public void instanceMethod() {
        System.out.println(classVar);
        System.out.println(instanceVar);
    }
    // 인스턴스메소드는 모든 변수 접근 가능
}

public class Pracc {
    public static void main(String[] args) {
        System.out.println(Foo.classVar);
        // System.out.println(Foo.instanceVar); Error
        
        Foo.classMethod();
        Foo.instanceMethod();  // 호출 안됨
        
        Foo f1 = new Foo();

    }
}

<instance f1>
static String classVar    <- 클래스의 변수를 가리킬 뿐

String instanceVar = "I instance var"  <- 그대로 복제, 별개의 인스턴스

static classMethod() {}  <- 클래스의 메소드를 가리킬 뿐

instanceMethod()  <- 그대로 복제, 별개의 메소드

바꿔보기

class Foo {
	// 변수 선언
    public static String classVar = "I calss var";
    public String instanceVar = "I instance var";

	// 메소드 선언
    public static void classMethod() {
        System.out.println(classVar);    // 클래스 변수에는 접근 가능
        System.out.println(instanceVar); // Error
    }
    
    public void instanceMethod() {
        System.out.println(classVar);
        System.out.println(instanceVar);
    }
    // 인스턴스메소드는 모든 변수 접근 가능
}

public class Pracc {
    public static void main(String[] args) {
        System.out.println(Foo.classVar);
        // System.out.println(Foo.instanceVar); Error
        
        Foo.classMethod();
        Foo.instanceMethod();  // 호출 안됨
        
        Foo f1 = new Foo();
        Foo f2 = new Foo();
        
        System.out.println(f1.classVar); // I class var
        System.out.println(f1.instanVar); // I instance var	        
        
        f1.classVar = "changed";
        System.out.println(Foo.classVar); // changed
        // f1을 바꿔도 링크되어있어 클래스에서도 바뀜

		f1.instanceVar = "changed"
		System.out.println(f1.instanceVar); // changed   
        System.out.println(f2.instanceVar); // I instance var
        // f1을 바꾸면 f1만 바뀌고 f2는 그대로



    }
}
  • static : 클래스 소속(클래스에 고정이다.)
  • static이 없는 건 instance 소속

생활코딩 - static
static Method

profile
하루에 한 개념씩

1개의 댓글

comment-user-thumbnail
2022년 10월 30일

저도 자세히는 모르고 지나갔던 내용인데~
덕분에 알아갑니다!!

답글 달기

관련 채용 정보