[Java] 변수 구분 연습

yeju·2023년 5월 1일
0

연습

목록 보기
1/7
전역변수지역변수매개변수참조변수클래스변수인스턴스변수전역변수지역변수매개변수참조변수클래스변수인스턴스변수.....
// 변수, 메서드마다 주석 달면서 해석해 보기

package work;

class SubClass1 {	
	void b(int a)
	{
		int b = 20;
	}
	
	void bb(SubClass2 x,int y) {
		int z = x.cc(y);
	}	
}

class SubClass2 {	
	int cc(int x) {
		int c = 30;
		return x+c;
	}
}

public class MainClass {
	public static void main(String[] args)
	{
		int a = 10;
		
		SubClass1 obj1 = new SubClass1();
		SubClass2 obj2 = new SubClass2();
		
		obj1.b(a);

		int v = obj2.cc(a);
        
		obj1.bb(obj2,a);
	}    
}
// 해석 끝

package work;

class SubClass1 {
	
	void b(int a)
	// int 데이터를 매개변수로 받는 메서드 b
	{
		int b = 20;
		// b 메서드의 지역변수 b
	}
	
	void bb(SubClass2 x,int y) {
    // SubClass2의 주소와 int 데이터를 매개변수로 받는 메서드 bb
		int z = x.cc(y);
        // SubClass2 객체의 cc 메서드에 y값을 인자로 넣어 호출하고
        // 반환된 값을 bb 메서드의 지역변수 z에 대입
	}
	
}

class SubClass2 {
	
	int cc(int x) {
    // int 데이터를 매개변수로 받아 int 값으로 반환하는 메서드 cc
		int c = 30;
        // cc 메서드의 지역변수 c
		return x+c;
        // 매개변수 x에 받은 값 + c(30)을 반환
	}

}

public class MainClass {

	public static void main(String[] args)
	// main 메서드, 프로그램의 시작 지점
	
	{
		int a = 10;
		// main 메서드의 지역변수 a
		
		SubClass1 obj1 = new SubClass1();
		SubClass2 obj2 = new SubClass2();
		// SubClass1,2의 객체 생성 후 참조변수 obj1,2에 주소 대입
		
		obj1.b(a);
		// SubClass1 객체의 b 메서드에 접근, 인자값 a(10)
        // 아무 일도 안 일어난다... 반환도 없다
        
		int v = obj2.cc(a);
        // SubClass2 객체의 cc 메서드에 접근, 인자값 a(10)
        // 10+30 -> 40을 반환해 와서 main 메서드의 지역변수 v에 대입
        
		obj1.bb(obj2,a);
        // SubClass1 객체의 bb 메서드에 접근
        // 인자값 obj2(SubClass2 인스턴스의 주소), a(10)
        // obj2.cc(10)을 호출하고, 반환된 값(40)을 bb 메서드의 지역변수 z에 대입
	}

}
// 하나더..🙃

package work;

public class SubClass {
	static int bb = 10;
	int bbb = 20;
	
	void bbbb() {
		bbb = bb+bbb;
	}
}

public class MainClass {
	public static void main(String[] args) {
		int x = SubClass.bb;
		
		SubClass obj = new SubClass();
		int y = obj.bbb;
		
		System.out.println("x="+x);
		(obj.bb)++;
		System.out.println("SubClass.bb="+SubClass.bb);
		System.out.println("y="+y);
		obj.bbbb();
		y = obj.bbb;
		System.out.println("y="+y);
	}
}
package work;

public class SubClass {

	static int bb = 10;
    // 전역변수이자 클래스 변수 bb
	int bbb = 20;
    // 전역변수이자 인스턴스 변수 bbb
	
	void bbbb() {
    // 전역변수 bb, bbb를 더한 값을 bbb에 대입하는 메서드 bbbb
    // 그대로 호출하면 bbb는 30이 되겠지...?
		bbb = bb+bbb; 
	}
    
}

public class MainClass {

	public static void main(String[] args)
    // main 메서드, 프로그램의 시작 지점
    
    {
		int x = SubClass.bb;
        // SubClass의 전역변수 bb(10)을 main 메서드의 지역변수 x에 대입
		
		SubClass obj = new SubClass();
        // SubClass의 객체 생성 후 참조변수 obj에 주소 대입
		int y = obj.bbb;
        // SubClass 객체의 전역변수 bbb(20)을 main 메서드의 지역변수 y에 대입
		
		System.out.println("x="+x); // "x=10" 출력
		(obj.bb)++; // SubClass 객체의 전역변수 bb 값 증가 (10->11)
		System.out.println("SubClass.bb="+SubClass.bb); // "SubClass.bb=11" 출력
		System.out.println("y="+y); // "y=20" 출력
        
		obj.bbbb();
        // SubClass 객체의 bbbb 메서드 호출
        // bbb = bb(11)+bbb(20) -> SubClass 객체의 전역변수 bbb에 31 대입
        
		y = obj.bbb;
        // main 메서드의 지역변수 y에 SubClass 객체의 전역변수 bbb(31) 대입
        
		System.out.println("y="+y); // "y=31" 출력
	}

}

