붕어빵의 배신
"붕어빵 틀에서 붕어빵을 찍어내지?
그러니까 붕어빵 틀은 클래스가 되는 거고 붕어빵은 객체가 되는 거야.
이 new라는 연산자를 사용해서 붕어빵 틀에서 붕어빵을 찍어낼 수 있어!"
모두가 익숙했던 예시겠지만,
사실 클래스와 객체의 관계는 붕어빵과 붕어빵 틀이 아니다.
바로 예시부터 알아보자.
클래스 객체명 = new 클래스();
붕어빵틀 붕어빵 = new 붕어빵틀(); // ??
금형기계 붕어빵틀 = new 금형기계(); // ?????
새로운 금형기계를 하나 만들었더니 붕어빵틀이 되었다?
무언가 잘못된 예제임을 알 수 있다.
클래스와 객체의 관계를 이해하기 전에
먼저 객체가 무엇인지, 클래스는 또 무엇인지 이해해야 한다.
객체(Object)가 뭔데?
- 세상에 존재하는 모든 것은 사물, 즉 객체(Object)다.
- 각각의 사물은 고유하다.
- 사물은 속성을 갖는다. (필드)
- 사물은 행위를 한다. (메소드)
클래스(Class)가 뭔데?
인간의 인지법은 사물을 속성과 행위로 분류(class)한다
- 나무로 구성되어 있고, 안에는 검은 심이 있어 필기를 할 수 있는 도구
→ 연필 - 네 개 혹은 그 이상의 바퀴를 가지며 사람이나 물건을 싣고 오래 이동할 수 있는 기계
→ 자동차 - 직립보행을 하며 말을 하는 존재
→ 사람
Class와 Object의 관계
- Class
- 세상에 존재하는 객체의 분류. 그 개념이 정의되어 있는 것.
- 같은 속성과 기능을 가진 객체를 총칭하는 개념
- Objcet
- 개념을 적용할 수 있는 실체.
- 세상에 존재하는 유일무이한 사물.
🤔 클래스는 현상과 현실을 개념화하여 해석한 것이다. 같은 현상과 문제라도 어떻게 분류하고 정의하냐에 따라 다른 결과가 나온다. 클래스는 결국 현실을 단순화하여 정보와 행위의 단위로 구분한 것이라 할 수 있다.
객체는 분류를 만나기 전까지는 고정된 정의를 가지지 않는다. 즉, 객체는 어떤 관점이나 개념을 적용하여 분류하기 나름이라는 의미도 될 수 있다.
그럼 instance는 또 뭐야
- Object에 Class가 적용된 상태. 즉, 어떤 객체에 분류를 적용한 것.
- 클래스를 통해 만들어진 구체적인 객체.
붕어빵이 아닌 제대로 된 예제
public class 사람 {
private Stirng name;
private int age;
private String mbti;
public 사람(String name, int age, String mbti) {
this.name = name;
this.age = age;
this.mbti = mbti;
}
public void 코딩하다() {
System.out.println(this.name + "님은 코딩중입니다.");
}
public void 자다() {
Systme.out.println(this.name + "님은 자는중입니다.");
}
public String getName() {
return this.name;
}
public String getMbti() {
return this.mbti;
}
}
public class Main {
public static void main(String[] args) {
사람 oneul = new 사람("오늘", 100, "INFP");
oneul.코딩하다(); // 오늘님은 코딩중입니다.
oneul.자다(); // 오늘님은 자는중입니다.
System.out.println(oneul.getName() + "님의 MBTI는 " + oneul.getMbti() + "입니다.");
// 오늘님의 MBTI는 INFP입니다.
}
}
- oneul(Object)이라고 하는 존재는 사람이라는 분류(Class)에 속한다.
- 사람 분류의 객체(Object)들은 이름, 나이, MBTI 등의 속성(Property)과 코딩하다, 자다 같은 행위(Method)를 가지고 있다.
- 사람이라는 분류(Class)를 이용해 유일무이하고 새로운 하나의 사람(객체)을 만들어 oneul(객체참조변수)이라는 이름을 지어준 것이다.
자, 이제 처음으로 다시 돌아가서 붕어빵과 붕어빵틀 자리에
방금 살펴보았던 예시를 넣어보자.
클래스 객체명 = new 클래스();
사람 oneul = new 사람(); // 편-안
딱 2가지만 기억하면 된다.
- 클래스는 분류에 대한 개념이지 실체가 아니다.
- 객체는 실체다.
※ 이 내용은 책 [스프링 입문을 위한 자바 객체 지향의 원리와 이해]를 보고 정리한 내용입니다.
'📖 Books > 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
[Books] 어댑터요? 돼지코 같은건가? 🐷 (0) | 2023.03.06 |
---|---|
[Books] 하나의 객체는 하나의 책임만 가져야 한다? (0) | 2023.03.03 |
[Books] Java에 초기화 블록이 있다는 사실 아셨나요? (0) | 2023.02.28 |
[Books] 전역변수 사용을 왜 지양해야 할까? (0) | 2023.02.25 |
[Books] 자바는 어떻게 개발자에 대한 사랑을 실천했을까? (2) | 2023.02.24 |