1.class의 어원
1. Class
야구장에 보이는 수많은 관객들을 보았을 때 일반적인 사고 방식은?

A - 개별적인 관중들을 한 명 한 명 바라보면서 신원(?)을 파악하기 시작함
"전광판 옆측 좌석에 학교 선생님이 계시고,
오른쪽 두 번째 블럭 옆에는 내 친구 OO가 있고,
오른쪽 조명 아래쪽에는 OO가 있다."B - 관중들을 묶어서 하나의 ‘분류’ 개념으로 생각한다.
"사람이 진짜 많다."인간은 사물을 하나하나 개별적으로 인식하지 않고, 공통된 부분끼리 묶어서 분류(classify)할 수 있음
→ 인간이 가진 주의력(Attention)의 한계 때문
2. 분류, Classification
객체 지향에서는 세상에 존재하는 모든 객체들을 분류가 가능하다고 가정함
개별적인 실체로 존재하는 뽀로로와 핑구는 펭귄(Penguin)으로 분류(classify)할 수 있음

2-1. Penguin 클래스 작성
class Penguin { ... }펭귄의 생김새를 살펴보고, 몇 가지 속성과 행위를 나열
펭귄이 가진 속성 - field, 필드
- 이름(name) - 펭귄에게 이름을 지을 수 있음
- 나이(age) - 펭귄은 생명체이기 때문에 인간 기준으로 나이를 부여할 수 있음
- 몸무게(weight) - 펭귄은 몸무게가 있음
펭귄이 할 수 있는 행위 or 기능 - method, 메서드
- 생선을 먹는다 -
eat() - 잠을 잔다 -
sleep() - 같은 펭귄끼리 울음소리를 낸다 -
sing()
2-2. 도출한 내용을 토대로 펭귄의 속성과 행위를 작성
class Penguin {
int age;
int weight;
int height;
void eat() {
System.out.println("생선을 먹는다.");
}
// sleep(), sing()
}이처럼 펭귄 클래스(Penguin)를 활용하여 뽀로로를 생성할 수 있음
2-3. Penguin 클래스를 토대로 뽀로로 인스턴스(객체) 생성
Penguin pororo = new Penguin();2-4. pororo 이름 짓기
pororo.name = "뽀로로"; // pororo는 변수명이지 proro 객체가 가진 name 필드가 아님2-5. pororo에게 생선 주기(?)
pororo.eat(); // 생선을 먹는다.클래스
개(Dog), 사람(Person), 고양이(Cat), 시계, 음료
클래스는 일반적으로 분류에 대한 개념이지, 실체하진 않음(사람, 펭귄)
하지만, 객체(인스턴스)는 실체함(뽀로로, 핑구)
→ 실체하는 것은 인스턴스(Instance)
엄밀하게 보면, 붕어빵틀 역시 현실에 실체하기 때문에 클래스로 분류하면 객체 지향 개념과 다소 차이가 있을 수 있음
치와와, 진돗개, 불독 … 등 → ‘개’
박서준, 한소희, 유재석 … 등 → ‘사람’
정리하면,
class로 작성되는 대상은 주로 현실에 실체, 실존하지 않는 개념적인 대상으로 지정하는 편
따라서 class는 분류(classification)에 대한 개념이고, 실체하지 않음
ex) 사람, 펭귄, 개
반대로 클래스를 통해 생성된 객체(인스턴스)는 실체함(메모리 상에 개별적인 주소값으로 존재)
ex) 정해인, 뽀로로, 핑구
기술적으로 Person 클래스를 활용하여 ‘정해인’ 객체를 만들 수 있음
객체를 보다 구체적으로 표현하면 인스턴스(Instance)라고 표현하기도 함