본문 바로가기
[JAVA]/JAVA 기본

[JAVA] 클래스와 객체

by 팡펑퐁 2022. 9. 2.
728x90

<클래스와 인스턴스의 이해를 돕기 위한 예>

클래스(Class)

어떤 객체를 정의하는 설계도나 틀이며, 일반적으로 하나의 소스 파일에 하나의 클래스를 정의하는 것이 권장된다.

 

객체(Object)

실재하는 모든 것(사물, 생명, 생각, 철학 등), 기본적으로 클래스없이 객체 생성은 불가능하다.

 

인스턴스(instance)

구제척인 객체, 어느 클래스로부터 생성된 객체임을 강조한다.

 

 

클래스의 구성 요소

public class Example {
	int a = 0; // (1)필드
	void b() {...} // (2)메서드
	Example {...} // (3)생성자
	class inner {...} // (4)이너 클래스

 

필드(field) : 클래스의 속성을 나타내는 변수
메서드(method) : 클래스의 기능을 나타내는 함수
생성자(constructor) : 클래스의 객체를 생성함
이너 클래스(inner class) : 클래스 내부의 클래스

 

객체의 구성요소

속성 : 필드로 정의됨(ex. 아이폰의 색상, 모델에 따른 기기 사이즈, 디스플레이 등)
기능 : 메서드로 정의됨(ex. 전화 걸기, 카메라 등)

 

하나의 객체는 다양한 속성과 기능이 있으며, 이러한 속성과 기능은 이너 클래스와 함께 객체의 멤버(member)라고 함.

 

<객체 생성 과정>

 먼저 특정 클래스 타입의 참조 변수를 선언하고, new 키워드와 생성자를 통해 인스턴스(객체)를 생성하여 참조 변수에 할당한다. 참조 변수는 실제 데이터가 저장되어 있는 힙 메모리의 주소 값을 가리킨다. new 키워드는 생성자가 객체를 만들면 이를 힙 메모리에 넣는 역할을 수행한다.

 

 위 그림을 통해 알 수 있듯이 클래스는 클래스 영역에 저장되고 참조 변수는 스택 영역에 저장된다. 또한, 같은 클래스로 만든 객체는 클래스 영역에 저장된 하나의 메서드에 접근하는 방식으로 동일한 메서드 값을 공유한다. 

 

클래스로 생성된 객체를 사용하는 법

 

참조변수명.필드명 // 필드값을 불러옴
참조변수명.메서드명() // 메서드 호출
// "." 포인트 연산자를 이용하여 특정 인스턴스의 필드와 메서드에 접근함
package Main.java;

public class PhoneTest {
    public static void main(String[] args) {
        Phone iphone = new Phone("iphone 14", "sierrablue"); // 객체 생성
     // 클래스명 참조변수명     생성자   

        System.out.println("내 폰은 " + iphone.model + "이고, 색상은 " + iphone.color + "입니다.");
        // 필드 호출
        iphone.call(); // 메서드 호출
        iphone.camera();
    }
}

class Phone{
    public String model; //필드 선언
    public String color;

    public Phone(String model, String color) { // 인스턴스 초기화를 위한 생성자 함수
        this.model = model;
        this.color = color;
    }

    void call() { // 메서드 선언
        System.out.println("전화를 거는중");
    }
    void camera() {
        System.out.println("카메라 시스템 작동중");
    }

}

/*
출력 
내 폰은 iphone 14이고, 색상은 sierrablue입니다.
전화를 거는중
카메라 시스템 작동중
*/
728x90

'[JAVA] > JAVA 기본' 카테고리의 다른 글

[JAVA] 생성자  (0) 2022.09.05
[JAVA] 자바의 변수와 메서드(오버로딩)  (0) 2022.09.04
[JAVA] 입출력  (0) 2022.08.30
[JAVA] 연산자  (1) 2022.08.30
[JAVA] 변수와 타입  (0) 2022.08.30