본문 바로가기
Java

클래스와 객체 (Class & Object), 인스턴스 (Instance)

by KDW999 2023. 1. 2.

클래스 [ Class ]

- 자바에서 Class는 설계도

- 객체를 정의해 놓은 것, 객체를 생성하는데 사용

- 객체를 생성하기 위한 속성(필드, 멤버 변수)과 메소드가 정의

* * 클래스 선언은 한 파일에서 여러 개가 가능하나 파일명과 같은 클래스에만 public 접근 제한자를 붙일 수 있다

 

객체 [ Object ]

- 정의로는 실세계에 존재하는 모든 것

- 설계도인 클래스에 따라 객체는 메모리 영역에 생성된다.

- 속성(멤버 변수)과 기능(메서드)을 가지는 프로그램 단위

 

객체는 변수, 데이터 구조, 메서드 등 도 될 수 있는 메모리 값이다..

객체란 뜻이 참 아리송하게 느껴진다.

클래스와 객체의 유명한 예시로 클래스는 붕어빵 틀, 객체는 붕어빵이 있다.

 

// class : 객체를 생성하는 설계도 / 기준
class SmartPhone {
	
	// 멤버 변수, 속성
	String nation;
	String os;
        String owner;
	String telNumber;
	
	
	// 메서드, 함수
	void tel(String toTelNumber) { 
		System.out.println(toTelNumber+"에 전화중입니다.");
	}
}

SmartPhone이란 클래스에서 속성과 메서드를 위 처럼 작성할 시 다른 클래스에서 SmartPhone의 객체를 생성해주면 SmartPhone의 속성과 메서드를 사용할 수 있다.

 

인스턴스 [ Instance ]

- 클래스로부터 만들어진 객체를 인스턴스라고 한다.

- 클래스로부터 객체를 만드는 과정을 인스턴스화라고 한다.

- 메모리 상에 구현된 실체라고도 한다.

 

클래스 변수;

변수 = new 클래스(); // 객체 생성, new연산자가 반환한 객체의 주소를 변수에 할당한다. 

클래스 변수2 = new 클래스(); // 하나의 클래스에서 여러 개의 인스턴스 생성 가능

public class UseSmartPhone {

	public static void main(String[] args) {
	// 인스턴스 선언 및 생성
	SmartPhone myPhone; // 인스턴스 선언, myPhone은 참조변수, 생성하는 걸 인스턴스화라고 한다.
	myPhone = new SmartPhone(); // 인스턴스 생성, new연산자는 무언가를 생성한다는 의미, 스마트폰을 샀을 때 딱 공기계의 상태
	SmartPhone yourPhone = new SmartPhone(); // 선언과 동시에 생성
		
	// 인스턴스의 속성(멤버 변수)에 접근, 스마트폰을 사서 개통까지 한 상태
	myPhone.nation = "Korea";
	myPhone.os = "Android";
	myPhone.owner = "무야호";
	myPhone.telNumber = "010-1111-2222";
	
    // SmartPhone 클래스의 속성들을 myPhone 객체(인스턴스)에서 새로운 값으로 사용 
	System.out.println(myPhone.nation);
	System.out.println(myPhone.os);
	System.out.println(myPhone.owner);
	System.out.println(myPhone.telNumber);
		
	// 인스턴스의 기능을 사용(메서드를 호출)
	myPhone.tel("010-2222-2222");
    // "010-2222-2222에 전화중입니다."

★★★
	SmartPhone hisPhone = new SmartPhone();
	hisPhone.nation = "USA";
    System.out.println(hisPhone.nation);
    
	System.out.println("=====================");
	System.out.println("yourPhone " + yourPhone);
	System.out.println("hisPhone " + hisPhone);		
        hisPhone = yourPhone; // hisPhone이 바라보던 메모리 주소가 yourPhone의 메모리 주소를 바라본다.
                          // hisPhone이 yourPhone을 바라본다고 기존의 hisPhone의 메모리가 사라지는 건 아니다.
	System.out.println("yourPhone " + yourPhone);
	System.out.println("hisPhone " + hisPhone); 
	System.out.println("=====================");

	yourPhone.nation = "UK";
	System.out.println(hisPhone.nation);
★★★    
	}
}

★★★ 부분에서 hisPhone.nation을 처음엔 USA로 저장해놨으나 hisPhone = yourPhone으로 hisPhone의 주소값을 yourPhone의 주소값으로 변경하고 yourPhone.nation에 UK를 저장하면 hisPhone.nation도 yourPhone.nation과 같은 값이 나오는 걸 볼 수있다.

 

hisPhone.nation의 USA가 UK로 바뀐 과정 / 중간에 hisPhone = yourPhone으로 메모리 주소가 바뀐 것도 볼 수 있다.

 

댓글