본문 바로가기
Language/Java

[Java] 자바와 객체지향

by jaee_ 2021. 9. 26.
본 글은 📚 스프링 입문을 위한 자바 객체지향의 원리와 이해 를 읽고 정리한 내용입니다. 

 

객체지향을 이해하기 위해 먼저 큰 그림을 생각해보자. 

  • 세상에 존재하는 모든 것은 사물, 즉 객체(Object)이다. 
  • 각각의 사물은 고유하다. 
  • 사물은 속성을 갖는다. 
  • 사물은 행위를 한다. 

그리고 사물을 하나하나 이해하기 보다 사물을 분류(class)해서 이해하는 것이 인간의 인지법이다. 

  • 직립보행을 하며 말을 하는 존재를 사람이라고 분류한다. 
  • 연미복, 짧은 다리, 날지 못하는 새를 펭귄이라고 분류한다. 
  • 밤하늘에 반짝이는 사물들을 별이라고 분류한다. 

김종민(Object), 김연아(Object), 수지(Object)라고 하는 존재는 사람이라고 하는 분류(class)에 속한다. 그리고 사람은 나이, 몸무게, 키라는 속성(property)과 먹다, 자다, 뛰다 라는 행위(method)를 가지고 있다. 


캡! 상추다!

스프링 입문을 위한 자바 객체지향의 원리와 이해에서 객체지향의 4대 특성을 외우기 위해 적어놓은 키워드이다. 웃기긴 하지만 잘 외워진다. 꿀팁인 것 같다.

 

캡 - 캡슐화(Encapsulation) : 정보 은닉(information hiding)

상 - 상속(Inheritance) : 재사용

추 - 추상화(Abstraction) : 모델링

다 - 다형성(Polymorphism) : 사용 편의 


클래스 vs 객체 = 붕어빵틀 vs 붕어빵 ?? 

클래스의 객체의 관계가 붕어빵틀과 붕어빵으로 비유되는 것을 많이 들어봤을 것이다. 하지만 이것은 잘못된 예시이다. 

클래스 객체명 = new 클래스();
붕어빵틀 붕어빵 = new 붕어빵틀();    --- ???

새로운 붕어빵틀을 하나 만들었더니 붕어빵이 되었다?? 이해가 되지 않는 예제이다. 

 

그렇다면 아래의 질문에 답해보자.

  • 사람은 클래스인가? 객체인가? -- 클래스
  • 김연아는 클래스인가? 객체인가? -- 객체
  • 뽀로로는 클래스인가? 객체인가? -- 객체
  • 펭귄은 클래스인가? 객체인가? -- 클래스

위의 질문에서 구분을 잘 못하겠다면 질문을 바꿔보자. 클래스와 객체를 구분하는 간단한 방법은 나이를 물어보는 것이다. 

  • 사람의 나이는 몇 살인가? 
  • 김연아의 나이는 몇 살인가? 
  • 뽀로로의 나이는 몇 살인가? 
  • 펭귄의 나이는 몇 살인가? 

사람과 펭귄의 나이는 대답할 수 없을 것이다. 하지만 김연아와 뽀로로는 구글에 치면 언제 태어났는지 잘 나올 것이다. 즉, 클래스는 분류에 대한 개념이지 실체가 아니다. 객체는 실체이다. 그러므로 클래스와 객체는 다음과 같은 개념으로 설명할 수 있는 것이다. 

클래스 : 객체 = 사람 : 김연아 = 펭귄 : 뽀로로

클래스와 객체의 관계 = 분류(class)와 사물(object)의 관계 라는 것을 잊지 말자.

 


참고

 - 스프링 입문을 위한 자바 객체지향의 원리와 이해

댓글