TIL-JavaScript(객체지향프로그래밍,추상화,부품화,캡슐화)

연시아·2022년 6월 4일
0

TIL

목록 보기
33/51
post-thumbnail

22.06.04

💜 객체 지향 프로그래밍

객체 지향 프로그래밍(Object Oriented Programming)이란 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로, 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이라고 할 수 있습니다. 따라서, 객체지행 프로그래밍을 객체를 만드는 것입니다.

💛 추상화

좋은 객체를 만드는 법은 다른 말로든 설계를 잘하는 법이라고 할 수 있습니다.
아래의 그림을 보시면 런던의 지도입니다.

왼쪽 상단의 지도는 현실의 복잡함을 나타냅니다. 오른쪽 하단의 지도는 지하철 탑승자의 관심사만을 반영하고 있습니다. 역 간의 거리나 실제 위치와 같은 요소들은 모두 배제하고 있습니다. 이렇게 복잡함 속에서 필요한 관점만을 추출하는 행위를 추상화라고 합니다.

🤎 부품화

프로그래밍은 정신적인 활동입니다. 정신적인 것은 실체가 없고, 무한하고 유연하죠. 이러한 특성은 정신이 가진 장점이라고 할 수 있지만, 정신의 이러한 특성은 때로 오해나 모순 같은 문제점을 유발하기도 합니다. 소프트웨어도 이러한 문제점을 그대로 상속받습니다. 이러한 문제점을 극복하기 위한 노력 중의 하나가 부품화라고 할 수 맀습니다.
아래의 컴퓨터는 초창기의 컴퓨터입니다.

본체와 모니터와 키보드가 하나로 단일화되어 있는 것을 볼 수 있습니다. 이것의 문제점은 붐명합니다. 모니터가 고장나면 컴퓨터를 바꿔야하고, 키보드가 고장나도 컴퓨터를 교체해야 합니다.

그래서 사람들은 위와 같이 모니터와 본체와 컴퓨터를 분리했습니다. 다시 말해서 부품화 시킨 것입니다. 가능들을 부품화 시킨 덕분에 소비자들은 더 좋은 키보드나 저렴한 모니터를 선택할 수 았게 되었습니다. 또 문제가 생겼을 때 그 문제가 어디에서 발생한 것인지 파악하고 해결하기가 훨씬 쉬워졌습니다.
메소드는 부품화의 예라고 할 수 있습니다.
메소드를 사용하는 기본 취지는 연관되어 있는 로직들을 결합해서 메소드라는 완제품을 만드는 것입니다. 그리고 이 메소드들을 부품으로 해서 하나의 완제품인 독립된 프로그램을 만드는 것입니다. 메소드를 사용하면 코드의 양을 극적으로 줄일 수 있고, 메소드 별로 기능이 분류되어 있기 때문에 필요한 코드를 찾기도 쉽고 문제의 진단도 빨라집니다.

💚 인터페이스

잘 만들어진 부품이라면 부품과 부품을 서로 교환 할 수 있어야합니다. 예를 들어보면 집에 있는 컴퓨터에 A사의 모니터를 연결하다가 B사의 모니터를 연결할 수 있습니다. 또 집에 있던 모니터에 A사의 컴퓨터를 연결해서 사용하다가 새로운 컴퓨터를 구입하면서 B사의 컴퓨터를 연결 할 수 있습니다. 모니터와 컴츄터는 서로가 교환관계에 있는 것입니다. 이 것은 모니터와 컴츄터를 연결하는 케이블의 규격이 표준화 되어 있기 때문에 가능한 일입니다. 아래의 그림을 보시면 모니터와 컴퓨터를 연결하는 케이블인 HDMI를 보여줍니다.

컴퓨터와 모니터를 만든느 업체들은 위와 같은 케이블의 규격을 공유합니다. 모니터 입장에서는 컴퓨터가, 컴퓨터 입장에서는 모니터가 어떤 식으로 만들어졌는지는 신경쓰지 않습니다. 각각의 부품은 미리 정해진 약속에 따라서 신호를 입,출력하고 연결점의 모양을 표준에 맞게 만들면 됩니다. 이러한 연결점을 `인터페이스(interface)라고 합니다. 위의 그림을 보면 HDMI 케이블의 연결점은 특유의 생김새가 있습니다. 만약 HDMI 케이블을 랜선을 연결하는 구멍에 연결하려고 하면 어떻게 될까요? 동작하지 않을 뿐 아니라 연결 자체가 되지 않을겁니다. 인터페이스란 이질적인 것들이 결합하는 것을 막아주는 역할도 합니다. 즉, 인터페이스는 부품들 간의 약속입니다.

🤍 은닉화,캡슐화

부품화라고 하는 목표는 단순히 동일한 기능을 하는 메소드와 변수를 그룹핑한다고 달성되는 것은 아닙니다. 제대로 된 부품이라면 그것이 어떻게 만들어졌는지 모르는 사람도 그 부품을 사용하는 방법만 알면 쓸 수 있어야 합니다. 이를테면 모니터가 어떻게 동작하는지 몰라도 컴퓨터와 모니터를 연결하는 방법만 알면 화면을 표시 할 수 있는 것과 같은 이치입니다. 즉, 내부의 동작 방법을 단단한 케이스 안으로 숨기고 사용자에게는 그 부품의 사용방법만을 노출하고 있는 것입니다. 이러한 컨셉을 정보의 은닉화(Information Hiding), 또는 캡술화(Encapsulation) 라고 부릅니다. 자연스럽게 사용자에게는 그 부품을 사용하는 방법이 중요한 것이 됩니다.

profile
backend developer

0개의 댓글