컴퓨터 프로그래밍의 패러다임 중 가장 대표격인 객체 지향 프로그래밍은 필요한 데이터를 추상화시켜
속성과 행위(메서드)를 지닌 객체 형태로 생성된 프로그래밍 방법이다.
자바스크립트의 경우 객체 지향 언어는 아니지만(자바스크립트는 프로토타입 언어), 객체 지향으로 코딩이 가능하다.
객체 지향 언어의 대표격으로는 C#, C++, Java가 있다.
그렇다면 도대체 객체 지향 언어가 어떠한 특징을 가지고 있길래 이렇게 주목을 받는 것일까?
기존 C언어의 경우 절차적 언어인 관계로 유지보수가 어려우며, 정해진 순서에 따라 출력 결과가 상이한 관계로
대형 프로젝트에 불편함이 있었다.
그러나 객체 지향 언어가 탄생하며 기존 코드의 재활용과 유지보수 등등 훨씬 편한 작업이 이뤄지게 되어
개발자들 사이에서 선호하는 언어가 되었다.
장점
1.코드 실행에 있어 속도가 매우 빠르다.
2.작업 컴퓨터의 처리 구조가 기존 절차 지향 언어 구조와 비슷해 내부적 문제 파악에 용이하다.
단점
1.유지보수가 까다롭다.
2.기존 정해진 순서에 의존하여 결과가 도출된다.
3.디버깅 분석에 많은 시간이 소요 된다.
4.대형 프로젝트에는 부적합하다.
장점
1.기존 코드의 재활용과 유지보수가 쉽다.
2.디버깅 분석이 편하다.
3.캡슐화, 다형성, 상속성, 추상화의 컴퓨터 구조 철학 특징을 갖고 있다.
4.대형 프로젝트에 적합하다.
단점
1.처리속도가 느리다.
2.객체가 많아질수록 프로그램 용량이 높다.
3.각 객체마다의 설계해야하는 까다로움이 있다.
자바스크립트에서 OOP는 ESC6(ECMAScript 6)에서 새로 class 형식을 도입하였으므로 클래스를 중점으로
설명하겠다.
검을 제작할수 있는 제작서가 있는데, 이는 OOP 상에서 class에 해당된다.
이 제작서를 통해 재료는 속성에 속하며,
사용 용도로 검을 휘두르는 행동은 메소드와 비슷하게 보아도 좋다.
그렇게 제작 완성된 검은 가지각색일 것이며, 검 그 자체는 instance가 될 것이다.
이제 이를 Javascript 코드로 구현 해보자
class Sword_manual {
constructor(mater1, mater2) {
this.materials_1 = mater1;
this.materials_2 = mater2
}
wield() {
console.log("검을 휘두르다")
}
}
let frostmourne = new Sword_manual('Iron', 'Blizard')
// Sword_manual {materials_1: "Iron", materials_2: "Blizard"}
let samuraiSword = new Sword_manual('Iron', 'Wood')
// Sword_manual {materials_1: "Iron", materials_2: "Wood"}
해당 서리한과 사무라이검은 instance(object)이므로 각각 다른 재료로 제작이 필요하다는 것을 볼 수가 있다.
이는 결국 클래스(검 제작서)는 instance(제작된 검)를 만들기 위한 생성 프로그래밍인 셈이다.
속성(프로퍼티)과 기능(메소드)의 모음을 class에 캡슐처럼 담은 관계로 언제든 코드를 재활용이 가능하다.
이는 은닉화하여 이왕 class에 속성과 기능을 모았으니 해당 속성은 class 내의 기능(메소드)로만 변경이 가능하다.
은닉화란?
내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
은닉화의 예
instance B 메소드를 사용한다고,
instance A 속성이 변하지 않는다.
즉 은닉화를 통해 예측 가능한 코드 작성법이 되며, 덕분에 디버깅 분석에도 쉬워진다.
내부 구현은 아주 복잡하거나, 비공개적인 형식을 원하는 관계로 노출되는 부분만 단순하게 도출되는 개념이다.
다시 종합하자면 필요한 것만 보이게 하는 특성으로 밖에 나온 인터페이스만 구현하는 것이다.
주의점!!
내부 구현을 숨긴다는 것은 위의 캡슐화와 의미가 비슷하지만 개념적 철학은 엄연히 다르다.
예를 들자면, 라이프니츠의 미분법과 뉴턴의 미분법이 의미는 비슷하나 공식 과정이 다른 것처럼 말이다.
상속은 단어 뜻 그대로 상위클래스가 하위클래스에서도 사용할 수 있게 물려주는 의미와 똑같다.
예를 들자면 고양이과라는 최상위 분류(상위클래스)를 통해 호랑이, 사자, 표범 등등
수 많은 고양이과 동물종들이(하위클래스) 고양이 특유의 특성을 물러 받는것과 비슷하다고 비유할 수 있다.
"안녕하세요"라는 의미가 뜻은 같지만 전세계인들이 다르게 말하듯
다형성은 상속의 특징에 관련되어 기존 기능을 확장하거나 변경하는 것을 가능하게 해준다.
즉, 다형성은 하위 클래스 간의 형태가 같은데 서로 각자 다른 기능을 수행하는 셈이다.
OOP는 객체 지향 페러다임에 따라 캡슐화, 추상화, 상속, 다형성을 가진 개발 특성 철학을 갖추고 있다.
앞으로 어떤 프로젝트를 개발할 것인지에 판단하여 OOP는 코드의 재활용성 및 복잡도를
낮추는 관계로 보다 더 좋은 서비스 플렛폼을 구축할 수 있을 것이다.