꾸양!
일단 시작.
꾸양!
💁‍♀️ 깃허브 링크
전체 방문자
오늘
어제
  • 분류 전체보기 (112)
    • STUDY (85)
      • JAVA (36)
      • Algorithm (1)
      • SpringBoot (9)
      • SQL (4)
      • GIT (16)
      • Front (1)
      • JPA (9)
      • Trouble Shooting (9)
    • SPARTA Project (26)
      • WIL (14)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 랠릿
  • 프로그래머스
  • Repository
  • 인프런
  • 트러블슈팅
  • 숫자짝꿍
  • 잔디돌려줘
  • 인프콘2024
  • intellij
  • 클린코드
  • 코드효율성

최근 댓글

최근 글

hELLO · Designed By 정상우.
꾸양!

일단 시작.

STUDY/JAVA

230330 공부기록

2023. 3. 31. 13:27

* 변수의 사용 범위

- 블록 바깥에서 선언 되어 있는 변수는 사용 불가능.
- 메소드의 매개변수는 메소드 블록 바깥에서 선언되어 있기는 하지만 해당 메소드 블록 내에서 사용가능.
- 메소드 내에서 선언되어 있지는 않지만 클래스 자체에서 선언되어 있는 변수는 사용가능하다.

public class VariableScopeExam {

    int globalScope = 10;
    static int staticVal = 7;

public void scopeTest(int value) {

    System.out.println(globalScope);    // globalScope 변수 사용가능
    System.out.println(value);    // 매개변수로 선언된 value도 가능.

}

public static void main(String[] args) {

    System.out.println(globalScope);    // 오류
    System.out.println(staticVal);    // 변수를 static 변수로 선언하면 사용가능.

}

* Static

해당 클래스(VariableScopeExam) 내 선언되어 있음에도 불구하고 globalScope를 사용 불가능.
main method가 static하기 때문.
모든 클래스는 인스턴스화 하지 않은 채로 사용할 수 없다.
-> Car라는 클래스를 만들었으면
-> Car c1 = new Car(); 로 객체화해야 사용 가능!
main은 static한 메소드. 키워드 static을 사용하면 인스턴스화 하지 않아도 사용가능.
static한 필드(필드 앞에 static 키워드를 붙힘)나, static한 메소드는 Class가 인스턴스화 되지 않아도 사용할 수 있다.
이것이 이제까지 main 메소드에서 클래스를 new하지 않아도 사용가능했던 이유.
그래서 static한 메소드에서는 static하지 않은 필드를 사용 할 수 없다.
static한 메소드를 사용하는 시점에 해당 클래스가 인스턴스화 되지 않았을 수도 있기 때문.

* Static 변수

VariableScopeExam v1 = new VariableScopeExam();
//    new로 클래스 객체화. v1 -> 인스턴스 변수
//    인스턴스 변수(v1)는 인스턴스(VariableScopeExam)가 생성될 때 값을 저장하는 공간(v1.globalScope)이 하나가 생김.

System.out.println(v1.globalScope);     //    VariableScopeExam 클래스에 있는 globalScope라는 변수를 불러와.

VariableScopeExam v2 = new VariableScopeExam();    //    값을 저장하는 공간이 하나가 더 생김.(v2.globalScope)

v1.globalScope = 10;
v2.globalScope = 20;

System.out.println(v1.globalScope);    //    출력 : 10
System.out.println(v2.globalScope);    //    출력 : 20

v1.staticVal = 50;
v2.staticVal = 100;
System.out.println(v1.staticVal);    //    출력 : 100
System.out.println(v2.staticVal);    //    출력 : 100

v2(레퍼런스).staticVal(변수명)하고 사용하기 보다는 클래스 이름을 직접 사용.
VariableScopeExam.staticVal와 같이 클래스명.변수명으로 사용. static한 변수는 하나이므로. 
staticVal같은 static한 필드를 클래스 변수라고 한다.
static하게 선언된 변수는 값을 저장할 수 있는 공간이 하나만 생성되기 때문에 값을 공유한다.
나중에 저장된 값이 변수에 들어간다.
그러므로, 인스턴스가 여러개 생성되도 static한 변수는 하나다.
globalScope같은 변수(필드)는 인스턴스가 생성될때 생성되기때문에 인스턴스 변수라고 한다.

저작자표시

'STUDY > JAVA' 카테고리의 다른 글

230401 공부기록  (0) 2023.04.04
230331 공부기록  (0) 2023.04.01
230329 공부기록  (0) 2023.03.30
자바파일을 String으로 저장하지 말 것.  (0) 2023.03.29
이클립스에서 커서가 두꺼워졌을 때  (0) 2022.09.19
    'STUDY/JAVA' 카테고리의 다른 글
    • 230401 공부기록
    • 230331 공부기록
    • 230329 공부기록
    • 자바파일을 String으로 저장하지 말 것.
    꾸양!
    꾸양!
    차근차근 한 발자국씩.

    티스토리툴바