선생님이 말씀하시는 객체지향의 중요성
클래스 : 객체를 정의한 설계도 또는 틀이다. 객체를 생성하는데 사용된다. (설계도)
객체 : 클래스에 정의되고 설계된 내용 그대로 생성된다.(설계도대로 만들어진 제품)
클래스는 객체 그 자체가 아니라 단지 객체를 생성하는데 사용되는 하나의 틀이다
인스턴스 : 클래스를 통해 생성된 객체를 해당 클래스의 인스턴스라고 부른다. 객체를 만드는 과정을 우리는 '인스턴스화' 라고 부른다.
객체와 인스턴의 차이는?
구분할 필요는 없으나 굳이 하자면 객체는 모든 인스턴스를 포괄하는 넓은 의미. 인스턴스는 해당 객체가어떤 클래스로부터 생성된 것인지를 강조한다.
왜 클래스 생성 후 객체를 생성해야하는가?
붕어빵 틀만 잘 만들어놓으면 백번이고 천번이고 같은 모양의 붕어빵을 잘 만들어낸다.
그래서 클래스를한번 잘 정의해 놓으면, 매번 객체를 생성할 때마다 어떻게 객체를 만들어야 할지 더 이상 고민하지 않고 클래스로부터 객체를 새엉해 사용하면 된다.
public class ExampleClass {
int x = 10; // (1)필드
void printX() {...} // (2)메서드
ExampleClass {...} // (3)생성자
class ExampleClass2 {...} // (4)이너 클래스
}
객체는 크게 속성과 기능이라는 두 가지 구성요소로 이뤄진다.
객체생성은 new 키워드로 생성한다.
클래스명 참조_변수명 = new 생성자();
new 키워드는 생성된 객체를 힙 메모리에 넣으라는 의미를 가지고 있는데, 생성자를 통해 객체가 만들어지면 해당 객체를 힙 메모리에 넣는 역할을 한다.
따라서 우리가 new 키워드와 생성자를 통해 클래스의 객체를 생성한다는 것은 해당 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것과 같습니다.
클래스 Person과 참조 변수 p는 각각 클래스 영역과 스택 영역이라는 다른 위치에 저장된다.
생성자로 만들어진 인스턴스는 힙 메모리 영역에 들어가 객체 내부에는 클래스의멤버들이 위치하게 된다.
주목해야할 것은 메서드의 구현 코드 위치가 클래스 영역에 저장되고 객체 안에서는 그 위치를 가리키고 있다.
즉 같은 클래스로 만든 모든 객체는 동일한 메서드 값을 공유하기에 한번만 저장해두고 필요한 경우 클래스 영역에 정의된 메서드를 찾아 사용할 수 있다는 것이다.
기억해야할 것은 생성된 객체에서 필드값은 실제 저장공간이 객체 내부에 있다는 것과 메서드는 다른 영역에 하나만 저장해놓고 공유한다는 점이다.
위 방법대로 생성된 객체를 활용하려면
'.' = 포인트 연산자 = 해당 위치에 있는 객체 안을 보세요" 의미이다.
참조 변수명.필드명 // 필드값 불러오기
참조 변수명.메서드명() // 메서드 호출
*내가 약한 부분
객체를 생성할 때 특정 클래스 타입의 참조 변수를 선언 후 new 키워드와 생성자를 통해 인스턴스를 생성하는데 이 때 참조변수에 할당을 한다.
참조변수는 실제 데이터 값이 아니라 실제 데이터가 저장되어 있는 힙 메모리의 주소값을 가리킨다.