Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Everything has an expiration date

100 - Java : static 변수(클래스 변수, 정적 변수)와 static 메소드 (클래스 메소드, 정적 메소드) 실습 프로그램 본문

[Java]/Program source (java)

100 - Java : static 변수(클래스 변수, 정적 변수)와 static 메소드 (클래스 메소드, 정적 메소드) 실습 프로그램

Jelly-fish 2023. 9. 8. 17:13

 

/*===============================================================
	■■■ 클래스와 인스턴스 ■■■	
	- static 변수(클래스 변수)와 static 메소드(클래스 메소드)
=================================================================*/

// ※ 탄생 시점~!!!
// ※ 공유~!!!

// 실습 편의상 접근제어지시자 생략


public class Test100
{
	// ※ 클래스 변수 또는 클래스 메소드는
	//    클래스 정보가 로딩되는 순간 메모리 할당이 이루어지며
	//    클래스 이름 또는 객체(인스턴스)를 통해 접근할 수 있다.
	//    즉, 『new』 연산자를 통해 메모리를 할당받지 않아도
	//    사용이 가능하다는 것이다.
	

	static int a = 10;				//-- static 변수(클래스 변수, class 변수, 정적 변수)

	int b = 20;						//-- non-static 변수(인스턴스 변수, instance 변수)

	// ※ 인스턴스 변수 또는 인스턴스 메소드는
	//    동일한 클래스의 메소드에서는 바로 접근하는 것이 가능하지만
	//    클래스 메소드에서는 접근할 수 없다.


	void write()				//-- non-static 메소드(인스턴스 메소드, instance 메소드)
	{
		System.out.println("인스턴스 메소드 → 클래스   변수 a :  " + a);	
		System.out.println("인스턴스 메소드 → 인스턴스 변수 b :  " + b);
	}

	static void print()			//-- static 메소드(클래스 메소드, class 메소드, 정적 메소드)
	{
		System.out.println("클래스 메소드 → 클래스   변수   a :  " + a);	
		//System.out.println("클래스 메소드 → 인스턴스 변수 b :  " + b);
		//--==>> 에러 발생(컴파일 에러)
	
	}





	public static void main(String[] args)
	{
		System.out.println("main() 메소드 → 클래스 변수   a : " + Test100.a);
		//-- 클래스 변수에 접근하기 위해서는
		//   『클래스명.변수명』의 형태로 클래스의 이름을 통해
		//   접근하는 것이 가능하다.
		//--==>> main() 메소드 → 클래스 변수   a : 10


		System.out.println("main() 메소드 → 클래스 변수   a : " + a);
		//-- 같은 클래스 내부에 존재하기 때문에
		//   클래스의 이름을 생략하는 것이 가능하다. (둘 다 static, 같은 클래스 내부)
		//--==>> main() 메소드 → 클래스 변수   a : 10

		Test100.print();
		//--==>> 클래스 메소드 → 클래스   변수   a :  10
		
		// 같은 static 타입, 같은 클래스 내부이므로 클래스명 직접 언급하지 않아도 괜찮다!!!
		print();
		//--==>> 클래스 메소드 → 클래스   변수   a :  10
		//-- 클래스 메소드에서 클래스 메소드의 호출은 가능하며,
		//   『클래스명.메소드명()』의 형태로 접근하여 호출하는 것이 가능하다.
		//   또한, 지금은 같은 클래스 내부에 존재하기 때문에
		//   클래스의 이름을 생략한 경우에 해당한다.


		//System.out.println("main() 메소드 → 인스턴스 변수 b : " + b);
		//--==>> 에러 발생(컴파일 에러)
		//System.out.println("main() 메소드 → 인스턴스 변수 b : " + Test100.b);
		//--==>> 에러 발생(컴파일 에러)

		//Test100.write();
		//--==>> 에러 발생(컴파일 에러)

		//write();
		//--==>> 에러 발생(컴파일 에러)
		

		// Test100 클래스 기반 인스턴스 생성
		Test100 ob = new Test100();
		// 인스턴스 변수 반드시 인스턴스 통해서 접근한다!!!!!!!!!!!!!!!!!!!!!!!!!
		//System.out.println("main() 메소드 → 인스턴스 변수 b : " + b);
		//--==>> 에러 발생(컴파일 에러)
		// 인스턴스 변수 클래스 통해서 접근하지 않는다!!!!!!!!!!!!!!!!!!
		//System.out.println("main() 메소드 → 인스턴스 변수 b : " + Test100.b);
		//--==>> 에러 발생(컴파일 에러)


		// 생성된 인스턴스를 통해 인스턴스 변수에 접근
		System.out.println("main() 메소드 → 인스턴스 변수 b : " + ob.b);
		//--==>> main() 메소드 → 인스턴스 변수 b : 20

		//write();
		//--==>> 에러 발생(컴파일 에러)

		
		// 생성된 인스턴스를 통해 인스턴스 메소드에 접근(호출)
		ob.write();
		//--==>> 인스턴스 메소드 → 클래스   변수 a :  10
		//       인스턴스 메소드 → 인스턴스 변수 b :  20


		// 생성된 인스턴스를 통해 클래스 변수에 접근
		System.out.println("main() 메소드 → 클래스 변수 a : " + ob.a);
		//--==>> main() 메소드 → 클래스 변수 a : 10

		// 생성된 인스턴스를 통해 클래스 메소드에 접근
		ob.print();
		//--==>> 클래스 메소드 → 클래스   변수   a :  10

		// ※ 클래스 변수나 클래스 메소드는
		//    『생성된인스턴스명.변수명』
		//    『생성된인스턴스명.메소드명()』
		//    의 형태로도 접근(호출)이 가능하다.
		//    하지만,
		//    『클래스명.변수명』
		//    『크래스명.메소드명()』
		//    의 형태로 접근(호출)하는 것이 일반적이다.


		System.out.println("main() 메소드 → 클래스 변수 a : " + a); // 같은 클래스 내부의 static 변수(클래스변수)이므로 클래스명 생략
		System.out.println("main() 메소드 → 클래스 변수 a : " + Test100.a); // 클래스명.클래스변수명 접근
		System.out.println("main() 메소드 → 클래스 변수 a : " + ob.a); // 인스턴스명.클래스변수명 접근

		//--==>> main() 메소드 → 클래스 변수 a : 10
		//       main() 메소드 → 클래스 변수 a : 10
		//       main() 메소드 → 클래스 변수 a : 10


		System.out.println();		// 개행

		// Test100 클래스 기반 인스턴스 생성
		Test100 ob2 = new Test100();

		ob2.a = 10000;			//-- 클래스 변수
		ob2.b = 10000;			//-- 인스턴스 변수

		System.out.println("ob2 확인 -------------------------");
		ob2.write();
		//--==>> ob2 확인 -------------------------
		//       인스턴스 메소드 → 클래스   변수 a :  10000
		//       인스턴스 메소드 → 인스턴스 변수 b :  10000

		System.out.println("ob 확인 -------------------------");
		ob.write();
		//--==>> ob 확인 -------------------------
		//       인스턴스 메소드 → 클래스   변수 a :  10000	// static 변수 ( = 스테이플러, 『공유』하는 개념)
		//       인스턴스 메소드 → 인스턴스 변수 b :  20		// instance 변수 ( = 딱풀, 각각의 객체)
	


	}
}