[JAVA] 객체지향 프로그래밍 기초(feat. 클래스, 객체, 필드)
클래스(Class)
- 클래스(Class)는 '객체(Object)를 정의해놓은 것' 객체 그 자체가 아닌 객체 생성하는데 사용되는 틀.
- 클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다.
클래스의 정의 : 클래스란 객체를 정의해 놓은 것이다.
클래스의 용도 : 클래스는 객체를 생성하는데 사용된다.
클래스 구성요소 : 필드(int x = 1;), 메서드(void prin(){}), 생성자(Post), 이너클래스(class Post2)
객체(Object)
- 객체의 사전적인 정의는 '실제로 존재하는 것'
- 우리가 주변에서 볼 수 있는 사물들이 곧 객체
- 클래스와 객체 관계는 설계도와 제품의 관계
- 객체지향이론에서는 사물과 같은 유형적인 것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주한다.
- 프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 의미한다.
객체의 정의 : 실제로 존재하는 것. 사물 또는 개념.
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름.
객체의 구성요소 : 속성, 기능
객체 구조
클래스명 참조_변수명 = new 생성자();
- 참조 변수는 실제 데이터 값이 아닌 힙 메모리의 주소값을 가리킴
- new 키워드는 생성된 객체를 힙 메모리에 넣으라는 의미
- new 키워드와 생성자를 통해 클래스의 객체를 생성한다는 것은 해당 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것과 같다.
Post(클래스) post(참조 변수) = new Post();
- Post: 클래스 영역의 저장
- post: 스택 영역의 저장
- 생성자로 만들어진 인스턴스는 힙 메모리 영역들어가며 객체 내부에는 클래스의 멤버들 위치
필드 : 클래스에 포함된 변수, 객체의 속성을 정의
종류 : 클래스 변수, 인스턴스 변수, 지역변수
class Post { // => 클래스 영역
int postId; // 인스턴스 변수
static int classPostId; // 클래스 변수(static 변수, 공유변수)
void method() { // => 메서드 영역
int postId = 0; // 지역 변수. {}블록 안에서만 유효
}
}
필드 종류 | 특징 | 저장 영역 |
인스턴스 변수 | 고유한 속성을 저장하기 위한 변수, new 생성자()를 통해 인스턴스가 생성될때 생성 | 힙 메모리 영역 |
클래스 변수 | static 유무, 공통된 저장공간을 공유 | 힙 메모리 영역 |
지역 변수 | 메서드 내에 선언, 매세더 내에서만 사용가능 변수 직접 초기화하지 않으면 값 출력시 오류 발생 |
스택 메모리 영역 |