노트 #31 | 객체 지향 - 객체 지향 프로그래밍 (OOP)

HyeonWooGa·2022년 7월 22일
0

노트

목록 보기
32/74

개요

프로그램 설계 철학 중 하나인 객체 지향 프로그래밍은 객체로 그룹화합니다. 이 객체는 한번 만들고 나면 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지됩니다.


학습 목표

  • 객체 지향 프로그래밍에 대해 학습한다.
  • 객체 지향 프로그래밍으로 프로그래밍 할 수 있게 된다.

용어

  • 객체 (인스턴스 객체)
    • "데이터와 기능이 함께 있다"는 객체 지향 원칙에 따라 속성과 메서드가 함께 존재합니다.

  • 클래스 (class)
    • 세부 사항(속성)이 들어가지 않은 청사진(설계도)입니다.
    • 속성만 넣는다면 인스턴스 객체가 되는 것 입니다.

  • 생성자 (constructor)
    • 속성을 넣어주는 역할을 합니다.
    • 함수에 인자를 넣듯 인스턴스 객체에 속성을 넣을 수 있습니다.


기본 네 가지 컨셉(개념)

  • 캡슐화 (Encapsulation)
    • 데이터 은닉에 집중합니다.
    • 데이터와 기능을 하나의 단위로 묶는 것
    • 느슨한 결합(Loose Coupling)에 유리
      • 언제든 구현을 수정할 수 있습니다.
      • 코드 실행 순서가 아닌 실제 모습과 닮게 코드를 모아 결합하는 것입니다.
    • 은닉화(hiding)
      • 내부 데이터, 구현이 노출되지 않도록 만드는 것입니다.
      • 객체 외부에서 필요한 동작(메서드)만 노출시켜야 합니다.
      • 더 엄격한 클래스는 setter와 getter를 철저하게 나누기도 합니다.

  • 추상화 (Abstraction)
    • 필요하지 않는 메서드 등을 노출시키지 않고 단순한 이름으로 정의하는 것에 집중합니다.
    • 내부 구현은 복잡한데 실제로 노출되는 부분은 단순하게 만든다는 개념입니다.
    • 너무 많은 기능들이 노출되지 않아 엣지 포인트를 줄일 수 있습니다.
    • 인터페이스가 단순해 집니다.
      • 인터페이스 : 메서드와 속성만 정의한 것, 추상화의 본질입니다.

  • 상속 (Inheritance)
    • 부모 클래스의 특징을 자식 클래스가 물려받는 것입니다.
    • "기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다" 는 표현이 더 명확합니다.
    • 예를 들어 사람(human) 클래스가 있을때 학생(student)는 추가적으로 학습 내용, 공부하다 등의 속성/메서드를 사람 클래스를 상속받은 후 추가만 하면됩니다.

  • 다형성 (Polymorphism)
    • "다양한 형태" 를 가질 수 있다는 뜻입니다.
    • 예를 들어 HTML의 경우 다양한 "각 엘리먼트 클래스들"이 공통 부모인 "HTML Element 클래스"에서 render()라는 메서드를 상속받지만 "각 엘리먼트 클래스들" 마다 조금씩 다르게 작동합니다.
    • 다형성이 없다면 부모 클래스에 자식 종류별로 하나하나 다르게 만들어야 합니다.
      • 예를들어 renderH1(), renderDiv()

  • 기본 네가지 개념에 따른 장점

    • 캡슐화 : 코드가 복잡하지 않게 만들고, 재사용성을 높입니다.

    • 추상화 : 코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화합니다.

    • 상   속 : 불필요한 코드를 줄여 재사용성을 높입니다.

    • 다형성: 동일한 메서드에 조건문 대신 객체의 톡성에 맞게 달리 작성하는 것이 가능해집니다.

마치며

객체 지향 프로그래밍

사람이 세계를 보고 이해하는 방법을 프로그래밍에 흉내낸 방법론

하나의 요소를 객체 단위로 구분시켜서 생각하면 보다 좋은 설계를 할 수 있습니다.

+  절차적 코드의 경우 데이터의 형태가 바뀔 때마다 코드의 흐름에 큰 영향을 미치게 되어 유지 보수가 어렵습니다.


profile
Aim for the TOP, Developer

0개의 댓글