클래스(class): 객체를 정의한 '설계도(blueprint)' 또는 '틀(frame)'
클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의되고 설계된 내용 그대로 생성
클래스는 객체 그 자체가 아니라 단지 객체를 생성하는 데 사용되는 하나의 틀
인스턴스(instance): 클래스를 통해 생성된 객체
인스턴스화(instanciate): 클래스로부터 객체를 만드는 과정
객체: 모든 인스턴스를 포괄하는 넓은 의미, 인스턴스: 해당 객체가 어떤 클래스로부터 생성된 것인지를 강조
public class ExampleClass {
int x = 10; //(1)필드
void printX() {...} //(2)메서드
ExampleClass {...} //(3)생성자
class ExampleClass2 {...} //(4)이너 클래스
}
(1) 필드: 클래스의 속성을 나타내는 변수 (자동차의 예. 모델명, 컬러, 바퀴의 수)
(2) 메서드: 클래스의 기능을 나타내는 함수 (자동차의 예. 시동하기, 가속하기, 정지하기)
(3) 생성자: 클래스의 객체를 생성하는 역할
(4) 이너 클래스: 클래스 내부의 클래스
클래스의 멤버(member): 필드, 메서드, 이너 클래스
필드와 메서드는 각각의 클래스가 가지는 속성(state)와 기능(behavior)을 대표
속성과 기능은 해당 클래스와 관련된 데이터의 집합, 핵심적인 정보를 담고 있음
클래스명 참조_변수명; // 인스턴스를 참조하기 위한 참조변수 선언
참조_변수명 = new 생성자(); // 인스턴스 생성 후, 객체의 주소를 참조 변수에 저장
참조 변수는 실제 데이터 값이 아니라 실제 다이터가 저장되어 있는 힙 메모리의 주소값
new
키워드는 생성된 객체를 힙 메모리에 넣으라는 의미를 가지고 있음. 생성자(클래스와 동일한 이름을 가졌지만 뒤에 소괄호가 붙음)을 통해 객체가 만들어지면 해당 객체를 힙 메모리에 넣는 역할 수행하게 됨.
클래스 Person
과 참조 변수 p
는 각각 클래스 영역과 스택 영역이라는 다른 위치에 저장됨.
메서드 구현 코드는 클래스 영역에 저장되고 객체 안에서는 그 위치를 가리키고 있음. 즉, 같은 클래스로 만든 모든 객체는 동일한 메서드 값을 공유하기 때문에 여러 번 같은 메서드를 선언해주는 것이 아니라 한번만 저장해두고 필요한 경우에만 클래스 영역에 정의된 메서드를 찾아 사용할 수 있는 것.
.
(포인트 연산자): '해당 위치에 있는 개체 안을 보세요' 라는 뜻
참조 변수명.필드명 // 필드값 불러오기
참조 변수명.메서드명() // 메서드 호출