티스토리 뷰

강의 커리큘럼대로 가다보니 뭔가 순서가 꼬인듯 하다.
this를 먼저 공부하다가, new 생성자 함수 안에서 this의 역할에 대해 어려운 부분이 있었고
그것을 이해하려다보니 객체지향이 뭔데? 하게 되었다.
일단 객체지향 프로그래밍의 개념부터 잡아보자.

 

https://opentutorials.org/module/532/6584

 

객체지향 - JavaScript

객체지향 프로그래밍은 크고 견고한 프로그램을 만들기 위한 노력의 산물이다. 객체지향이라는 큰 흐름은 현대적 프로그래밍 언어들을 지배하고 있는 가장 중요한 맥락이라고 할 수 있다. 하지

opentutorials.org

그리고 이것은 역시나 교과서...

 

아직 머릿속에 명확하게 정리된 내용은 아니지만 이고잉님 강의를 듣고 이해한대로 정리해 적어본다.

썼던 글들은 공부하면서 다시 들여다보고 다듬어가야지.

 

 


 

 

📌 객체지향 프로그래밍 Object-Oriented Programming(OOP)

객체지향. 우선 레고 블럭들을 조립하는 것을 떠올리자.

객체지향은 더 복잡하고 큰 프로그램의 관리를 용이하게 하기 위해 모색된 방법들 중 하나라고 볼 수 있다.

 

이제까지 기초 단계에서 배워 왔던 '절차지향' 문법의 코드들을 통해 간단한 프로그램을 구축할 수 있다.

하지만 기능이 복잡해지고 많은 사람이 그 프로그램에 관여하며 운영기간이 오래되면 복잡해진 로직을 기능별로 그룹핑 할 필요가 있게 된다.

그 복잡한 프로그램의 코드를 좀 더 명확하게 이해하고 관리하기 쉽게 하기 위해 '객체'를 사용하여 코드를 기능별로 그룹핑한다.

결국 객체는 변수와 메소드를 그룹핑한 것이다.

그룹핑된 객체들을 조립해서 하나의 프로그램으로 만들고, 해당 기능을 필요로 하는 다른 프로그램에서 재사용하기도 한다.

그 과정에서 생기는 여러가지 문제들을 해결하기 위해 생긴 방법들, 문법들이 자바스크립트를 객체지향 프로그래밍 언어이다 라고 말할 수 있게 하는 것이다.

 

 

 

프로그램 설계와 추상화 / 부품화

깊게 이해라려고 하면 끝이 없을테니 지금 단계에서는 객체지향의 지향점을 가볍게라도 이해하고 구체적 문법 요소를 공부하자.

 

추상화
좋은 객체를 만들기 위해서는 좋은 설계를 해야한다.
좋은 설계를 위해서는 현실을 잘 반영해야하지만, 복잡한 현실에서 필요한 관점만을 추출하는 것이 필요하고,
그것을 추상화 라고 한다.
실제 지도에 있는 복잡한 내용에서 필요 없는것은 생략하고 지하철 노선도만 깔끔하게 정리한 것과 같다.

 

부품화
초창기 컴퓨터를 보면 본체+모니터+키보드가 모두 붙어있는 형태이기 때문에,
한 군데가 고장나면 전체를 바꿔야 하는 문제점이 있다.
그래서 각 기능별로 부품화시켜 본체, 모니터, 키보드를 분리했다. 덕분에 각 부품을 별도로 수리하거나 교체하는 것이 가능하다.
하지만 최신 아이맥은 본체와 모니터가 붙어있는 형태인 것처럼, 
기술이 발전함에 따라 모든 기능을 부품화 시키는것이 매력적이지 않은 경우도 있다.
결국 모든 개념에 무조건적인 것은 없고 상황에 맞는 적절한 방법으로 설계하는것이 중요하다는 것이다.

 

단순하게 기능별로 묶는다고해서 부품화 라는 목표를 달성할 수 있는 것은 아니다.

재활용성을 높이고, 부품으로서의 가치를 높이기 위해서는 몇가지 특징이 더 필요하다.

 

좋은 부품의 특징 1 : 은닉화 ( = 캡슐화 )
제대로 된 부품이라면 그것이 어떻게 만들어졌는지 모르는 사람도 사용법만 알면 쓸 수 있어야한다.
모니터가 어떻게 동작해서 제 기능을 하는지 잘 몰라도, 컴퓨터와 모니터를 연결할 줄 알면 화면을 띄울 수 있는 것과 같다.

 

좋은 부품의 특징 2 : 인터페이스
잘 만들어진 부품은 서로 교환할 수 있어야한다. 본체에 어떤 모니터를 연결해도 기능을 사용할 수 있는 것과 같다.
이것은 HDMI 케이블의 규격과 연결점이 표준화 되어있기 때문이다.
규격이 다르다면 기능이 작동하지 않거나 결합조차 되지 않도록 막는 역할도 한다.
이렇게 공통으로 약속된 연결점을 인터페이스라고 하고, 인터페이스는 부품들간의 약속이다.

 

 


 

 

위의 개념정리는 하드웨어를 예로 들어 소프트웨어를 이해하고자 했다.

이제 자바스크립트에서 어떤 문법적인 요소를 통해서 위의 개념들을 실현하는지 배워보면 되겠다!

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함