읽기전에
이글이 본격적으로 포스팅하는 첫 글입니다. 물론 책을 읽고 정리해서 작성한 블로그 포스팅이나, 가끔 개념정리 또는 기술적인 부분을 정리해서 올린 포스팅은 꽤 많았습니다. 하지만 제대로 관리를 하지 않아 글을 어디에 어떤 계정으로 작성했는지 정리가 되지 않아 마음을 다잡는겸 해서 처음으로 하는 포스팅이라고 하였습니다.
이 글은 IT에서 가장 기본이 되는 개념중 하나인 객체지향에 대해 설명하지만 개인적으로 IT 특히 소프트웨어 엔지니어링(또는 개발, 프로그래밍 등)은 철학적인 요소가 많이 녹아들어있다고 생각합니다.
이러한 저만의 생각과 사상을 같이 공유하고 의견을 교류하고 싶어 포스팅을 하게되었으니 자신의 사상 또는 알고있는 개념과 다르다고 욕은 하지 말아주세요 (^ v ^)
또한, 문제가 될 법한 요소가 있거나 잘못된 부분이 있으면 댓글로 남겨주세요 그러면 시정하겠습니다.
그러면 객체지향에대해 저의 생각을 본격적으로 풀어보겠습니다 부족한 글 잘부탁드립니다.!
인터넷에서 찾아본 객체에 대한 개념
객체지향이라는 것에 대해 알아보기 전에 먼저 객체가 무엇인지 먼저 알아보았습니다. 객체에 대해서 네이버 지식백과에서 찾아봤더니 다음과 같이 철학적인 의미의 객체로 사용하고 있었습니다.
객체란 주체와 연관됨으로써 이 주체의 행위가 지향하는 것을 의미한다.
네이버 지식백과에서 객체를 찾았을때 철학적인 용어에서 사용되는 객체에 대해서 가져와 봤습니다. 그리고 아래는 IT 용어 사전에서 가저온 객체에 대한 의미입니다.
객체란 객체지향 프로그래밍이나 설계에서 데이터와 그 데이터에 관련된 동작을 모두 포함한 개념이다.
철학적 관점의 객체
철학적 관점의 이 주체의 행위가 지향하는 것을 한번 되짚어 봅시다. 나무위키에서 주체에 대하여 위에서 말하는 주체와 유사하다고 생각한 글을 발췌해왔습니다.
주체란 어떤 단체나 물건의 주가 되는 부분, 또는 사물의 작용이나 어떤 행동의 주가 되는 것을 말한다.
그러면 여기서 주체가 의마하는것과 철학점 관점에서의 객체를 잘 섞어서 주체의 행위가 지향하는 것에 대하여 정리를 하면 다음과 같이 해석할 수 있을 거에요 (글쓴이의 주관적인 생각)
어떠한 물건이나 주가 되는 부분의 행동을 주로하여 그 행위를 지향하는 것
뭔가 그럴싸하게 하나의 문장이 나왔네요. 무언가의 주가 되는 행동을 지향하는 것이라고 요약해도 되지 않을까 싶어요 .
IT 에서의 객체
그러면 IT 에서의 객체란 무엇인가에 대해 한 번 찾아봤습니다. 블로그, 위키등 많은 글을 찾아 읽어본 결과 우리나라에서 주로 사용하는 객체지향 언어인 자바에 기반해서 내용을 정리한 것인지 다음과 같이 다양한 정의를 내리고 있었습니다.
Google 검색에서 찾은 객체란 무엇인가.
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
우리가 실생활에서 인식할 수 있는 사물로 이해할 수 있습니다. 자바스크립트에서는 이름과 값으로 구성된 프로퍼티의 정렬되지 않은 집합을 의미합니다.
[CS/Basic] 그래서, 객체(Object)가 무엇인가요?
프로그래밍의 패러다임 중, [목적/방식]에 따라 명령형 / 선언형 2가지 형태를 앞선 포스팅에서 살펴보았습니다. 좀 더 파고들어, 명령형에서 파생되는 절차적, 객체지향 프로그래밍을 이해하기
iosdevlime.tistory.com
객체의 사전적 의미는 특정 실체를 객관화하여 인식하거나 이해하는 대상으로 세상에 실제로 존재하는 것을 실제라 칭한다면, 내(주체)가 다른 실체를 바라볼때, 그 실체가 바로 객체라는 것
이 포스팅글이 제가 표현하고자 하는 객체에 대해서 잘 설명한 글 같아요
[Java] 도대체 객체가 뭔데? : 객체, 클래스, 인스턴스
1. 개요 개발을 하다 보면 정말 자주 듣고 보고 말하고 쓰게 될 말이 객체입니다. 도대체 객체란 무엇일까요? 오늘 포스트에서는 객체, 클래스, 인스턴스에 대해서 제가 공부한 것을 바탕으로 아
upcake.tistory.com
넓은 의미로는 실세계 존재하거나 생각할 수 있는것을 의미하며 프로그래밍에서의 객체는 속성과 기능을 가지는 프로그램의 단위를 뜻함
객체 (컴퓨터 과학) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 컴퓨터 과학에서 객체 또는 오브젝트(object)는 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식
ko.wikipedia.org
클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간
위 글들 말고도 다양한 포스팅이 있지만 제가 프로그래밍을 하면서 찾아 보았던 객체에 대해 설명한 글은 크게 위에 있는 케이스들 이라고 생각합니다.
사실 객체는 추상적인 개념에 가까워서 무엇이라 정의하기 모호한부분이 참 많은것 같아요 이제 제가 생각하는 객체에 대해서 한번 정리해볼까 해요
내가 생각하는 객체
무언가를 표현하는 것. 예를들어 나는 누구인지, 나는 무엇을 할 수 있는지, 나는 누구와 인연이 있는지 등이다.
막상 내가 생각하는 객체를 표현하려고 하니 막막하네요 이러면서 왜 객체지향에대해 쓰려고했을까.. 정리가 하나도 되지 않았는데..
하지만 생각보다 위 글은 명확하게 표현한다고 생각합니다. 철학적인 측면으로 다가가면 나라는 주체가 어떠한 행동을 할 수 있는지, 어떠한 관계가 있는지, 어떠한 책임이 있는지 대한 표현이 될 수 있으며 프로그래밍 관점에서는 나라는 오브젝트가 어떠한 행동을 할 수 있는 메서드
를 갖고 어떠한 표현을 할 수 있는 상태값을 갖는것을 의미할 수 있기 때문이라 생각합니다.
흔히 하는 객체에 대한 착각
이 부분은 쓰지말까 하다가 혹시나 모르시는 분 들이 있을까봐 써봅니다.
아마 자바를 처음 배우는 분이라면 객체지향과 붕어빵틀(또는 기타 다른 무언가)를 예시로 많이 접해봤을 겁니다. 사실 틀린말은 아닙니다. 하지만 가끔 이부분을 자바(또는 기타 객체지향 언어)의 Class 와 연관지어 설명하시는 분들이 간혹 계시곤 합니다. (제가 처음 배울때만해도 객제는 Class 다라고 설명해 줬습니다.)
물론 지금에 와서는 개념적인 정리가 잘 되어있고 블로그 같이 정보의 공유가 활발히 일어나면서 이러한 오류는 많이 줄어드는 추세입니다. 그래도 혹시 모르니 한 번 짚고 넘어가겠습니다.
사실 대부분의 객체지향언어에서 Class를 이용해서 객체를 정의하고 new 키워드 (또는 무언가)를 이용해서 인스턴스화(Class 를 주기억장치에 할당하는 행위)할 것입니다. 그렇다보니 아래와 같은 오류를 지식으로 갖고 계신분들이 있습니다 (특히 처음 자바를 접하시는 분들)
Class == Object(객체)
위 명제는 잘못된 명제라고 말하고 싶습니다. 사실 아래와 같은 문장이 더 어울리겠군요
Class는 Object를 표현하기위한 도구이다.
이 부분은 아마 경력자라면 이해하실거라 믿습니다.
그래서 객체지향은 무엇인가
객체지향이라는 사실 아직 저는 잘 모르겠습니다.
- 객체를 이용해서 무엇가를 표현한다.
- 객체를 이용해서 어떠한 상호작용이 있는지를 표현한다.
- 객체를 이용해서 객체의 상태를 결정짖는다.
위에 적은 글처럼 내가 만드는 프로그램을 객체를 이용해서 표현하고 객체간의 상호작용을 통해 원하는 결과를 도출하기 위한것이 객체지향 프로그래밍 아닌가 싶습니다.
서두에 말했듯 문제가 될 법한 요소가 있거나 잘못된 부분이 있으면 댓글로 남겨주세요 그러면 시정하겠습니다.
긴글 읽어주셔서 감사합니다
여담
이글을 읽고 객체지향의 사실과 오해에대해 한 번 읽어보는것을 추천 드리겠습니다.(물론 많은 분들이 읽어보셧을거라 생각합니다.) 꽤 오래전에 읽어서 내용이 잘 생각나지는 않지만 제가 객체에 대해 주관적인 생각을 갖고 객체지향 프로그래밍과 이것을 어떻게 하면 잘 다룰 수 있을지에 대해 생각해 볼 수 있게 해준 책입니다.