OOP(Object-Oriented Programming)

uoM·2021년 2월 26일

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개의 댓글