public class Ex01_field {
	public static void main(String[] args) { 
		Test1 t1 = new Test1(); // 객체 생성. Test1 클래스의 a와 b필드가 메모리 할당받음.
		Test1 t2 = new Test1();
		
		t1.a=50;
		System.out.println(t1.a+ " : " + t2.a); // 50:0
		
		int s = t1.sub(10); // 지역변수와 매개변수는 호출 될 때 메모리 할당을 받음.
		System.out.println(s); 
		
		s = t1.sub(100);
		System.out.println(s);
		
		
/*
		// 클래스 변수를 객체를 통해서 접근 가능 하지만 권장하지 않음. (경고)
		t1.c = 50;
		System.out.println(t1.c+ " : " + t2.c); // 50:50 메모리 할당이 한 번만 되어서
*/
		
		System.out.println(Test1.c); // 클래스 변수는 클래스명으로 접근 
		
		
	}
}
class Test1 {
	// 필드 : 인스턴스 변수 + 클래스 변수
	
	// 인스턴스 변수
	// 인스턴스 변수는 객체가 생성될 때 메모리가 생성. 메모리를 할당 받을 때 기본값으로 초기화
	// 인스턴스 변수는 객체마다 메모리할당. heap 메모리 영역에 메모리할당 (자바가 메모리관리하는 부분임, 개발자가 관리 불가)
	// 인스턴스 변수는 객체가 null이 되거나 오랫동안 사용되지 않으면 Garbage collector가 메모리회수.
	// 객체에 종속되므로 객체를 통해서 접근 "객체명.인스턴스 변수" 로 접근
	int a; // 생성될때 0으로 초기화
	int b=10; // 생성될때 10으로 초기화
	
	// 클래스 변수
	// 클래스가 로딩될 때 메모리 할당. 
	// 객체 생성과 상관없이 하나만 메모리할당되고 모든 객체가 공유.
	// "클래스명.클래스 변수"로 접근
	// 프로그램이 종료되는 시점에 메모리에서 제거된다.
	static int c=100;
	
	// 매개변수, 지역변수 : 스택메모리 영역에 메모리 할당. 초기화하지 않으면 쓰레기값
	// 매개변수와 지역변수는 메소드를 호출할 때 메모리가 할당된고 메소드를 빠져나가면 메모리에서 제거됨.
	// 인스턴스 메소드 : 객체가 생성되어야 호출되는 메소드로 객체를 통해서 호출
	public int sub(int n) { // n:매개변수
		int s=0; // 지역변수
		for(int i=1; i<=n;i++) {
			s+=i;
		}
		return s;
	}
	
	// void는 메소드를 실행 후 결과를 호출한 곳으로 넘길 필요가 없는 경우 사용
	public void sub2() {
		// 인스턴스 변수는 클래스내의 모든 인스턴스 메소드에서 호출가능하다.
		System.out.println(a+" : "+b);
		
		int x = sub(5); // 다른 인스턴스 메소드도 호출 가능.
		System.out.println(x);
		
		// 클래스 메소드나 클래스 변수 호출 가능.
		System.out.println(c);
		demo2();
	}
	
	// 클래스 메소드 : 객체 생성과 상관없이 클래스 이름으로 호출하는 메소드
	public static void demo() {
		// 클래스메소드는 인스터스 변수나 인스턴스 메소드를 직접 호출 불가
		// System.out.println(a); // 컴파일 오류
		// tt.sub2(); // 컴파일 오류
		
		// 클래스 변수나 클래스 메소드는 호출 가능
		System.out.println(c);
		
		// 클래스 메소드에서 객체를 생성하여 인스턴스 변수나 인스턴스메소드 호출
		Test1 tt= new Test1();
		System.out.println(tt.a+" : "+tt.b);
		tt.sub2();
	}
	
	public static void demo2() {
		System.out.println("demo2 ...");
	}
	
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0714_Ex03_method  (0) 2021.07.14
0714_Ex02_method  (0) 2021.07.14
0713_Ex07_method  (0) 2021.07.14
0713_Ex06_class  (0) 2021.07.14
0713_Ex05_class : 레퍼런스 변수 선언 및 메모리 할당  (0) 2021.07.14

+ Recent posts