Class - 범위 Scope와 Static (어려우니까 다음에 또보자_)

이상해씨·2023년 4월 27일
0

JAVA

목록 보기
18/40

범위 Scope

  • 변수의 스코프(scope) : 변수들은 사용할 수 있는 범위를 가짐.
  • 변수의 스코프 = 변수가 선언된 블록

global scope vs local scope

  • global scope : 만약 클래스의 속성으로 선언 되었을 경우, 사용 범위 클래스 전체
  • local scope: 메소드 블럭 내에서 선언되었을 경우, 사용범위 메소드 블럭내
 public class ScopeExam{

        int globalScope = 10;   
        // 인스턴스 변수 . 클래스의 속성으로 선언

        public void scopeTest(int val){   
            int localScope = 10;
           // 속성으로 선언되어 클래스 전체 scope 
           
           	System.out.println(globalScope);
            System.out.println(localScpe);
            System.out.println(val);
        }
        public void scopeTest2(int val2){        	System.out.println(globalScope);
            System.out.println(localScpe);// localscope는 scopeTest의 속성이으로 scopeTest2에서는 사용이 불가하다. 
            System.out.println(val);// localscope는 scopeTest의 파라미터이으로 scopeTest2에서는 사용이 불가하다. 
        }
        public static void main(String[] args) {
            System.out.println(globalScope);  //오류
            System.out.println(localScope);   //오류
            System.out.println(value);        //오류  
        }   

static

  • 클래스가 인스턴스화되지 않아도 사용할 수 있다.
  • static : 값을 나눈다는 의미. (<-> heap :참조하는 개념. 공유가 아닌, 새로운 것을 생성)
  • static method, static field는 class가 인스턴스화 되지 않아도 사용할 수 있음.
public class VariableScopeExam {
        int globalScope = 10; 
        static int staticVal = 7;

        public void scopeTest(int value){
            int localScope = 20;        
        }

        public static void main(String[] args) {
            System.out.println(staticVal);      //사용가능 
        }

    }

4. 클래스 변수 Static vs. Public

1) static : 클래스의 객체 생성 없이 접근
2) public : 객체에만 접근

1) Static (정적)

  • 프로그램 종료까지 메모리에 한번 할당
  • 메모리 영역에 존재하여 객체 생성 이전에 할당되어 있음
  • 따라서, 객체 생성 없이 static 자원에 접근할 수 있음
  • 상속 방지를 위해 final 사용
  • JVM(자바가상머신)이 main 함수를 바로 실행

2) public

  • JVM가 main함수를 찾도록 함.
public class Main {
  // Static method
  static void myStaticMethod() {
    System.out.println("Static methods can be called without creating objects");
  }

  // Public method
  public void myPublicMethod() {
    System.out.println("Public methods must be called by creating objects");
  }

  // Main method
  public static void main(String[] args) {
    myStaticMethod(); // Call the static method
    // myPublicMethod(); This would compile an error

    Main myObj = new Main(); // Create an object of Main
    myObj.myPublicMethod(); // Call the public method on the object
  }
}

(W3school: https://www.w3schools.com/java/java_class_methods.asp)



참고

profile
공부에는 끝이 없다

0개의 댓글