OOP(Object-oriented Programming)

WooSeong·2021년 4월 9일
0

학습 노트

목록 보기
10/22
post-thumbnail

OOP(Object- Oriented Programming)

OOP 이전의 컴퓨터 프로그래밍 패러다임은 명령형 프로그래밍이 주류 였다. 명령형 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 바라 보았고 이를 순서에 맞추어 구동시키는 것으로 문제 해결에 접근 하였다. 하지만 컴퓨터 프로그래밍은 점점 사람들의 일상과 가까워 졌고 현실세계의 문제 해결을 위해서 사용되는 경우가 많아졌다.

현실세계는 명령어의 목록이 아니고 정확한 순서에 맞추어 정확하게 절차적으로 진행 되지도 않는다.

이런 상황에서 기존의 명령형 프로그래밍은 점차 복잡해 지는 프로그램과 함께 순서도도 스파게티 처럼 꼬여 버렸고 해결 해야 하는 문제에서 동 떨어져 문제 해결을 위한 코드를 해석해야만 하는 문제를 만들게 되었다.(목적과 수단이 뒤 바뀌어 버리게 된 것!) 따라서 현실을 반영한 새로운 프로그램 설계 개념이 필요하게 되었다.

객체 (Object)

멀리 떨어져 있는 친구와 지금 바로 이야기가 하고 싶으면 어떻게 해야 할까? 아주 간단한 문제다. 핸드폰을 들고 전화번호를 입력해 친구가 전화를 받으면 대화를 하면 된다. 방금 전의 예에서 우리는 문제해결을 위해 객체를 이용하였다.

객체는 여러 특성과 작동방식 혹은 행동이 내재된 물건같은 것이다.

프로그래밍에서 객체는 어떤 단순한 문제를 해결할 수 있는 작은 기능의 집합체이다. 객체 지향 프로그래밍은 프로그램이 이런 객체들로 이루어져 있고 객체를 끌어오고 다른 객체와 연결해보고 다시 집어넣는 과정을 통해 문제를 해결한다.

객체 : 핸드폰

객체는 그 고유의 특성과 작동방식이 규정되어 있다. 핸드폰 객체의 특성은 다음과 같다. (나의 핸드폰을 예로 : iPhone 11)

  • 색상 : 골드
  • 모양 : 모서리가 둥근 직사각형
  • 충전포트 : 1개 USB-C
  • 스피커 : 2개

작동방식은 다음과 같다.

  • 인터넷
  • 전화
  • 앱 구동 : 카카오톡, 유튜브 ...

OOP의 4가지 컨셉

캡슐화(Encapsulation)

각 객체는 데이터(특성)과 기능(작동방식)을 하나로 묶어 놓은(Capsule) 것이다. 이 때문에 각 객체는 속성을 가지고 있으며 객체 내에 동작하는 함수를 가지고 있을 수 있다.(객체내의 함수를 메소드라 한다.)

  • 느슨한 결합에 유리하다.
  • 캡슐화라는 컨셉은 은닉화라는 컨셉을 포함하고 있다.

은닉화는 원형 객체의 정보를 감출수 있다는 것을 의미한다. 원형 객체에 담겨 있는 정보를 신경쓰지 않고 필요한 것만 빼와서 쓸 수 있게된다. (클로저 함수 방식으로 구현)

추상화(Abstraction)

핸드폰을 사용하여 전화를 걸때 전화번호를 누르고 신호음이 간 후 통화가 연결될때 까지는 기지국에 신호를 보내고 그 신호를 중계하여 내가 입력한 전화번호를 갖고 있는 핸드폰을 찾는 등의 여려 과정이 필요하지만 우리는 이런 복잡한 과정을 신경쓰지 않는다. OOP는 이러한 추상화를 지향한다. 추상화를 통해 객체 내의 복잡한 정보나 함수를 신경쓰지 않고 필요한 것만 편하게 사용할 수 있다.

상속(Inheritance)

객체 지향 프로그래밍에서 객체는 단순한 기능의 집합체를 의미한다 하였다. 이 단순한 기능의 집합체를 원형 객체로 두고 이를 꺼내와 그대로 사용하거나 추가적인 속성이나 기능을 붙여 사용할수 있다. 규정된 원형 객체는 그 것을 어떻게 사용하든 변하지 않는 것이 좋다. 이렇게 가져오는 것을 상속이라 한다. 자바스크립트의 상속은 프로토타입 체인을 통해 이루어 진다.

다형성(Polymorphism)

다형성은 다양한 형태를 지닐수 있다는 뜻이다. 클래스에 정의한 메소드를 사용할때 환경에 맞추어 다양한 결과를 낼 수 있도록 한다면 원형 객체의 메소드를 사용할때마다 재할당 해줄 필요성이 줄게 된다. 객체 지향 프로그래밍이 지향하는 재사용성과 중복 코드의 제외를 이루기 위해선 다형성이 중요하다.

OOP의 장점

OOP의 4가지 컨셉을 통해 코드를 구현하게 되면 다음과 같은 장점을 얻을 수 있다.

  • 코드의 복잡성 감소
    • 인스타그램을 절차적 프로그래밍으로 구현하려 하면 너무나도 코드가 복잡해 질것이다. 기본 기능을 클래스에 담아두고 필요할 때마다 꺼내서 조금씩 변형해서 사용할수 있게 하는 것이 효율적이다.
  • 재사용성의 증가
    • 이는 중복된 코드를 제외할수 있다와 동일하다
  • 변화에 대한 영향을 최소화
    • 클래스에 정의된 메소드는 사용할때 마다 변형 하여 사용할 수 있지만, 본질적으로 변하지는 않는다.
  • 사용 환경에 따라 같은 메소드도 다른 결과를 나타내게 구현할 수 있다.
profile
성장하는 개발자를 꿈꿉니다

0개의 댓글

관련 채용 정보