Programming language/Java

[Java]인스턴스(Instance)

  • -
반응형
인스턴스

처음에 객체와 인스턴스에 사이에서 혼란을 겪은 적이 있다.

객체는 인스턴스를 포함하며 객체지향 프로그래밍에서는 비슷한 의미로 사용되지만 두 단어는 분명 차이가 있다.

우선 클래스 타입으로 선언되었을 때를 객체라고 하며, 클래스가 실체화되었을 때 인스턴스라고 말한다.

 

내 생각에 객체와 인스턴스의 가장 큰 차이는 메모리에 할당 되느냐 안되느냐의 차이인 것 같다.

 

코드를 보자.

먼저 Cafe 클래스에는 두 변수와 메소드가 정의되어 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
package biz.test;
 
public class Cafe{
    
    String drink;    // 음료
    int pay;        // 가격            
    
    public void Americano(){
        drink = "Americano";
        System.out.println(drink);
    }    
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
package biz.test;
 
public class CafeGo{
    
    public static void main(String args[]) {            
        
        Cafe mydrink;
        mydrink = new Cafe();
        
        mydrink.Americano();
    }
}
cs

 

7번째 라인에서 Cafe라는 클래스 타입의 객체를 생성했다.(메모리 할당 X)

☞ mydrink는 객체

8번째 라인에서 mydrink는 인스턴스화되어 객체에 저장될 메모리 공간을 할당한다.(인스턴스화) 

☞ mydrink는 Cafe라는 클래스의 인스턴스

☞ 인스턴스가 생성되면(=클래스가 new 연산자에 의해 실체화 될 때) 생성된 인스턴스는 힙 영역(Heap Area)에 저장된다.

    ※힙 영역을 알기 위해서는 자바(JVM)의 메모리 구조를 이해해야 한다. ☞ 자바 메모리 구조 보러 가기

 

☞ Cafe 클래스의 인스턴스가 생성되면서 생성된 인스턴스를 가리키는 참조 변수(=레퍼런스 변수) mydrink를 반환한다. 

참조 변수는 인스턴스라고 할 수 없고 인스턴스를 가리키기 위한 변수이다.

 

인스턴스의 생성 후 참조 변수를 통해 아래처럼 객체의 메소드 또는 변수를 사용할 수 있게 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
package biz.test;
 
public class CafeGo{
    
    public static void main(String args[]) {            
        
        Cafe mydrink;
        mydrink = new Cafe();
        
        mydrink.Americano();
    }
}
cs

 


처음 접할 때면 많이 헷갈릴 수 있는 개념이므로 자주 봐주는 것이 도움이 될 것이다.

 

+ 피드백은 언제나 환영입니다 :)

 

반응형

'Programming language > Java' 카테고리의 다른 글

[Java]Split 함수  (0) 2018.08.13
[Java]JVM 메모리 구조  (0) 2018.08.12
[Error]java.lang.ArrayIndexOutOfBoundsException  (0) 2018.08.09
[Java]생성자(Constructor)  (0) 2018.08.08
[Java]객체와 클래스  (0) 2018.08.03
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.