클래스, 객체, 인스턴스는 무슨 차이가 있을까?
클래스 (Class)와 객체 (Object)
--
클래스는
객체를 생성하기 위한 기본 틀을 정의해 놓은 것이다.
즉, 객체의 설계도(틀)다.
class Car {
String color;
String model;
int maxSpeed = 200;
void drive() {
System.out.println("Let's go!!!");
}
}
객체는
클래스에 정의된 내용대로 완성하여 메모리에 생성(적재)된 것이다.
즉, 클래스에 정의된 설계도를 가지고 생성한 실체다.
Car myCar = new Car(); // Car 클래스의 객체 생성
myCar.color = "Black"; // 객체의 속성 정의
myCar.model = "Sedan";
myCar.drive(); // 객체의 메서드 호출
// Let's go!!! 문자열 출력
Car yourCar = new Car(); // Car 클래스의 객체 생성
yourCar.color = "Blue"; // 객체의 속성 정의
yourCar.model = "SUV";
yourCar.maxSpeed = 300;
yourCar.drive(); // 객체의 메서드 호출
// Let's go!!! 문자열 출력
클래스는 메모리에 저장되지 않는다.
클래스를 가지고 객체를 생성하면 해당 객체가 메모리에 저장된다.
클래스가 메모리에 저장(할당)되지 않는다는 것은
해당 클래스를 한 번도 접근(사용) 하지 않았다는 가정하에 메모리에 저장하지 않는다는 것이고,
한 번이라도 접근(사용)하게 되면 해당 클래스도 메모리에 저장(할당)하게 된다.
클래스는
최초에 접근(사용)한 당시에 한 번 메모리에 저장(할당)되며
이후에 또 접근하는 경우 메모리에 저장된 정보를 재사용하게 된다.
정리
클래스는 평소에 메모리에 저장하지 않고 있다가
해당 클래스를 가지고 객체를 생성하던가, 내부의 일부 데이터에 접근하던가 등
사용하게 되면 최초에 한에서 JVM에 의해 "메서드 영역"의 메모리에 저장하게 된다.
객체는 "힙 영역"의 메모리에 저장된다.
--
인스턴스 (Instance)
--
인스턴스는
특정 클래스의 객체를 가리키는 용어로
일반적으로 객체와 인스턴스는 같은 의미로 사용하기도 한다.
다만, 자세히 살펴보면
- 객체 : 클래스에 따라 생성된 실체
- 인스턴스 : 특정 클래스에 의해 생성된 객체를 가리킴
예시)
Car myCar = new Car();
- myCar는 객체다.
- myCar는 myCar클래스의 인스턴스다.
즉, 어떠한 클래스로부터 생성된 객체인지 정의할 때 사용하는 것이 "인스턴스"다.
객체와 인스턴스는
비슷한 의미로 굳이 엄격하게 구분할 필요는 없지만
세부적으로 따지면 다르다는 것은 알면 좋다.
--
객체의 구성요소 (속성, 기능)
--
객체는
속성과 기능으로 구성되어 있다.
- 속성 : 객체 안에 있는 변수 (멤버 변수, 특정, 필드, 상태라는 다양한 이름으로 부르기도 한다.)
- 기능 : 객체 안에 있는 메서드 (메서드, 함수, 행위라는 다양한 이름으로 부르기도 한다.)
위에 작성한 myCar, yourCar 객체를 예시로 들면
속성 : color, model, maxSpeed
기능 : drive()
--
인스턴스(객체)의 생성 및 사용
--
인스턴스(객체) 생성 기본 형식
클래스명 변수명; // 클래스명 타입의 참조변수만 선언 (메모리에 공간만 할당 / 아직 객체 생성X)
변수명 = new 클래스명(); // new 연산자를 통해 해당 클래스의 객체가 할당한 메모리의 빈 공간에 생성
// (값을 정의하지 않은 멤버변수는 기본값을 자동 초기화)
// 또는
클래스명 변수명 = new 클래스명(); // 한번에 선언과 할당(생성)
class Car {
String color;
String model;
int maxSpeed = 200;
void drive() {
System.out.println("Let's go!!!");
}
}
Car myCar; // 선언
myCar = new Car(); // 할당(생성)
Car yourCar = new Car(); // 선언과 할당
yourCar = myCar;
/*
myCar가 가지고 있는 값(주소 0x100)을 yourCar에 저장하게 되어
yourCar는 myCar와 같은 주소값을 가지게 되어 같은 곳(메모리)를 참조하게 된다.
버려진(아무도 참조하지 않는) 데이터는 GC(가비지 컬렉터)가 알아서 제거하게 된다.
*/
--
객체 배열
--
객체 또한 배열로 생성이 가능하다.
// 개별적으로 직접 여러 객체 생성하기
Car car1, car2, car3;
car1 = new Car();
car2 = new Car();
car3 = new Car();
// 배열로 객체 생성하기
Car[] car = new Car[3];
car[0] = new Car();
car[1] = new Car();
car[2] = new Car();
--
'Language > Java' 카테고리의 다른 글
오버로딩, 오버라이딩 (0) | 2024.10.16 |
---|---|
생성자 (+ new, this, this() 키워드) (0) | 2024.10.13 |
배열(Arrays 클래스) 관련 메서드 정리 (0) | 2024.10.11 |
배열 (+ 다차원 배열) (0) | 2024.10.10 |
조건문, 반복문 (+ break, continue, label) (0) | 2024.10.06 |