백업하는 인생

인스턴스멤버와 정적멤버 본문

java/이론

인스턴스멤버와 정적멤버

sunmn 2022. 8. 22. 19:39

객체와 인스턴스 차이점에 대해서 구글링해보았다. 

객체란? 소프트웨어 세계에 구현할 대상
클래스란? 이를 구현하기 위한 설계도
인스턴스란? 이 설계도에 따란 소프트웨어 세계에 구현된 실체

..... 쩝.. 뭔가 알거 같으면서도 모르겠다.

 

객체를 만들 때 객체는 클래스라는 설계도에 의해서 만들어지고, 만들어진 그 객체는 메모리에 저장되어진다. 

메모리에 저장되어 진 상태의 객체를 인스턴스라고 부르는 거 같다. 

그냥 인스턴스는 객체에 포함되는 개념이기 때문에, 그냥 객체와 인스턴스는 거의 같은 의미라고 보면 될 거 같다. 

인스턴스멤버와 정적멤버

1) 인스턴스멤버

인스턴스 멤버란 new를 이용하여 객체를 생성했을 때 비로소 사용할 수 있는 필드와 메소드를 말한다. 

이 때 사용된 필드와 메소드를 각각 인스턴스 필드와 인스턴스 메소드라고 부른다. 

간단히 말해서 지금까지 new 어쩌고 하면서 객체생성하면서 작업해왔던 방식들이 인스턴스 멤버를 사용한 방식이다. 

뭔 말인지 모를 땐 예시를 보자.

public class Calculator {
	int plus(int x, int y) { //5, 10을 받아서 
		return x + y; //계산된 값 반환
	}
}
public class ClaculatorExample {
	public static void main(String[] args) {
    
    //new를 사용하여 Calculator라는 객체를 만들고 calculator라는 변수에 담은 후
	Calculator calculator = new Calculator();
        
	int result = calculator.plus(10, 5); //Calculator 클래스 속 plus 메소드로 인수(10,5)
	System.out.println(result);
	}
}

예문을 보면 기존에 객체를 만들 때 사용해오던 방식이라는 것을 알 수 있다. 

여기서 쓰인 필드와 메소드들을 인스턴스 멤버라고 부른다. 

 

2) 정적멤버

필드나 메소드 앞에 static이라는 글자가 붙은 것을 각각 정적필드, 정적메소드라고 부른다.

그리고 이것들을 일컬어서 정적 멤버라고 한다. 

정적필드와 정적메소드는 위의 인스턴스 방식과는 다르게 객체를 생성하지 않고 사용 할 수 있다

어려우니까 그림을 보자.

아래 그림 중 첫번째 그림은 인스턴스멤버를 이용한 방식이고, 아래는 정적멤버를 이용한 방식이다.

인스턴스멤버를 이용한 방식

인스턴스 필드와 인스턴스 메소드는 new를 이용해 Car라는 객체를 생성하여 그 객체가 메모리에 저장되어 졌을 때 꺼내 쓸 수 있는 반면, 

정적멤버를 이용한 방식

정적 필드와 정적메소드는 내가 따로 객체를 생성하지 않아도 이미 Car라는 객체가 메모리에 저장되어있기 때문에 그냥 가져다 쓰기만 하면 된다

정적멤버는 마치 원룸 풀옵션과 같다. 이미 다 세팅 되어있는 걸 그냥 우리는 쓰기만 하면 되니까.. 

 

정적멤버를 이용한 예시를 확인해보자. 위에 있는 인스턴스멤버 예시를 그대로 정적멤버로 바꾼 것이다.

plus라는 메소드에 static을 붙이는 순간 plus는 정적메소드가 되고, 정적메소드는 따로 객체를 만들지 않고 바로 Calculator라는 클래스에서 꺼내 쓸 수 있다

 

3) 주의사항 

static 속에는 인스턴스 필드나 메소드를 넣을 수 없다

인스턴스 멤버를 static안에서 사용하고 싶다면 static속에 객체를 따로 생성하여야한다. 

'java > 이론' 카테고리의 다른 글

getter, setter 메소드  (0) 2022.08.23
싱글톤  (0) 2022.08.23
클래스와 객체2_클래스와 객체 생성하여 이용해보기  (0) 2022.08.21
클래스와 객체1_ 클래스와 객체란?  (0) 2022.08.21
변수  (0) 2022.08.02
Comments