JAVA 객체지향 프로그래밍

static

수업소개

static 키워드에 대해서 살펴보는 수업입니다. 

 

 

 

강의

소스코드

class Foo{
    public static String classVar = "I class var";
	public String instanceVar = "I instance var";
	public static void classMethod() {
		System.out.println(classVar); // Ok
//		System.out.println(instanceVar); // Error
	}
	public void instanceMethod() {
		System.out.println(classVar); // Ok
		System.out.println(instanceVar); // Ok
	}
}
public class StaticApp {

	public static void main(String[] args) {
		System.out.println(Foo.classVar); // OK
//		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.instanceVar); // I instance var
//		
		f1.classVar = "changed by f1";
		System.out.println(Foo.classVar); // changed by f1
		System.out.println(f2.classVar);  // changed by f1
//		
		f1.instanceVar = "changed by f1";
		System.out.println(f1.instanceVar); // changed by f1
		System.out.println(f2.instanceVar); // I instance var
	}

}

 

댓글

댓글 본문
  1. jajavava
    static이 있는 것은 클래스소속이고 없는 것은 인스턴스의 소속이다.
    클래스와 인스턴스의 연결관계의 차이는 인스턴스는 클래스의 복제인데 클래스메소드는 인스턴스와 연결되어
    있기 때문에 값을 바꾸면 그 바뀐 값이 서로 적용되고 인스턴스의 메소드는 서로 개별적이다.
  2. 열공하자
    저는 쉽게 풀어서 정리해보았습니다.
    클래스의 복제 인스턴스를 만들때, static이 붙은 메서드는 지역적 특성으로 인해,
    복제된 인스턴스 안에 있는 것이 아니라 그 값이 클래스 값을 가리키고 있는 것임.
    ex) static이 붙은 메서드를 메인 메서드의 인스턴스에서 값을 변환 시키면, 모든 복제된 인스턴스에서 값이 변환이 되고, static이 붙지 않은 메서드는 각 인스턴스에서 값을 다르게 표현 가능함.

    제가 이해한 것이 맞는 것인가요??
  3. static 변수, 함수는 클래스 생성할 때 같이 생성 되기 때문에 인스턴스로 생성해주지 않아도 바로 어디든 사용 가능하고 클래스 내부에서 값을 관리해서 공통으로 수정 가능하다.

    인스턴스 변수, 함수는 복제본(인스턴스)로 객체를 생성해주어야 사용가능하고 각 본제본에 값을 관리하기 때문에 다른 본제본에 값에 영향을 끼치지 않는다.
  4. 2020.03.15 완료
  5. 복잡한데... 필요하니까 분류해 놓았겠지요....
    조심해서 써야겠네요...
    감사합니다..
  6. Serina
    다시 이해안되기 시작했어요^^;;
  7. 감자맛
    * [클래스 함수] → [클래스 변수] 접근 가능, [인스턴스 변수] 접근 불가능
    * [인스턴스 함수] → [클래스 변수] 접근 가능, [인스턴스 변수] 접근 가능
    * [클래스]로 접근 시 → [클래스 함수] 사용 가능, [인스턴스 함수] 사용 불가능, [클래스 변수] 접근 가능, [인스턴스 변수] 접근 불가능
    * [인스턴스]로 접근 시 → [클래스 함수] 사용 가능, [인스턴스 함수] 사용 가능, [클래스 변수] 접근 가능, [인스턴스 변수] 접근 가능

    *[인스턴스] 또는 [클래스]로 접근해 수정한 [클래스 변수]의 값은 다른 모든 인스턴스에게 영향을 끼침.
    *[인스턴스]로 접근해 수정한 [인스턴스 변수]의 값은 다른 인스턴스에게 영향을 끼치지 않음.
    대화보기
    • 감자맛
      여기부터 갑자기 난이도가 가팔라지네요 ㅋㅋ
    • 라또마니
      다시 한번 들어야 할 듯.. 하네요~~
    • 이렇게 원리 다 설명해주는거 너무 좋아요
    • 이기호
      감사합니다!^^
    • 쑤우
      수강완료. 감사합니다~
    • 허공
      감사합니다!
    graphittie 자세히 보기