개발자가 되고 싶은 개발자

[Java] 클래스 변수/인스턴스 변수 · 클래스 메소드/인스턴스 메소드 본문

Dev/Java & Spring

[Java] 클래스 변수/인스턴스 변수 · 클래스 메소드/인스턴스 메소드

Fullth 2021. 1. 12. 12:53

객체(Instance)

 

객체는 Instance를 포함하는 일반적인 의미입니다.

Car 클래스에서 Car를 생성하면 Car는 Car 클래스의 객체(인스턴스).

 

클래스 변수/인스턴스 변수

 

클래스 변수(static 변수)

모든 인스턴스가 하나의 저장공간을 공유하므로 항상 같은 값을 갖습니다.

인스턴스를 통해 호출하지 않고, 변수로 접근해서 사용할 수 있습니다.

 

인스턴스 변수

인스턴스가 생성될때마다 생성됩니다. 각기 다른 값을 유지할 수 있습니다.

class Example {
	static int test = 500;
    
    public static void main String(args[]) {
    
    	Example ex1 = new Example();
        Example ex2 = new Example();
        
        System.out.println(ex1.test); // 500
        ex2.test = 700;
        System.out.println(ex1.test); // 700
    }
}

// 다른 인스턴스를 생성하더라도, 하나의 저장공간을 공유함.
class Example {
	int test = 500;
    
    public static void main String(args[]) {
    
    	Example ex1 = new Example();
        Example ex2 = new Example();
        
        System.out.println(ex1.test); // 500
        ex1.test = 700;
        System.out.println(ex1.test); // 700
        System.out.println(ex2.test); // 500
    }
}
// 인스턴스마다 별도의 저장공간을 갖음.

클래스 메소드 / 인스턴스 메소드

 

클래스 메소드(static 메소드)

클래스 변수와 마찬가지로 인스턴스를 통하지 않고 클래스명.메소드명() 으로 호출이 가능합니다.

메소드 내에서 인스턴스 변수 사용 불가합니다.

 

인스턴스 메소드

인스턴스 생성 후 참조변수명.메소드명() 으로 호출

메소드 내에서 인스턴스 변수 사용이 가능합니다.

class MyMath {
	long a, b;
    
    long add () { // 인스턴스 메소드
    	return a+b;
    }
    
    static long add (long a, long b) { // 클래스 메소드
    	return a+b;
    }
    
    public static void main String(args[]) {
    
    	System.out.println(MyMath.add(100L+200L); // 클래스 메소드
        
        MyMath math = new MyMath();
        math.a = 100;
        math.b = 200;
        math.add(); // 인스턴스 메소드
    }
}

클래스를 설계할 때 공통적으로 사용하는 것,

인스턴스 변수를 필요로 하지 않을 때는 static으로 생성합니다.

 

참조: JAVA의 정석