< JavaScript > 객체 지향 프로그래밍 (OOP, Object Oriented Programming)

초초·2023년 1월 13일
1

💻📚 TIL

목록 보기
16/22

🔍 객체 지향 프로그램이란?

  • 프로그래밍에서 필요한 데이터를 추상화 시켜 상태행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법
  • 객체지향 프로그래밍에서는 데이터와 절차를 하나의 덩어리로 묶어서 생각함
    => 마치 컴퓨터 부품을 하나씩 사다가 컴퓨터를 조립하는 것과 같은 방법

이때 상태, 데이터는 속성 / 행위, 절차는 매서드로 말할 수 있다

절차 지향 프로그램

  • 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
  • 초기에 주로 사용되었으며 대표적인 절차지향 언어에는 C언어가 있음
  • 컴퓨터의 처리구조와 유사해 실행속도가 빠르다는 장점이 있지만 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어려움

시간이 지나며 급속도로 발전하는 하드웨어에 발맞추어 소프트웨어도 빠르게 발전시키기 위해 모듈화, 캡슐화해서 개념적으로 접근하는 형태를 갖는 객체지향 프로그래밍이 탄생

객체

  • 프로그램에서 사용되는 데이터
  • 값을 저장할 변수와 작업을 수행할 메서드를 서로 연관된 것들끼리 묶어서 만든 것
  • 객체 지향 프로그래밍에서는 모든 것은 객체로 그룹화


객체 지향 프로그래밍의 주요 개념

💊 캡슐화

  • 데이터 구조와 데이터를 다루는 방법을 하나의 단위로 묶음
  • 속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 넣어서 분류하는 것
  • 코드 진행에 따라 데이터(속성)와 기능(메서드)을 각각 따로 정의하여 묶어주는 것과 달리 느슨한 결합이 됨
  • 캡슐화를 통해서 은닉화가 가능하다

🔒 은닉화?
내부 데이터나 내부 구현이 외부로 노출되지 않도록 만들고, 객체에서 속성을 직접 접근하지 못하게 숨기기 때문에 객체가 반드시 정해진 매서드를 통해 상호작용 하도록 함
은닉화는 객체의 응집도를 높혀 모듈화를 이루게 하는데 , 이후 모듈 단위로 재사용이 용이하다 이런 은닉화의 특징을 사용하면 이후 객체 내 메서드의 구현만 변경하여 이 매서드를 사용하는 다른 코드들에서 수정사항을 반영할 수 있다


📥 상속

  • 이미 작성된 클래스를 이어 받아서 새로운 클래스를 생성할 수 있음
  • 클래스는 다른 클래스에 상속될 수 있음
  • 새로 만들어진 자식 클래스가 부모의 클래스의 속성과 매서드를 모두 그대로 이어받아 사용 가능함

자식 클래스는 부모 클래스에서 상속받은 속성과 매서드 외에 추가하거나 수정할 수 있다

💖 추상화

  • 불필요한 정보는 숨기고 중요한 정보만을 표현하여 프로그램을 간단하게 만드는 것
  • 객체에서 공통된 속성과 행위를 추출함

ex. 그림과 같이 사람 얼굴의 공통적인 특징(눈썹, 눈, 코, 입)을 뽑아내어 그린 추상화 이때 개인의 세부적인 특징은 무시된다

💡 추상화와 은닉화
캡슐화가 코드나 데이터를 은닉하여 접근 권한을 제한시기는 것에 집중한다면, 추상화는 클래스를 사용하는 사람이 불필요하지 않은 메서드 등을 감추어 목표하는 동작을 편하게 수행할 수 있도록 하는 것에 집중함


🦎 다형성

  • 하나의 매서드가 상황에 따라 다른 의미로 변형할 수 있음
  • 개념적으로 동일한 작업을 하는 매서드에 똑같은 이름을 사용할 수 있기때문에 코드가 더 간단해짐
class firstClass {
        add() {
            console.log("First Method")
        }
    }
    class secondClass extends firstClass {
        add() {
            console.log(30 + 40);
        }
    }
    class thirdClass extends secondClass {
        add() {
            console.log("Last Method")
        }
    }
    var ob = new firstClass();
    var ob2 = new secondClass();
    var ob3 = new thirdClass();
    ob.add();	//"First Method"
    ob2.add();	// 30 + 40
    ob3.add();	//"Last Method"

firstClass의 add 매서드를 secondClass, thirdClass 에서 상속하고 있다
동일한 메서드 이름과 메서드 정의가 다른 여러 클래스를 만들었는데, 이 예제는 동일한 메서드가 호출되는 개체에 따라 다른 작업에서 수행됨을 볼 수 있다

profile
잔디 꽉꽉 심쟈 🍀

0개의 댓글