// 이제 알것가타요 변수를...
// 23.05.08 추가

package chapter11;

public class SubClassB {
	
	static int staticVarC = 4;
	private static int staticVarD = 8;
	int instanceVarC = 12;
	private int instanceVarD = 16;
	
	// private 변수 D의 getter/setter 메서드
	public static int getStaticVarD() {
		return staticVarD;
	}
	public static void setStaticVarD(int i) {
		staticVarD = i;
	}
	public int getInstanceVarD() {
		return instanceVarD;
	}
	public void setInstanceVarD(int i) {
		instanceVarD = i;
	}

	// B 클래스의 메서드
	public void printVar(int i) {
		System.out.println("전달받은 값은 "+i+"입니다.");
	}
	
	public void printVar2(int i, int j) {
		int res = MainClassA.plusVar(i, j);
		System.out.println("결과는 "+res+"입니다.");
		// A 클래스의 static 메서드 plusVar() 호출해 출력
	}
	
	public void printVarA(MainClassA a) {
		System.out.println("A의 staticVarA : "+MainClassA.staticVarA);
		System.out.println("A의 instanceVarA : "+a.instanceVarA);
		System.out.println("A의 staticVarB : "+MainClassA.getStaticVarB());
		System.out.println("A의 instanceVarB : "+a.getInstanceVarB());
		// A 클래스의 변수에 접근해 출력
	}
	
	public void setVarA(MainClassA a) {
		// A 클래스의 변수 1씩 더하기
		
		MainClassA.staticVarA += 1;
		a.instanceVarA += 1;
		// 직접 접근
		
		int b = MainClassA.getStaticVarB()+1;
		MainClassA.setStaticVarB(b);
		
		int b2 = a.getInstanceVarB()+1;
		a.setInstanceVarB(b2);
		// setter 메서드로 접근
	}
	
}
package chapter11;

public class MainClassA {

	static int staticVarA = 5;
	private static int staticVarB = 10;
	int instanceVarA = 15;
	private int instanceVarB = 20;
	
	// private 변수 B의 getter/setter 메서드
	public static int getStaticVarB() {
		return staticVarB;
	}
	
	public int getInstanceVarB() {
		return instanceVarB;
	}
	
	public static void setStaticVarB(int i) {
		staticVarB = i;
	}
	
	public void setInstanceVarB(int i) {
		instanceVarB = i;
	}

	// A 클래스의 plusVar() 메서드
	public static int plusVar(int i, int j) {
		return i+j;
	}
	
	public static void main(String[] args) {
		
		int statC = SubClassB.staticVarC;
		int statD = SubClassB.getStaticVarD();
		
		SubClassB.staticVarC = 5;
		SubClassB.setStaticVarD(9);
		
		SubClassB b = new SubClassB();
		// B클래스 인스턴스 변수에 접근하기 위해 객체 생성
		
		int insC = b.instanceVarC;
		int insD = b.getInstanceVarD();
		
		b.instanceVarC = 13;
		b.setInstanceVarD(17);
		
		System.out.println("가져온 staticVarC : "+statC);
		System.out.println("B클래스 안의 staticVarC : "+SubClassB.staticVarC);
		System.out.println("가져온 staticVarD : "+statD);
		System.out.println("B클래스 안의 staticVarD : "+SubClassB.getStaticVarD());
		System.out.println("가져온 instanceVarC : "+insC);
		System.out.println("B클래스 안의 instanceVarC : "+b.instanceVarC);
		System.out.println("가져온 instanceVarD : "+insD);
		System.out.println("B클래스 안의 instanceVarD : "+b.getInstanceVarD());
		
		int localVarA = 3;
		int localVarB = 6;
		
		b.printVar(localVarA);
		b.printVar(localVarB);
		b.printVar2(localVarA,localVarB);
		b.printVar2(SubClassB.staticVarC,statD);
		
		MainClassA a = new MainClassA();
		b.printVarA(a);
		b.setVarA(a);
		b.printVarA(a);
	}

}
[실행 결과]
가져온 staticVarC : 4
B클래스 안의 staticVarC : 5
가져온 staticVarD : 8
B클래스 안의 staticVarD : 9
가져온 instanceVarC : 12
B클래스 안의 instanceVarC : 13
가져온 instanceVarD : 16
B클래스 안의 instanceVarD : 17
전달받은 값은 3입니다.
전달받은 값은 6입니다.
결과는 9입니다.
결과는 13입니다.
A의 staticVarA : 5
A의 instanceVarA : 15
A의 staticVarB : 10
A의 instanceVarB : 20
A의 staticVarA : 6
A의 instanceVarA : 16
A의 staticVarB : 11
A의 instanceVarB : 21
profile
🌱

0개의 댓글