📖 Books/자바 객체 지향의 원리와 이해

[Books] 클래스와 객체의 관계가 붕어빵과 붕어빵 틀이 아니라고?!

오늘 ONEUL 2023. 2. 27. 23:58

 

붕어빵의 배신

 

"붕어빵 틀에서 붕어빵을 찍어내지?
그러니까 붕어빵 틀은 클래스가 되는 거고 붕어빵은 객체가 되는 거야.
이 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가지만 기억하면 된다.

  • 클래스는 분류에 대한 개념이지 실체가 아니다.
  • 객체는 실체다.

 

 

 

※ 이 내용은 책 [스프링 입문을 위한 자바 객체 지향의 원리와 이해]를 보고 정리한 내용입니다.