Java의 static

zihooy·2023년 5월 3일
0

Java Programming

목록 보기
5/21
post-thumbnail

Java의 기본 문법 중 static에 대해 알아보자

🏹 Java의 Static

static의 원래 위치는 전역 변수라고 생각하면 편하다.

Class 는 객체를 생성해야 비용이 발생하는데, static은 선언하는 순간부터 비용이 발생한다.
따라서, 객체 생성과 관계 없이 static 변수, 함수를 호출할 수 있다.

대신 static은 1번만 불러진다.

class Tiger{
	int num2 = 10;
	static int num1 = 10;
	static void f1() {
	}
}
public class hello {
	public static void main(String[] args) {
		System.out.println(Tiger.num1);
        Tiger.f1();
        // 객체 생성과 관계 없이 static 변수, 함수를 호출할 수 있으므로, 
        // Tiger 객체가 생성되지 않은 시점이지만 num1을 호출하는 것이 가능하다 !

		Tiger t1 = new Tiger();
		Tiger t2 = new Tiger();
	}
}

🏹 Java의 Main Class에 Static을 사용하는 이유

Java에서는 기본적으로 public static void main(String[] args) {} 함수를 우선적으로 실행한다. 왜 그럴까?

위에서 말한 것처럼
static을 사용하면 선언하는 순간부터, 객체 생성과 관계 없이 static 변수, 함수를 호출할 수 있다.
즉, Main class에 대한 객체를 생성하지 않아도 알아서 실행되는 것이다 !!

class Tiger {
	void f1() {
		// 자신의 이름으로 class 사용이 가능하다
		Tiger t = new Tiger();
	}
}

// hello는 객체가 생성되기 전부터 실행된다. 
// 객체 생성 전에 실행되도록 하기 위해서 main에 static을 사용한다.
public class hello {
	// static이 없으면 main에서 호출할 수가 없다. 
	static int num = 10;
	static void f1() {
		System.out.println(1);
	}
	void f2() {
		System.out.println(2);
	}
	
	// static 함수 안에서는 static 멤버만 호출할 수 있다.
	public static void main(String[] args) {
		f1();
		System.out.println(num);
		
		hello h = new hello();
		// 객체가 만들어졌으므로, static이 아니어도 호출할 수 있다.
		h.f2();
	}
}

🏹 Java의 Static, 이해했는지 잠깐 체크 !

class Tiger {
	static int a = 0;
	int b = 0;
	Tiger() {
		a++;
		b++;
	}
}

public class hello {
	public static void main(String[] args) {
		Tiger t1 = new Tiger();
		Tiger t2 = new Tiger();
		Tiger t3 = new Tiger();
		System.out.println(t1.a + " " + t1.b);	// 3 1
		// a는 static 이기때문에 호출할 때마다 만들어져서 3번 더해지고, b는 t1에만 해당되므로 1번 더해졌다.

	}
}

Tiger t1 = new Tiger(); 코드가 실행되기 전에,
이미 static 변수와 함수들이 호출되므로, int a = 0이 실행된다.

t1객체의 a를 호출하였지만,
객체가 한번 생성될때마다 static인 a++이 실행되고 더해지므로
총 3번의 객체가 생성되는 동안 a++이 3번 실행되어 a는 3이된다.

profile
thisIsZihooLog

0개의 댓글