[Java] 인스턴스 멤버 & 클래스 멤버

temprmn·2023년 5월 23일
0

🧒 Java 기초

목록 보기
7/9
post-thumbnail

인스턴스 멤버 & 클래스 멤버

인스턴스 멤버

📚 TIL 6일차에서 배운 필드, 그리고 메서드는 전부 인스턴스 멤버이다. 객체를 생성해야 사용할 수 있고, 각 인스턴스마다 고유한 값을 가질 수 있다.

하지만 객체가 인스턴스화 될 때마다 객체의 메서드가 생성되는 것은 아니다. 메서드는 메서드 영역에 두고, 모든 인스턴스들이 공유해서 사용할 수 있도록 한다. 인스턴스를 통해서 메서드가 사용되도록 제한을 걸어둔 것.

사용할 땐 아래처럼.

class Example {
	
    public int value;
    
    public void setValue(int value) {
    
    	this.value = value;
    }
}

class Main {
	public static void main(String[] args) {
    	
        Example ex = new Example();
        
        ex.setValue(10);
        System.out.println(ex.value); // [결과: 10]
	}
}

클래스 멤버

클래스 멤버는 (인스턴스 멤버에서 언급한) 메모리에 고정적으로 위치하고 있는 멤버이다. (클래스와 같은 위치에 있다.) 그렇기 때문에 객체를 생성하지 않아도 사용이 가능하다.

static 키워드를 사용하면 인스턴스 멤버였던 필드와 메서드를 클래스 멤버로 바꿔줄 수 있다. 주로 공용적인 데이터를 다루는 필드나 메서드를 클래스 멤버로 선언한다.

아래처럼 생긴게 클래스 멤버. (static 키워드를 사용한다.)

class Example {
	
    static int num = 10;
    
    static int multiple(int num) {
    	
        int sum = num * 10;        
    	return sum;
    }
}

클래스 멤버를 사용할 때는 아래처럼.

class Main {
	public static void main(String[] args) {
    	
        Example.num = 50;
        System.out.println(Example.num); // [결과: 50]
        
        int newNumber = Example.multiple(Example.num);
		System.out.println(newNumber); // [결과: 500]
        
	}

⚠️ 주의할 점 ⚠️

클래스 멤버로 선언된 메서드는 인스턴스 멤버를 사용할 수 없고, 반대로 인스턴스 멤버로 선언된 메서드는 클래스 멤버를 사용할 수 없다.

잘못된 예시

class Example {
	
    public int value;
    static int number;
    
    public void setValue() {
    
    	/*** 불가능 ***/
    	value = number;
    }
    
    static void setNumber() {
    
    	/*** 불가능 ***/
    	number = value;    
    }
}
profile
`ISFJ` T 49% F 51% /

0개의 댓글