우아한테크코스 4기 프론트엔드에서 시원한 콜라를 제공하고 있습니다.
https://yozm.wishket.com/magazine/detail/1396/
자바스크립트에서 객체 지향을 하는 게 맞나요? | 요즘IT
이번 글에서는 객체지향 프로그래밍에 대해 이야기를 해보려고 합니다. 그리고 자바스크립트의 객체지향은 일반적인 객체지향 프로그래밍과는 어떻게 다른지 그리고 Javascript에서는 객체지향
yozm.wishket.com
우아한테크코스 슬랙 fe-4기 잡담 채널에 로이님께서 좋은 글을 공유해 주셨다.
해당 글을 읽고, 내 생각을 써보려고 한다.
자바스크립트에서 객체 지향을 하는 게 맞나요? 라는 제목에 끌려 오신 분들은 위에 있는 링크를 들어 가시는 걸 추천 드립니다.
목차
- 내가 고민 했던 객체지향 프로그래밍
- 기술의 발전 과정
- 객체지향 이전의 프로그래밍
- 객체 지향 프로그래밍의 등장
- 자바스크립트에서의 객체지향
내가 고민 했던 객체지향 프로그래밍
지금까지 React를 주로 사용해 왔고 함수형 프로그래밍에 익숙 했기에 객체지향 프로그래밍이 너무 낯설었다. 특히나 레벨1 때는 왜 자꾸 class로 코드를 구현하고, 모델링을 시키고, 객체를 나눠 객체 간의 관계를 잘? 형성 해야 한다고 세뇌를 당하는 수준이었다. 그냥 함수로 만들면 안되나? 라는 생각이 들었다.(물론 내가 함수형 프로그래밍을 완벽히 하는 것도 아님;;;)
우테코에서 이렇게 시키는 이유가 있다고 생각이 들었기 때문에 다음과 같은 고민들을 계속 해왔다. 객체 지향이 뭘까? 객체지향적 설계를 한다는 것이 뭘까? 어떻게 하면 객체지향적으로 설계를 잘 할까?
로이님께서 공유해 주신 글을 읽고 어느정도 정리가 된거 같다.
기술의 발전 과정
객체지향 프로그래밍이란 기술을 고민하고 사용 했다고 했지만 사실 잘 모른다. 해당 기술을 이해 할려면 "왜? 이런 기술이 나오게 되었나?"를 알아야 한다. 어떤 문제를 직면하고 그 문제를 해결하기 위해 이런 기술이 나왔는지 알아야 해당 개념을 잘 이해 할 수 있다.
객체지향 이전의 프로그래밍
자바스크립트에서 Object를 쓰지 않고 boolean, string, number, if, for, while만으로 개발을 한다면 절차적(구조적) 프로그래밍으로 구현을 하게 된다. 절차적 프로그래밍이란? 데이터와 데이터를 처리하는 동작을 함수 단위로 코드를 분리하고 재사용하는 형태로 프로그래밍하는 방식을 말한다.
절차적 프로그래밍의 문제점
- 절차적 프로그래밍은 전역 변수의 형태로 구현이 된다.
- 그러다 보니 프로그램의 덩치가 커지면 커질수록 변수에 같은 이름을 쓸 수가 없게 된다.
- ex) foo_x, foo_y, bar_something...와 같이 prefix가 늘어간다.
- 이런 문제를 해결하기 위해 하나의 파일단위 혹은 모듈단위로 prefix를 부여해서 관리하는 namespace(네임 스페이스)라는 방식이 등장하게 된다.
데이터를 묶어서 관리하기(구조체)
- namespace만으로는 비슷한 형태의 데이터들을 쉽게 다룰 수는 없었다.
- 그래서 서로 연관이 있는 데이터들을 하나로 묶어 namespace처럼 관리하여 해당 변수에 접근을 할 수 있는 구조체라는 형식을 생각하게 된다.
객체 지향 프로그래밍의 등장
구조체가 생기면서 산재해 있는 데이터들을 의미 있는 데이터로 구조화시켜서 프로그래밍하니 동작보다는 데이터를 중심으로 코딩하게 되면 코드의 덩치가 커져도 일관성을 유지하기 좋다는 것을 깨닫게 된다.
구조체에 항상 쓰이는 함수들도 하나로 합치자(class)
- 이렇게 만들고 보니 기존의 데이터와 처리방법을 분리해서 개발하던 절차식 프로그래밍과 달리
- 데이터와 처리방식이 하나의 모듈로 관리되면서 마치 작은 프로그램들이 독립적으로 돌아가는 형태를 띄게 되어
- 덩치가 큰 프로그래밍을 작성하더라고 작은 부품들을 미리 만들어두고 이를 조립하고 결합하는 방식으로 개발 할 수 있게 된다.
- 그래서 이러한 부품을 만드는 설계도를 만들어 두고 공장에서 찍어내듯 부품을 만들고 이것들을 조립하는 것과 같은 개념으로
- Class와 Object가 등장하게 된다.
기존의 구조체와 함수를 합쳐서 선언하는 것을 Class라고 부르기고 했고 Class를 통해 만들어진 결과물을 값과 동작을 함께 가지고 있는 것이 주위 사물과 유사하다고 하여 Object라고 부륵기로 했다. 이런식으로 작은 문제를 해결하는 것들을 모아서 하나의 문제를 해결하는 프로그램으로 개발하느 방식을 Bottom-up 방식이라고 한다.
작은 문제를 해결하는 독립된 객체를 먼저 만들고 조립하자는 개발방식은 다음과 같이 개념이 확장된다.
프로그램은 모두 객체로 만들어져 있고 객체들 간의 메시지를 주고받는 상호작용으로 이루어진다.
이렇게 프로그램을 객체로 바라보는 관점으로 프로그래밍을 하는 것을 Object-Oriented Programming(OOP) = 객체지향 프로그래밍이라고 부르게 되었습니다.
Object Oriented Programming(OOP) 객체지향 프로그래밍
- 프로그램을 객체로 바라보는 관점으로 프로그래밍을 하는 것
- 재사용이 가능한 객체들을 많이 만들어 놓는 것이 중요
- 캡슐화, 상속, 추상화, 다형성
자바스크립트에서의 객체지향
객체지향의 개념으로 데이터와 메소드를 통해 독립적인 작은 프로그램으로써 만들어 편리하게 재사용하는 장점을 취하되, 객체들의 결합이 높아져서 프로그램이 과도하게 복잡해지지 않도록 굳이 객체로 만들지 않아도 될 부분들은 함수형으로 만들어 활용하자.
결국 간단하고 가독성 있고 덩치가 커져도 유지보수하기 좋으며 재사용이 편리한 코드를 만들어 내는 것이 Javascript를 잘하는 것이다.
객체지향 프로그래밍은 프로그래밍 산업이 발전하면서 프로그램의 덩치가 커져가면서 생기는 문제점을 해결하기 위해서 나온 하나의 관점이자 방법론이다.
- 기존의 방식으로는 변수들을 하나씩 관리하다 보니 변수명을 공유해서 써야 되는 문제들이 생기는 문제들이 발생
- 연관 있는 이름들을 하나로 묶어주는 구조체라는 타입을 만드니 데이터를 중심으로 프로그래밍 할 수 있게 되었다.
- 데이터와 함수를 한데 묶어서 관리하면 어떨까?
- 이렇게 하니 하나의 큰 프로그래밍을 작은 문제를 해결하는 독립적인 단위로 만들 수가 있게 되었다.
- 이렇게 작은 단위로 관리를 할 수 있게 되니 개발과 유지보수가 간편하게 된다는 장점을 알게 되었다.
데이터와 메서드를 기반으로 작은 문제를 독립적으로 해결할 수 있는 작은 프로그램을 만들어 코드의 재사용을 높이고, 개발과 유지보수를 편하게 할 수 있다는 간결한 문법의 장점은 취하고. 객체를 연결하는 과정에서 과도하게 객체지향을 통해 만들어진 복잡한 구조를 만들지 않도록 지양하고, 적절한 선 안에서 함수형 프로그래밍이 가지고 있는 장점과 결합하는 것이, 현대 Javascript에서 객체지향 프로그래밍을 잘한다고 볼 수 있다.
해당 포스팅은 테오의 프론트엔트 '자바스크립에서 객체 지향을 하는게 맞나요?'를 읽고 요약한 글입니다.
자세한 내용은 아래 링크로 가셔서 읽어 보시길 바랍니다.
https://yozm.wishket.com/magazine/detail/1396/
자바스크립트에서 객체 지향을 하는 게 맞나요? | 요즘IT
이번 글에서는 객체지향 프로그래밍에 대해 이야기를 해보려고 합니다. 그리고 자바스크립트의 객체지향은 일반적인 객체지향 프로그래밍과는 어떻게 다른지 그리고 Javascript에서는 객체지향
yozm.wishket.com
'JavaScript' 카테고리의 다른 글
자바스크립트 비동기 처리 (1) | 2022.02.18 |
---|