클래스(Class)란 객체를 정의한 '설계도(blueprint)' 또는 '틀(frame)’이라 할 수 있다.
즉, 클래스는 객체를 생성하는데 사용되며, 반대로 객체는 클래스에 정의되고 설계된 내용 그대로 생성된다.
클래스는 객체 그 자체가 아니라 단지 객체를 생성하는 데 사용되는 하나의 틀이라는 점이 중요한 점이다.
객체와 인스턴스의 차이?
-객체는 모든 인스턴스를 포괄하는 넓은 의미이고, 인스턴스는 해당 객체가 어떤 클래스로부터 생성된 것인지를 강조한 것.
결과적으로, 클래스를 한번 잘 정의해 놓으면, 매번 객체를 생성할 때마다 어떻게 객체를 만들어야 할 지 더이상 고민하지 않고, 그저 클래스로부터 객체를 생성해서 사용하기만 하면 된다.
필드(field) : 클래스의 속성을 나타내는 변수
메서드(method) : 클래스의 기능을 나타내는 함수
생성자(constructor) : 클래스의 객체를 생성하는 역할
이너 클래스(inner class) : 클래스 내부의 클래스
생성자를 제외한 나머지 3가지 요소를 클래스의 멤버(member)라 한다.
객체는 크게 속성과 기능이라는 두 가지 구성요소로 이뤄져있다.
속성과 기능은 각각 필드와 메서드로 정의되는데, 일반적으로 하나의 객체는 다양한 속성과 기능의 집합으로 이뤄져 있다.
그리고 이러한 속성과 기능은 이너클래스와 함께 객체의 멤버(member)라 부른다.
new 키워드를 사용하여 실제 객체를 생성할 수 있다.
class CarTest {
public static void main(String[] args) {
Car bmw = new Car(); // Car 클래스를 기반으로 생성된 bmw 인스턴스
Car tesla = new Car(); // Car 클래스를 기반으로 생성된 tesla 인스턴스
Car audi = new Car(); // Car 클래스를 기반으로 생성된 audi 인스턴스
}
클래스명 참조변수명; // 인스턴스를 참조하기 위한 참조변수 선언
참조변수명 = new 생성자(); // 인스턴스 생성 후, 객체의 주소를 참조 변수에 저장
//클래스명 참조변수명 = new 생성자();
객체를 생성한 후에는 포인트 연산자(.)를 통해 해당 객체의 멤버에 접근이 가능하다.
참조 변수명.필드명 // 필드값 불러오기
참조 변수명.메서드명() // 메서드 호출
참조 변수 : 실제 데이터가 위치해있는 힙 메모리의 주소를 저장
new 키워드를 통한 객체 생성 : 해당 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것
메서드 구현 코드는 클래스 영역에 저장되고 객체 안에서는 그 위치를 가리킨다.
즉, 같은 클래스로 만든 모든 객체는 동일한 메서드 값을 공유하기 때문에 여러 번 같은 메서드를 선언해주는 것이 아니라 한번만 저장해두고 필요한 경우에만 클래스 영역에 정의된 메서드를 찾아 사용할 수 있는 것이다.