✏️ '객체 지향의 사실과 오해' 책을 읽거나 or 내 주력 언어의 특징 및 좋아하는 특징
이번 주제는 이 두가지 중 하나를 골라서 쓰는건데, 두개를 합쳐서 써보기로 했다.
우선, 현재 내 주력언어는 자바스크립트이다.
사실 처음에는 자바로 시작헀기에 자바가 훨씬 좋았고, 자바스크립트와는 별로 친하지 않았다.
자바스크립트는 내게 자바와 이름이 비슷한 어려운 친구였는데,
이번에 본격적으로 사용하게 되면서 오해를 풀고 친해지게 되었다.
(특히 자바스크립트 언어로 백과 프론트를 둘 다 다룰 수 있다는 게 굉장히 매력적이라고 생각함.)
자바스크립트의 특징?
일단 자바스크립트는 객체 지향 언어이며,
클래스 없이 오로지 객체만이 존재하는 프로토 타입의 언어 이다.
그렇기에 상속 역시 클래스가 아닌 객체간의 위임 매커니즘을 기반으로 한다.
- 인터프리터 언어
- 객체 기반의 Script언어
- 동적 프로토 타입 기반 객체 지향 언어
- 일급 객체 함수
- 동적 타입 언어
- single thread 기반 언어
- non-blocking 언어
이 중에서 내가 가장 좋아하는 자바스크립트의 특징은,
자바스크립트가 '객체 지향 언어이며, 동적 타입 언어'라는 것이다.
그리고 사실 자바스크립트가 객체 지향 언어인 것 까지는 알고있었으나
프로토 타입의 언어란건 모르고 있었는데,
책을 읽으면서 객체만이 존재하는 것을 프로토 타입이라고 부른다는 걸 알게 됨.
프로토타입 그냥 디자인패턴 종류 외울 때 단순하게 암기만 했었는데...
참고로 프로토타입: 프로토타입은 코드를 클래스들에 의존시키지 않고 기존 객체들을 복사할 수 있는 것
클래스에 대해서도 별 생각이 없었는데, 돌이켜보니 자바로 코드 짤 때는 클래스를 많이 만들었던 것 같은데
자바스크립트에서 클래스를 만든 기억이 없는 듯.
객체
객체 지향 언어의 주체는 객체이고, 객체는 상태, 행동, 식별자를 지닌다.
객체의 상태에 따라 행동의 결과가 달라지므로 행동간의 순서가 중요하고,
상태변경과 무관하게 유일한 존재로 식별이 가능하다.
예를들어, 이상한 나라의 앨리스가 아무리 음식이나 약물을 마시고 키가 커졌다 작아졌다를 반복해도
모두가 그 앨리스를 앨리스라고 부르는 것 처럼, 객체도 마찬가지.
객체에 대해 막연하게 '어떤 고유한 존재' 이정도로만 인식하고 있었는데,
당연한 것이라 인식했던 걸 이렇게 문자로 되짚어보니 좀 새로웠다.
객체에는 상태와 프로퍼티가 있는데, 프로퍼티는 객체의 상태를 표현하기 위해 사용된다.
예를들어, 앨리스와 약물 및 음식은 객체지만
앨리스의 키나 위치, 음식의 양 등은 객체가 아니라 단순값임.
프로퍼티는 일반적으로 고정이기때문에 정적이지만,
프로퍼티 값은 시간의 흐름에 따라 변경되므로 동적이다.
또한 프로퍼티의 다른말은 식별자임.
모든 객체는 식별자를 가지며, 식별자를 이용해 객체를 구별할 수 있음.
사실 JSON형태를 떠올렸을 때
객체의 프로퍼티는 변경할 일이 잘 없긴 하다.
프로퍼티 값은 코드의 흐름에 따라 어떤 행위가 일어났을 때 값이 변화하고 그러는데
객체 프로퍼티 이름의 변경..?
프로퍼티 이름 변경할 생각을 해본적이 없는 듯
객체 지향 언어
객체 지향 언어에서 가장 중요한 세가지는 역할, 책임, 협력인데
클라이언트가 서비스를 제공할 수 있는 사람에게 요청
서버가 클라이언트에게 필요한 지식이나 서비스 제공하는게 응답
요청과 응답으로 구성된 협력
자바스크립트는 웹에서 늘 이것을 반복하고 있다고 생각한다.
책에서 객체의 자율성이란
'객체가 다른 객체가 무엇을 수행하는지는 알 수 있지만 어떻게 수행하는지는 모르는 것' 이라고 했는데
약간 회사에서의 직장동료...인가? 싶었음 ㅎ...
예시로 카페가 나왔는데,
예시를 쭉 읽으며 IT세계는 정말로 인간세계와 흡사하구나 싶었음.
포스기만 만지는 직원과 음료를 만드는 직원만 존재한다고 했을 때,
포스기 담당 직원은 음료를 요청하면 음료가 나온다는 걸 알지만 어떻게 만들어지는지 모르고,
음료 담당 직원은 음료제조법을 다 알기에 주문에 맞춰서 스스로 판단해서 음료를 만들 수 있음.
따지고보면 인간이 하는 모든 일은 일련의 프로세스로 이루어져 있고,
코드에서 객체가 어떠한 일을 수행하는 것도 인간이 하는 일과 비슷함.
개발자는 코드를 짜며 일종의 작은 인간 사회를 경험하고 있는 게 아닐까?
메시지를 주고 받으며 객체들의 협업이 원활해야 기능 구현이 잘되는 것처럼
개발자들도 소통이 원활해야 프로젝트가 무탈히 끝난다는 걸
개발자들은 알게모르게 객체들을 보며 무의식적으로 터득하는게 아닌가 싶다.
동적 타입 언어
자바스크립트는 변수를 선언할 때 var, let, const를 사용한다. (var는 지금은 잘 안쓰임)
다른 언어들은 대체적으로 변수 선언 시 타입을 명시해야 하지만,
자바스크립트는 별도의 타입 선언 없이 변수의 값을 보고 자동으로 데이터 타입을 추론하는
동적 타입 언어이다.
자바에서는 모든 타입을 받으려면 Object를 사용해야하는데,
자바스크립트는 그냥 대부분의 변수 타입을 let으로 끝낼 수 있다.
(사실 처음에는 당황했는데 익숙해지고 나니 너무 편리함.)
자바스크립트의 이러한 특징은 아래의 세 가지 장점을 제공한다.
1) 코드 간결성 향상
2) 개발 속도 향상
3) 런타임 유연성: 유연한 데이터 처리 가능
그 외
자바스크립트를 사용하면서 정말 놀란게
세미콜론을 안찍어도 작동이 되는게 너무나도 신기했다.
자동 세미 콜론 삽입(Automatic Semicolon Insertion, ASI)으로 인해
자바스크립트 엔진이 코드 해석 시 문맥을 기반으로 자동으로 세미콜론을 삽입한다는데
이 정도면 조만간 사람말도 할듯;
물론 다른 언어에서도 ASI기능을 볼 수 있지만,
자바스크립트에서 제일 적극적으로 활용되고 있다고 한다.
어쨌든 자바스크립트는 굉장히 자유도가 높은 언어라고 생각한다.
아마 처음에 자바스크립트가 어려웠던 건, 어떠한 틀에 맞춰서 코드를 짜다가
갑자기 자유도가 높은(?) 친구를 만나게 되어 당황했기 때문에 아니었을까...
'언그래머 글쓰기 클럽 1기' 카테고리의 다른 글
[언그래머] 글쓰기 클럽 1기 - 6. 내가 생각하는 개발자의 소통 그리고 협업 (0) | 2024.05.02 |
---|---|
[언그래머] 글쓰기 클럽 1기 - 5. 과제 테스트 패키지 구조 파헤치기 (1) | 2024.05.01 |
[언그래머] 글쓰기 클럽 1기 - 4. 내가 프로젝트에서 제일 중요하게 생각하는 것 (1) | 2024.04.22 |
[언그래머] 글쓰기 클럽 1기 - 3. 나에게.. 클린 코드란..? (0) | 2024.04.22 |
[언그래머] 글쓰기 클럽 1기 - 1. 나는 왜 개발자가 되고 싶을까? (0) | 2024.04.12 |