본문 바로가기
JAVA

[JAVA] 클래스, 객체, 인스턴스(인스턴스 생성 및 사용)

by 정공자씨 2024. 4. 17.

 

클래스, 객체, 인스턴스의 정의

 
 

클래스(Class)

  • 객체를 생성하기 위한 설계도의 역할을 함
  • 클래스는 프로그램에서 사용할 객체의 틀을 정의하는데 
    • 클래스에는 객체의 속성(필드 = 멤버변수), 행위(메서드)로 구성되어 있음
  • 자바 실행 시에, 클래스는 JVM 메모리의 클래스 영역(Class Area)에 로드

 

객체(Object)

  • 속성(멤버변수)과 행위(메서드)를 가지는 실체
  • 객체는 클래스의 인스턴스(Instance)

 
 

인스턴스(Instance)

  • 클래스에 정의된 내용대로 객체가 메모리(heap 영역)에 생성된 상태
    • 클래스를 기반으로 생성된 객체
  • 클래스를 기반으로 생성된 각각의 인스턴스는 속성과 행위를 가짐
  • 객체와 인스턴스 : 용어를 혼용하여 사용

 

 
 

 

클래스

 

1. 클래스 정의하여 사용하기

  • 객체를 만들어서 사용하기 위해서는 제일 먼저 클래스를 정의해야 함
Book 클래스는
book이라는 객체를 만들기 위한 설계도 역할을 함

book은 객체
book은 title(이름), price(가격) 등의 속성을 가지고 → 필드(멤버변수)
showPrice(가격을 확인하는 행위)는 행위를 가짐 →  메서드

 
① public

  • 접근지정자 중 하나
  • 다른 클래스, 다른 패키지 내의 클래스 등에서 해당 클래스에 대한 접근 범위를 나타냄
  • public이라서 어디서든지 접근이 가능(다른 클래스, 다른 패키지에서도 가능)

② Book

  • 클래스 이름(클래스명)

③ 생성자

  • 생성자 메서드는 객체가 생성(객체를 사용할 수 있도록 메모리에 할당)될 때 자동으로 실행되는 특수 목적의 메서드
    • Book( );   → 생성자(매개변수가 없으므로 기본생성자)
자동으로 실행된다는 뜻은
별도로 생성자 메서드를 정의하지 않아도, 컴파일 시에 기본 생성자를 자동으로 추가해줘서 사용할 수 있음
  • 생성자 메서드명
    • 클래스명과 동일한 이름의 메서드 명을 가짐
    • Book 클래스의 생성자 메서드는 Book( );
  • 생성자는 객체 생성 시에 멤버변(필드)수를 초기화 하기 위해 사용
    • Book b = new Book();   
    • 객체를 생성하면서, 멤버변수(필드)값을 기본값으로 초기화 함 
  • 오버로딩(overloading) 하여 사용할 수 있음
    • 생성자 메서드의 이름이 같으면서
    • 매개변수의 개수, 타입, 순서를 다르게 구성하여, 멤버변수의 값을 초기화할 때 사용할 수 있음
- 오버 로딩 : 메서드명은 같고
                    매개변수의 개수, 매개변수 타입, 순서를 다르게 설정하여 사용할 수 있음
// 생성자 메서드 - 오버로딩

public Book() { } // 매개변수 없음, 객체 생성 시에 호출

public Book(int price) { // 매개변수 1개, price 멤버변수의 값을 초기화
	this.price = price;
}

public Book(String title) { // 매개변수 1개, title 멤버변수의 값을 초기화
    this.title = title;
}

public Book(int price, String title) { // 매개변수 2개, price, title 멤버변수의 값을 초기화
	this.price = price;
	this.title = title;
}

 

 
2. 클래스를 실제로 사용하기 위해서는?

  • 클래스를 실제로 사용한다는 것은, 클래스라는 설계도를 기반으로 객체를 사용할 수 있도록 객체를 생성하는 것
  • 즉, 클래스를 기반으로 하여 인스턴스(객체)를 메모리에 생성하여 객체를 사용할 수 있음


 
 
 
 
 


인스턴스(객체) 생성 및 사용

 
1. 인스턴스(객체) 생성하기

new 클래스명();
  • new 연산자를 이용하여 생성하고
  • 이를 통해서, 인스턴스(객체)를 메모리에 생성
    • heap 영역에 인스턴스(객체) 생성

 

2. 인스턴스(객체)를 생성하고 사용하기

클래스명    참조변수;
  • 인스턴스와 같은 클래스 타입을 가진 참조변수를 선언
  • 참조변수 : 인스턴스의 주소값을 담기 위해 선언함
참조변수  =  new 클래스명();
  • 인스턴스가 생성된 메모리의 위치 값(주소값)을 참조변수에 대입
  • 이 참조변수에 new 연산자를 이용하여 생성한 객체(실제로는 주소값)을 대입

 
 
3. 인스턴스(객체) 생성과 참조변수 대입을 동시에 설정

클래스명  참조변수  =  new  클래스명();
  • 클래스 타입의 참조변수는 대입 시에 인스턴스가 생성된 메모리의 위치값(주소값)을 가짐
    • 따라서, 위치값을 가지는 참조변수를 이용하여 인스턴스에 접근
  • 해당 참조변수를 통하여 멤버변수(필드) 및 메서드에 접근하여 사용할 수 잇음

 

[ 예제 ]

Class Book {
    int price; // 멤버변수(필드)
    String title;

    public priceShow(){ // 메서드
        System.out.println("책의 가격은 " + price + "입니다.");
    }
}

public Class Bookstore {
    public static void main() {		
        Book b = new Book(); // 인스턴스 생성
    }
}

 
 
 
4. 인스턴스를 클래스 타입의 참조변수에 대입했을 때의 메모리 상태

  • new Book(); 코드를 사용하여, 인스턴스를 생성하고
  • 참조변수 b(Book 클래스 타입으로 참조변수 b를 생성)에 대입

 
 
 
 
 
 




인스턴트 필드 (멤버변수)

1. 멤버변수(필드)

  • 인스턴스(객체) 생성 후에 메모리에 실제로 생성된 멤버 변수
heap 메모리 영역에 생성된 Book 인스턴스

 
 
 

2. 멤버변수(필드)에 접근하는 방법

  • 도트 연산자(.)를 사용
  • 참조변수와 도트 연산자를 이용하여 접근
Book b = new Book(); // 참조변수 b

// .연산자로 인스턴스의 멤버변수 값을 가지고 옴
String num = b.price; 
int name = b.title; 

// .연산자로 인스턴스의 멤버변수 값을 변경
b.price = "소공녀";
b.title = 13000;

 

 
 
3. 특징

  • 인스턴스(객체)를 생성하면, 멤버변수는 기본값으로 초기화
  • 즉, new bool(); (인스턴스 생성) 하면
    • price는 int타입이므로, price = 0으로 초기화 되고
    • title은 String타입이므로, title = null로 초기화

 

멤버변수 타입에 따른 기본적인 초기값

 
 
 
 
 

인스턴스 메서드

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
출처: https://kadosholy.tistory.com/89 [KADOSHoly:티스토리]