객체 지향 프로그래밍

신창용·2022년 11월 18일
0

절차적 언어

  • 초기의 프로그래밍 언어는 일반적으로 절차적 언어라고 부른다.(C,포트)
    - 초기의 C 포트란 같은 언어들은 객체 지향의 개념이 없는 절차적 언어였다.
    • 모든 것을 절차적으로 생각하며 기껏해야 함수로 이동하는 것이 전부 였다.

객체 지향 언어

  • "클래스"라고 부르는 데이터 모델의 청사진을 사용해 코드 작성
  • 현대의 언어들은 대부분 객체 지향의 특징을 갖고 있다.(java, C++, C# 등)
  • javaScript: 객체 지향으로 작성 가능
  • 데이터의 접근과 데이터의 처리 과정에 대한 모형을 만들어 내는 방식을 고안해 냈다.
    - 데이터와 기능이 별개로 취급되지 않고, 한 번에 묶어서 처리할 수 있게 되었다.
    • 위 같은 객체 지향의 특징은 빠르게 현대 언어에 적용 되었고, 자바스크립트는 엄밀히 말해 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성할수 있다.

OOP

  • OOP는 프로그램 설계 철학이다.
  • OOP는 모든 것은 "객체"로 그룹화된다.
  • OOP의 4가지 주요 개념을 통해 재사용성을 얻을 수 있다.
  • 한번 만들고 나면, 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지된다.
  • 객체 내에는 "데이터와 기능이 함께 있다"라는 원칙에 따라 메서드와 속성이 존재한다.
    - EX) 자동차는 공통적인 기능과 고유의 속성이 있다. 속도를 내거나, 주유를 하거나 등의 기능이 존재하고 속성으로는 색상, 최고 속력, 탑승인원 등과 같은 고유의 데이터가 존재한다.
  • 새로운 객체를 만들 때 "이번에 만들 자동차는, 빨간색의 최고 속력은 ~~Km.h를 내도록 만들어보자 와 같이 속성에 고유한 값을 부여할 수 있다.

클래스와 인스턴스

  • 클래스는 일종의 원형(original form)으로, 객체를 생성하기 위한 아이디어나 청사진이다.

  • 인스턴스는 클래스의 사례(instance object) 이다.

  • 클래스는 객체를 만들기 위한 생성자(constructor) 함수를 포함한다.

  • 클래스는, 세부사항(속성)이 들어가지 않은 청사진이다.
    - 세부 사항만 넣는다면, 객체가 되는 것이다.

    • 자바스크립에서 사용하는 용어와 별개로 클래스를 통해 만들어진 객체를 특별히 인스턴스 객체 줄여서 인스턴스라고 부른다.
    • 세부 사항은 어떻게 넣어줘야 하나?
      - 이 역할을 하는 것이 바로 생성자이다.
      - 생성자를 통해 세부 사항(속성)을 넣어준다.
      - 함수에 인자를 넣듯, 속성을 넣을 수 있다.
  • 자동차에는 색상, 가격, 속력과 같은 고유의 속성이 있다.

  • 하지만 시작, 후진, 전진, 멈춤과 같이 자동차의 기능이 메서드로 존재한다.

OOP Basic Concepts

  • 애플리케이션을 만들 떄 좋은 설계를 하기 위해서는, 기본적으로 이 객체 지향을 이해하고 응용하는 것이 중요하다.
  • 객체 지향 프로그래밍의 주요 개념을 소개한다.

캡슐화 Encapsulation

  • 데이터와 기능을 하나의 단위로 묶는 것
  • 은닉(hiding): 구현은 숨기고, 동작은 노출시킴
    - 은닉화는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것이다.
  • 느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있음
    - 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.

추상화 Abstration

  • 내부 구현은 아주 복잡한데, 신제로 노출되는 부분은 단순하게 만든다는 개념
  • 클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라고 부른다.

상속 Inheritance

  • 상속은 부모 클래스의 특징을 자식 클래스가 물려받는 것이다.
    - "기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다"

다형성 Polymorphism

  • Polymorphism이라는 단어의 poly는 "많은", 그리고 morph는 "형태"라는 뜻을 가지고 있습니다
    - "다양한 형태"를 가질 수 있다는 말이 된다.

주요개념 장점

  • 캡슐화는 코드가 복잡하지 않게 만들고, 재사용성을 높입니다.
  • 추상화는 코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화한다.
  • 상속 역시 불필요한 코드를 줄여 재사용성을 높입니다.
  • 다양성으로 인해 동인한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해진다.

마지막

  • 객체 지향 프로그래밍 패러다임을 따라해 보면, 사람이 세계를 보고 이해하는 방법과 매우 흡사하다고 느끼게 된다.
profile
코딩으로 쓰는 일기장

0개의 댓글