Object Oriented Programming

MihyunCho·2021년 4월 9일
0
post-thumbnail

1. 절차적 언어 vs 객체 지향 언어

절차적 언어

물이 위에서 아래로 흐르듯 순차적인 처리가 중요시 되는 프로그래밍 기법

  • 장점 : 컴퓨터의 처리구조와 유사해 실행속도가 빠름
  • 단점 : 유지보수가 어려우며, 실행 순서가 정해져 있어 코드의 순서가 바뀌면 결과가 바뀔 수 있음

객제 지향 언어

'클래스'라고 부르는 데이터 모델의 청사진을 사용해 코드 작성 (조립 pc와 같음)

  • 장점 : 코드의 재활용성이 높으며 절차지향보다 코딩이 간편함
  • 단점 : 처리 속도가 절차지향보다 느리며, 설계에 많은 시간이 소요됨

⚠️ 절차치향은 데이터 중심, 객체지향은 기능 중심.
⚠️ 절차지향의 반대는 객체 지향이 아니며, 객체지향의 반대는 절차 지향이 아니다


2. OOP

실제 세계를 모델링하여 소프트웨어를 개발하는 방법

  • 모든것은 '객체'로 그룹화된다
  • 4가지 주요 개념을 통해 재사용성을 얻을 수 있다

캡슐화 Encapsulation

  • 데이터와 기능을 하나의 단위로 묶는 것 (연관있는 변수와 함수를 클래스로 묶는 작업)
  • 은닉성(hiding): 구현은 숨기고, 동작은 노출시킴(중요한 데이터를 보존, 보호하는 것)
    • 자바스크립트에서 캡슐화 : 1. 기본 public 2. private,protected에 _ 붙여 선언
    • _(underBar) : 외부에서 언더바를 붙힌 프로퍼티나 메서드에 접근하여 사용하지 말라는 암묵적 약속.
  • 느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있음

추상화 Abstraction

  • 추상화는 클래스를 사용하는 사람이 필요하지 않은 메소드 등을 노출시키지 않고, 기능 단순한 이름으로 정의하는 것
  • 클래스 정의 시, 메소드와 속성만 정의한 것을 인터페이스라고 부르며, 이것이 추상화의 본질이다
  • 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념

상속 Inheritance

  • 상속은 부모 클래스의 특징을 자식 클래스가 물려받는 것
  • 자식이 부모를 선택해서 물려받음
  • 상속 대상 : 부모의 필드와 메소드

다형성 Polymorphism

  • 다형성은 상속을 받은 기능을 변경하거나 확장하는 것
    • 같은 타입이지만 실행 결과가 다양한 객체를 대입(이용)할 수 있는 성질
  • 코드의 재사용성이 높아져 코드의 길이가 감소하고 유지보수가 용이해짐

render()는 화면에 뿌리는 메소드인데, 모두 조금씩 다르게 작동한다 해도 render라는 메소드를 통해 화면에 뿌려지는 것은 다름 없다.

만약 Polymorphism이 없다면, render 메소드는 똑같이 화면에 뿌리는 동작을 한다 해도 종류별로 분기시켜 다르게 만들어야하는 상황이 발생함.

// ex) 
if (type === 'select') {
  renderSelect()
}
else if (type === 'text') {
  renderTextBox()
}
else if (type === 'checkbox') {
  renderCheckBox()
}

정리

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

0개의 댓글