OOP(Object-Oriented Programming)

uoM·2021년 2월 26일
1

OOP(Object Oriented Programming)는 프로그래밍 패러다임중 하나로, 사람이 사물을 인식하고 정의하는 방식을 프로그래밍에 적용한 것이다.

간단한 예시를 생각해 보자.

우리 주변에는 로봇 청소기, 무선청소기등 여러가지 종류의 청소기를 볼 수 있다.
그럼 대표 객체인 청소기 라고하는 이름의 객체을 구현하여,
로봇청소기, 무선 청소기, 핸디 청소기를 만들는 것이 객체지향 프로그래밍이다.

OOP의 특징

1. 캡슐화

  • 실제로 구현 부분을 외부에 드러나지 않도록 하는 것
  • 변수와 메소드를 하나로 묶음
  • 데이터를 외부에서 직접 접근하지 않고 내부 변수를 통해서만 접근

⇒ 청소기라는 물체가 있는것을 알지만 실제로 안쪽에서 스위치를 누르면 모터가 돌고 먼지를 흡입하는 과정을 우리는 알지 못한다.

2. 상속

  • 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
  • 부모의 기능을 물려받을 때, 기능을 조금씩 수정하여 사용 할 수 있다.
  • 상속은 캡슐화를 유지, 클래스의 재사용이 용이하도록 해 준다.

⇒ 청소기라는 객체를 만들어 로봇 청소기, 무선 청소기, 핸디 청소기 등에 상속을 해준다. 그렇게 되면, 모두 먼지를 흡입하거나 전기를 사용하거나 하는 같은 기능을 받아 사용하게 된다.

3. 추상화

  • 인터페이스로 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것

⇒ 청소기는 '흡입구가 있으며 배출구가 있다. 전원을 누르면 동작하고 다시 누르면 종료한다.' 등의 기능과 변수에 대한 특징,기능등을 명시하여 사용하게 된다. 이렇게 추상화를 하게되면 다음에 청소기의 종류별 제품을 만들 때 쉽게 객체를 가지고 다른 청소리를 만들어 낼 수 있다.

4. 다형성

  • 어떤 변수,메소드가 상황에 따라 다른 결과를 내는 것

⇒ 각 청소기 마다 무선 청소기는 전기선이 없어야 하고, 로봇 청소기는 사람이 조작하지 않아도 청소를 해야하며, 핸디 청소기는 용량이 작고 쉽게 이동이 가능해야 한다. 이렇듯 구현하고자하는 각각의 객체에서 다른 결과를 구현할 수 있는 것이다. 오버로드, 오버라이드로 다형성을 표현할 수 있다.

오버로딩 (overloading) : 하나의 클래스에서 메소드의 이름이 같지만, 파라미터(parmeter)가 다른것
오버라이딩 (overriding) : 부모의 클래스의 메소드를 자식 클래스의 용도에 맞게 재정의하여 코드의 재사용성을 높임

OOP의 요소

클래스(class) - 처음 OOP가 나왔을 때, 나온 개념으로 추상화된 객체의 형태이다. 한마디로 같은 종류의 집단에 속하는 속성과 기능을 정의한 것. 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 한다.

객체(object) - 클래스의 인스턴스. 객체는 자신의 고유의 속성을 가지게 되고 상속받은 기능을 하게 된다. 클래스에서 정의한 기능과 속성을 공유하기 때문에 메모리를 경제적으로 사용하게 된다.

메서드(Method), 메시지(Message) - 클래스로 부터 생성된 객체를 사용하는 방법 보통 메서드라고 알려져 있다.

OOP의 단점

OOP는 어떠한 단점을 가지고 있을까?

1. 암시적 공유

  • 의도하지 않았지만 상속으로 인해 모든 속성과 행위를 공유한다.

2. 단일체

  • 하나의 부모가 존재한다. 추가적인 기능 구현으로 클래스의 덩치가 계속해서 커질 수 있다.

3. 클래스 타입 관계 문제

  • 복잡한 상속 구조를 지니게 되면 클래스의 올바른 타입을 얻기 위해 down-cast해야 한다.

**casting(형변화): 데이터의 타입을 변경하는 것

** down-cast : 부모객체의 타입을 자식객체의 타입으로 변환 하는것

실제로 추상화를 통해 기능을 구현하기 때문에 상속, 추상화에 의해 발생할 수 있는 데이터 처리 과정의 문제들이 있다.

Javascript는 어떤 프로그래밍 언어인가?

Javascript는 어떠한 방식의 프로그래밍 언어인가를 알아보면

Javascript는 prototype 기반 프로그래밍 언어라고 한다. 함수형 프로그래밍, 객체지향 프로그래밍을 모두 구현할 수 있으며 두 가지를 혼용하여 사용 할 수 있다.

결론

객체지향 프로그래밍은 하나의 프로그래밍 페러다임으로,
어떤 프로그래밍 방식이 더 좋다 나쁘다를 정할 수 없다.

실제로 프로덕션의 요구 스팩에 따라 구현하고 싶은 방식의 프로그래밍 패러다임을 찾으면 되는 것이다.

객체지향 프로그래밍은 사람이 세상을 이해하는 방식을 프로그래밍에 옮겨놓은 것이 큰 장점이 되고,

함수형 프로그램밍은 기능 중심적인 함수 구성으로 함수 외부 데이터에 영향이 없는 순수함수와 함수의 독립성을 유지할 수 있는 프로그래밍에 적합하다.

필요한 방식을 선택해 프로그래밍에 적용 하는게 중요하다.

reference

https://m.blog.naver.com/PostView.nhn?blogId=tmondev&logNo=220863182982&proxyReferer=https:%2F%2Fwww.google.com%2F

http://ufx.kr/blog/539

0개의 댓글