OOP(Object Oriented Programming)는 프로그래밍 패러다임중 하나로, 사람이 사물을 인식하고 정의하는 방식을 프로그래밍에 적용한 것이다.
간단한 예시를 생각해 보자.
우리 주변에는 로봇 청소기, 무선청소기등 여러가지 종류의 청소기를 볼 수 있다.
그럼 대표 객체인 청소기
라고하는 이름의 객체을 구현하여,
로봇청소기, 무선 청소기, 핸디 청소기를 만들는 것이 객체지향 프로그래밍이다.
⇒ 청소기라는 물체가 있는것을 알지만 실제로 안쪽에서 스위치를 누르면 모터가 돌고 먼지를 흡입하는 과정을 우리는 알지 못한다.
⇒ 청소기라는 객체를 만들어 로봇 청소기, 무선 청소기, 핸디 청소기 등에 상속을 해준다. 그렇게 되면, 모두 먼지를 흡입하거나 전기를 사용하거나 하는 같은 기능을 받아 사용하게 된다.
⇒ 청소기는 '흡입구가 있으며 배출구가 있다. 전원을 누르면 동작하고 다시 누르면 종료한다.' 등의 기능과 변수에 대한 특징,기능등을 명시하여 사용하게 된다. 이렇게 추상화를 하게되면 다음에 청소기의 종류별 제품을 만들 때 쉽게 객체를 가지고 다른 청소리를 만들어 낼 수 있다.
⇒ 각 청소기 마다 무선 청소기는 전기선이 없어야 하고, 로봇 청소기는 사람이 조작하지 않아도 청소를 해야하며, 핸디 청소기는 용량이 작고 쉽게 이동이 가능해야 한다. 이렇듯 구현하고자하는 각각의 객체에서 다른 결과를 구현할 수 있는 것이다. 오버로드, 오버라이드로 다형성을 표현할 수 있다.
오버로딩 (overloading) : 하나의 클래스에서 메소드의 이름이 같지만, 파라미터(parmeter)가 다른것
오버라이딩 (overriding) : 부모의 클래스의 메소드를 자식 클래스의 용도에 맞게 재정의하여 코드의 재사용성을 높임
클래스(class)
- 처음 OOP가 나왔을 때, 나온 개념으로 추상화된 객체의 형태이다. 한마디로 같은 종류의 집단에 속하는 속성과 기능을 정의한 것. 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 한다.
객체(object)
- 클래스의 인스턴스. 객체는 자신의 고유의 속성을 가지게 되고 상속받은 기능을 하게 된다. 클래스에서 정의한 기능과 속성을 공유하기 때문에 메모리를 경제적으로 사용하게 된다.
메서드(Method), 메시지(Message)
- 클래스로 부터 생성된 객체를 사용하는 방법 보통 메서드라고 알려져 있다.
OOP는 어떠한 단점을 가지고 있을까?
**casting(형변화): 데이터의 타입을 변경하는 것
** down-cast : 부모객체의 타입을 자식객체의 타입으로 변환 하는것
실제로 추상화를 통해 기능을 구현하기 때문에 상속, 추상화에 의해 발생할 수 있는 데이터 처리 과정의 문제들이 있다.
Javascript는 어떠한 방식의 프로그래밍 언어인가를 알아보면
Javascript는 prototype 기반 프로그래밍 언어라고 한다. 함수형 프로그래밍, 객체지향 프로그래밍을 모두 구현할 수 있으며 두 가지를 혼용하여 사용 할 수 있다.
객체지향 프로그래밍은 하나의 프로그래밍 페러다임으로,
어떤 프로그래밍 방식이 더 좋다 나쁘다를 정할 수 없다.
실제로 프로덕션의 요구 스팩에 따라 구현하고 싶은 방식의 프로그래밍 패러다임을 찾으면 되는 것이다.
객체지향 프로그래밍은 사람이 세상을 이해하는 방식을 프로그래밍에 옮겨놓은 것이 큰 장점이 되고,
함수형 프로그램밍은 기능 중심적인 함수 구성으로 함수 외부 데이터에 영향이 없는 순수함수와 함수의 독립성을 유지할 수 있는 프로그래밍에 적합하다.
필요한 방식을 선택해 프로그래밍에 적용 하는게 중요하다.