자바스크립트 기본 - 객체지향 프로그래밍
객체지향 프로그래밍 - https://opentutorials.org/course/743/6553
객체지향 프로그래밍(Object-Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다.
이 객체들을 마치 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다.
다시 말해서 객체지향 프로그래밍은 객체를 만드는 것이다.
따라서 객체지향 프로그래밍의 시작은 객체란 무엇인가를 이해하는 것이라고 할 수 있다.
말이 어렵게 느껴지는 이유는 그것은 아직 객체 지향에 대한 체험이 없기 때문이다.
객체지향 프로그래밍을 학습하는데 장애 중의 하나는 번역이다. Object를 번역한 객체는 현실에서는 거의 쓰지 않는 말이고, 철학적인 느낌을 자아낸다.
쉽게 생각하면 객체는 변수와 메소드를 그룹핑한 것이다.
문법과 설계
객체지향 프로그래밍 교육은 크게 두 가지로 구분된다.
문법
하나는 객체지향을 편하게 할 수 있도록 언어가 제공하는 기능을 익히는 것이다.
이러한 기능들은 if, for문처럼 문법적인 구성을 가지고 있다.
이 문법을 이해하고, 숙지해야 객체를 만들 수 있다.
객체를 만드는 법에 대한 학습이라고 할 수 있다.
설계
아래는 영국지도를 4가지 형태로 나타낸 것이다.
지하철을 타는 사람이라면 4개의 사진 중 우측아래 사진을 선택 할 것이다.
오른쪽 하단의 지도는 지하철 탑승자의 관심사만을 반영하고 있다.
역 간의 거리나 실제 위치와 같은 요소들은 모두 배제하고 있다.
복잡함 속에서 필요한 관점만을 추출하는 행위를 추상화라고 한다.
부품화
아래는 초창기의 컴퓨터이다.
본체와 모니터와 키보드가 하나로 단일화되어 있다.
이것의 문제점은 모니터가 고장 나면 컴퓨터를 바꿔야 한다. 키보드가 고장 나도 컴퓨터를 교체해야 한다.
그래서 모니터와 본체와 컴퓨터를 분리했다. 다시 말해서 부품화 시킨 것이다.
기능들을 부품화 시킨 덕분에 소비자들은 더 좋은 키보드나 저렴한 모니터를 선택할 수 있게 되었다.
또 문제가 생겼을 때 그 문제가 어디에서 발생한 것인지 파악하고 해결하기가 훨씬 쉬워진다.
아래 장치는 현시점에서 최신 데스크탑이다.
그런데 부품화를 제거하고 있다.
기술이 경량화되면서 컴퓨터는 더욱 작아지게 되었고, 그 결과 컴퓨터를 부품화하는 것의 매력이 반감되고 있기 때문이 아닐까?
부품화가 중요한 것임에는 분명하지만 그 보다 중요한 것은 적절함이다.
=> 메소드는 부품화의 예라고 할 수 있다.
메소드를 사용하는 기본 취지는 연관되어 있는 로직들을 결합해서 메소드라는 완제품을 만드는 것이다.
그리고 이 메소드들을 부품으로 해서 하나의 완제품인 독립된 프로그램을 만드는 것이다.
메소드를 사용하면 코드의 양을 극적으로 줄일 수 있고, 메소드 별로 기능이 분류되어 있기 때문에 필요한 코드를 찾기도 쉽고 문제의 진단도 빨라진다.
은닉화, 캡슐화
제대로된 부품이라면 그것이 어떻게 만들어졌는지 모르는 사람도 그 부품을 사용하는 방법만 알면 쓸 수 있어야 한다.
모니터가 어떻게 동작하는지 몰라도 컴퓨터와 모니터를 연결하는 방법만 알면 화면을 표시 할 수 있는 것과 같은 이치다.
즉 내부의 동작 방법을 단단한 케이스(객체) 안으로 숨기고 사용자에게는 그 부품의 사용방법(메소드)만을 노출하고 있는 것이다.
이러한 컨셉을 정보의 은닉화(Information Hiding), 또는 캡슐화(Encapsulation)라고 부른다.
인터페이스
잘 만들어진 부품이라면 부품과 부품을 서로 교환 할 수 있어야 한다.
집에 있는 컴퓨터에 A사의 모니터를 연결하다가 B사의 모니터를 연결 할 수 있다.
또 집에 있던 모니터에 A사의 컴퓨터를 연결해서 사용하다가 새로운 컴퓨터를 구입하면서 B사의 컴퓨터를 연결 할 수 있다.
모니터와 컴퓨터는 서로가 교환관계에 있는 것이다.
이것은 모니터와 컴퓨터를 연결하는 케이블의 규격이 표준화 되어 있기 때문에 가능한 일이다.
이러한 연결점을 인터페이스(interface)라고 한다.
이러한 약속은 프로그래밍도 존재한다.