객체가 그 객체가 아니라니
처음 코딩을 JS로 배우고, 실무에서도 JS만 주력으로 사용했다.
JAVA나, C++과 같은 그런 언어는 배워본 적도, 배울 필요도 못느꼈다.
그래서 객체지향이고, 클래스고 그냥 이론적으로 들어봤고,
실질적으로 개발을 할 때 이러한 지식이 필요하진 않았기 때문에
어렴풋하게 느낌만 알고 있었을 뿐이다.
암튼 최근 파이썬으로 API를 만들어보고 있는데,
친구에게 파이썬을 배우며 충격을 받은 사실이 하나 있다.
문제가 된 코드는 이것이다.
저 response_object를 프린트하면 아래처럼 찍힌다.
"파이썬은 참 이상하게 프린트되네... 저걸로 뭘 알지?? 객체의 주소값을 반환하는건가??"라고만 생각했다
결론적으로는
파이썬 개발자인 친구가 생각하는 객체와, 자바스크립트를 다루는 내가 생각하는 객체가 달랐다.
나 : 아니..... response_object가 객체라며!!! 객체잖아!! 왜 굳이 jsonable_encoder을 쓰는거야? 난 안쓰고 그냥 객체 리턴할래~~!!! 아니... 객체라며..... 그냥 그대로 리턴해도 되자나....
친구 : 그래!! 객체잖아!! 객체니까 저걸 파싱해서 써야한다니까? 넌 저게 어떤 값인지 궁금해야해... 저렇게 프린트되는게 뭔지 알아?? 모르잖아!!
객체 : ???????????
그니까 내게 객체는 key-value한쌍의 데이터 타입인, {} 이렇게 생긴,
그러니까 파이썬에선 dictionary라고 불리는 것이었고
파이썬에서 말하는 객체는 "Class 에서 만들어낸 instance"라고 한다...
언젠가 개발을 처음 배웠을 때... 그러니까 처음 자바스크립트 함수에 대해 배울 때
어렴풋하게 들어봤던 class와 instance에 대한 개념이 머리를 스쳤다.
아항.... 이해 완... ^^
(파이썬은 조건문도 희안하게 생겼당.. 재밌는 친구다)
자바스크립트도 객체지향 언어이다. Hooks이 생겨나며 함수형 프로그래밍이 지금은 대세가 되었지만 리액트도 과거에는 class를 사용하며 객체지향 프로그래밍을 지향했던 적이 있었다. 나는 함수형 리액트가 익숙했기 때문에 object가 instance를 의미한다고 생각하지 못했다.
(자바스크립트에서는 prototype이라는 개념으로 불렀던 것 같아 바로 연결하지 못한 것도 있다)
캡슐화 : 재사용 될만한 상태나 메소드들을 저장해두고 사용할 때 마다 불러올 수 있게 함.이렇게 작성한 코드들은 은닉성을 띈다.
객체 : 이렇게 class로 캡슐화된 코드들을 필요할 때마다 복사해서 하나의 데이터(object) 로 사용.
모듈화 : 함수형 프로그래밍의 핵심. 다른 외부요인에 영향을 받지 않고 자신의 맡은 바를 실행.
목적성 : 알고리즘을 명시하는 것 보다 목표(함수)를 명시하는데 중심. (선언형)
객체 : 함수도 하나의 객체로서 작용. 적재적소에 해당 함수를 적절한 input과 함께 쓰는 것이 필요하다.
자바스크립트는 멀티-패러다임 언어로 명령형(imperative), 함수형(functional), 프로토타입 기반(prototype-based) 객체지향 언어라고 한다. 자바스크립트는 클래스 개념이 없고 별도의 객체 생성 방법이 존재하는 프로토타입 기반의 객체지향 언어다.
객체 리터럴
Object() 생성자 함수
생성자 함수
ES6에서 Class가 도입되었으나 새로운 객체지향 모델을 제공하는 것이 아니며 Class도 사실 함수이고 기존 prototype 기반 패턴의 Syntactic sugar이다.
Human이라는 클래스를 만들고 steve라는 인스턴스를 찍어내는 그런 기본적인 개념들을 처음 JavaScript를 배웠을 때 배웠었다.
출처