본문 바로가기
Tech/Java

main(String[] args) 메소드 깊이 있게 알아보자 (2) - static

by Dog발자. 2020. 5. 20.
반응형

- Java Static 이란? 

영어 단어로서의 static은 다음과 같은 의미를 가진다 정지상태의, 고정된, 변화가없는 이러하듯 static으로 선언된 자원 들은 JVM의 메모리 영역에 딱 한번만 올라가게 된다. 이러한 이유로 다음과 같은 특징을 같습니다.

 

  1. static 변수는 인스턴스(클래스를 생성한 객체)끼리 값을 공유한다.
  2. static 변수와 메서드는 인스턴스 생성(new Class)없이 메모리에 스스로 올라간다.

기본적으로 static을 활용한 코드는 다음과 같다.

public class StaticClass {
	static int testInt = 100;
	
	static int getTestInt () {
		return testInt;
	}
	
	public int getInt () {
		return testInt;
	}
	
	public void setInt (int value) {
		testInt = value;
	}
}

testInt, getTestInt() 를 static으로 선언하고 getInt() 로 접근 setInt(int value) 로 값을 변경하는 코드이다

public class Test {

	public static void main(String[] args) {
		// 인스턴스 화 없이 변수 메소드 접근 
		System.out.println("1 : " + StaticClass.testInt);
		System.out.println("2 : " + StaticClass.getTestInt());
		
		// 인스턴스 의 메소드 접근
		StaticClass sc1 = new StaticClass();
		StaticClass sc2 = new StaticClass();
		StaticClass sc3 = new StaticClass();
		StaticClass sc4 = new StaticClass();
		
		System.out.println("3 : " + sc1.getInt());
		// static변수 값 변경
		sc1.setInt(300);
		
		System.out.println("4 : " + sc1.getInt());
		System.out.println("5 : " + sc2.getInt());
		System.out.println("6 : " + sc3.getInt());
		System.out.println("7 : " + sc4.getInt());
	}
}

 

위 코드를 보면 StaticClass.testInt, StaticClass.getTestInt() 는 클래스를 생성하지 안고 바로 사용한것을 볼 수 있있다. 이렇게 사용할 수있는 이유는 Class Loader가 로드한 Class파일을 메모리영역(RunTime Data Area)에 올려줄때 static으로 선언된 자원들을 메모리에 올라 가기때문이다

간단하게 말하면 이런의미가 된다 자바코드를 작성하고 코드를 RUN(java application) 할때 JVM 에 여러순서가 있는데 (.java -> .class) -> 메모리 영역에 할당(RunTime Data Area) -> 메모리 영역에 올라간 파일을 실행엔진(Execution Engine)이 실행하여 java 코드가 돌아가는데 메모리 영역에 할당 할때 static 값이 미리 메모리에 올리기 때문에 인스턴스(생성) 없이 사용 가능하다. 

 

위에 말을 이해하고 있다면 JVM이 돌아가는 로직을 모두 알고 있다는 말이 된다 자세한 내용은 다음 내용에서 심층적으로 작성할 예정이다.

 

<jvm 기본 설명>

https://jktech.tistory.com/5

 

JVM(Java Virtual Machine)

- jvm 이란 Java Byte Code를 OS에 맞게 해석 해주는 역할을 합니다. - Java compiler .java 파일을 .class 라는 Java byte code로 변환 - Byte Code 고급 언어로 작성된 소스 코드를 가상머신이 이해할 수 있는..

jktech.tistory.com

<github>

https://github.com/jkkim09/JAVA-BASE/tree/master/src/main/java/java_test/staticTest

 

jkkim09/JAVA-BASE

💥 Java / 리마인드 정리. Contribute to jkkim09/JAVA-BASE development by creating an account on GitHub.

github.com

<static은 언제 어디서 할당 되는가>

https://jktech.tistory.com/11?category=887327

 

JVM 더 깊이 있게 알아보자

- JDK (Java Development Kit) JDK 는 단어 그대로 자바 개볼 도구 이다 그래서 개발자들의 개발을 도와주는 도구들을 포함하고 있다 그리고 JRE을 포함호고 있다. 하지만 개발자가 아닌 일반 사용자들은 �

jktech.tistory.com

 

반응형

댓글