본문 바로가기
JAVA/ETC

[객체 지향 4대 특성 - 캡!상추다] 0.개요

by 자이구 2023. 11. 23.

절차적/구조적 프로그래밍까지의 과정은 인간이 기계를 이해하려는 노력에서 크게 벗어나지 못했다. 

기존의 구조적 프로그래밍 언어에서 가장 중요한 것은 "함수"였다. 

함수는 코드를 논리적인 단위로 구분하고 분할해서 정복하자는 Divide and Conquer의 의지였다. 

중복 제거 / 논리의 분할의 중점을 둔 프로그래밍이 조금 더 편해지고 나서 더욱 파격적인 제안이 나왔는데 

"우리가 주변에서 사물을 인지하는 방식대로 프로그래밍할 수 있지 않겠는가" 하는 것이 바로 객체 지향이다. 

 

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

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

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

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

객체 지향 전에는 속성과 메서드를 객체라는 단위로 묶지 않고 속성 따로 메서드 따로 분리된 형태로 프로그램을 작성했다.

객체 지향은 인간의 인지 및 사고 방식까지 프로그래밍에 접목하는 인간 지향을 실천하고 있는 것이다. 

그래서 객체 지향은 직관적이다. 


객체 지향의 대표적인 잘못된 설명의 예는 바로 클래스와 객체의 관계는 '붕어빵틀과 붕어빵이다'라고 하는 설명이다. 

클래스 객체명 = new 클래스();

붕어빵틀 붕어빵 = new 붕어빵틀();

금형기계 붕어빵틀 = new 금형기계();

 

붕어빵틀은 붕어빵을 만드는 팩터리였던 것이다. 절대 붕어빵틀과 붕어빵도 클래스와 객체 관계가 아니다. 

 

그럼 다음 문제의 답을 생각해보자 

  • 사람은 클래스인가? 객체인가?
  • 박지성은 클래스인가? 객체인가?
  • 뽀로로는 클래스인가? 객체인가?
  • 펭귄은 클래스인가? 객체인가?

잘 모르겠으면 다음을 다시 생각해보자

  • 사람의 나이는 몇 살인가?
  • 박지성의 나이는 몇 살인가?
  • 뽀로로의 나이는 몇 살인가?
  • 펭귄의 나이는 몇 살인가?

사람과 펭귄은 클래스이고 박지성과 펭귄은 객체이다. 

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

객체는 실제다. 

 

그럼 붕어빵틀은 과연 옳은 설명이였을까?

 

📖Reference

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

댓글