클래스(Class)
객체를 정의한 '설계도, 틀'
인스턴스(instance)
클래스를 통해 생성된 객체
public class ExampleClass {
int x = 10; // (1)필드
void printX() {...} // (2)메서드
ExampleClass {...} // (3)생성자
class ExampleClass2 {...} // (4)이너 클래스
}
1. 필드 - 클래스의 속성을 나타내는 변수입니다.
자동차로 예를 들면 모델명, 컬러, 바퀴의 수 등이 포함될 수 있습니다.
2. 메서드 - 클래스의 기능을 나타내는 함수입니다.
자동차를 예로 들면 시동하기, 가속하기, 정지하기 등이 포함될 수 있습니다.
3. 생성자 - 클래스의 객체를 생성하는 역할을 합니다.
4. 이너 클래스 - 클래스 내부의 클래스를 의미합니다.
필드, 메서드, 생성자 -> 멤버(member) 라고 부른다.
속성 -> 필드
기능 -> 메서드
속성과 기능은 이너 클래스와 함께 객체의 멤버(member) 라고 부른다.
필드와 메서드는 각각의 클래스가 가지는 속성(state)와 기능(behavior)을 대표합니다. 속성과 기능은 해당 클래스와 관련된 데이터의 집합이며, 핵심적인 정보를 담고있다고 할 수 있습니다.
포인트 연산자(.)를 통해 해당 객체의 멤버에 접근이 가능하다.
포인트 연산자(.)의 의미는
'해당 위치에 있는 객체 안을 보세요.' 이다.
1 참조 변수명.필드명 // 필드값 불러오기
2 참조 변수명.메서드명() // 메서드 호출
객체는 다음과 같이 생성한다.
1 클래스명 참조_변수명; // 인스턴스를 참조하기 위한 참조변수 선언
2 참조_변수명 = new 생성자(); // 인스턴스 생성 후, 객체의 주소를 참조 변수에 저장
참조 변수는 실제 데이터 값이 아니라 실제 데이터가 저장되어 있는 힙 메모리의 주소값을 가리킨다.
new 키워드는 생성된 객체를 힙 메모리에 넣으라는 의미를 가지고 있는데,
클래스명 참조_변수명 = new 생성자();
간편하게 이렇게 선언할수 있다.
먼저 참조 변수는 앞서 설명한대로 실제 데이터 값을 저장하는 것이 아니라 실제 데이터가 위치해있는 힙 메모리의 주소를 저장하는 변수를 의미한다.
따라서 우리가 new 키워드와 생성자를 통해 클래스의 객체를 생성한다는 것은 해당 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것과 같다.
그림에서 볼 수 있는 것처럼 클래스 Person과 참조 변수 p는 각각 클래스 영역과 스택 영역이라는 다른 위치에 저장된다.
Person -> 클래스 영역으로, p -> 스택 영역으로 저장된다.