본문 바로가기
공부/자바스크립트

[js] 객체지향 프로그래밍

by 야옹아옹 2022. 11. 18.

객체 지향 프로그래밍

프로그램을 명령어의 조합으로 보는 절차적 관점에서 벗어나
표현하고자 하는 실체가 가지는 속성들을 객체로 묶어서 표현하는 프로그래밍 방식을
객체 지향 프로그래밍이라고 한다.

즉, 실체가 가지는 속성(데이터와 기능)을 하나로 묶어서 표현한다. 실체란 프로그래밍을 통해 표현하고자 하는 모든 것을 의미한다.

ex ) 사람(실체) / 속성(이름,성별, 말한다, 달린다, 뛴다 ...)

 

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

캡슐화

데이터(속성)과 기능(메서드)를 따로 정의하는 것이 아니라 하나로 묶는 것을 의미한다.

  • 정보 은닉
    • 세부 구현이 외부로 드러나지 않도록 감추는 것이다.
    • 필요한 메서드만 외부로 노출 시켜, 만약 객체 내부의 구현을 수정하더라도 노출된 메서드를 사용하는 코드 흐름은 바뀌지않도록 할 수 있다.
    • 모듈 간의 결합도를 떨어뜨려 유연함과 유지보수성을 높일 수 있다.

상속

부모 클래스의 특징을 자식 클래스가 물려받는 것을 말한다.

추상화

객체들의 공통적 특징(기능, 속성)을 뽑아내는 행위

다형성

다양한 형태를 가질 수 있다는 의미다. 기능들이 상황에 따라 다른 기능을 수행할 수 있다.

ex. 말하다 라는 기능을 만들었을 때 객체가 사람, 개, 고양이, 새 일때 모두 다른 말을 한다.

  • 오버라이딩 Overriding
  • 오버로딩 Overloading

자바스크립트의 오버라이딩과 오버로딩

자바스크립트의 오버라이딩과 오버로딩은 다른 클래스기반 객체지향 프로그래밍 언어와 조금 다르다.

오버로딩 overloading

오버 로딩이란? 매개 변수의 개수, 매개 변수의 자료형에 따라 같은 이름임에도 다르게 선언할 수 있다. 이를 오버로딩이라고 한다.

자바스크립트는 오버로딩이 없다고 볼 수 있다.
// 자바 코드 출처 - https://www.zerocho.com/category/JavaScript/post/59c17a58f40d2800197c65d6
void overload(){
  System.out.println("매개변수 0개");
}

void overload(int i, int j){
  System.out.println("매개변수 "+ i + " 그리고 " + j);
}

void overload(double d){
  System.out.println("매개변수 " + d);
}

자바스크립트의 경우 위와 비슷하게 작성하면 에러가 발생한다. 

SyntaxError: Identifier 'overload' has already been declared

이미 식별자가 선언이 되어있기때문에 같은 이름의 함수를 선언할 수 없다. 만약 선언되더라도 이미 식별자 overload는 존재하기 때문에 계속 새롭게 덮어씌워질 것이다.

따라서 자바스크립트는 하나의 함수 내에서 여러개의 매개변수, 타입이 다른 경우를 조건문과 콜백 함수로 처리해야한다.

오버라이딩 overriding

상속 받은 부모의 메서드를 재정의해 사용하는 것을 말한다.

class Animal {
  constructor(name) {
    this.name = name;
  }
  say() {
    console.log("안녕하세요");
  }
}

class Cat extends Animal {
  say() {
    super.say();
    console.log("야옹?");
  }
}

cat 인스턴스의 프로토타입 체인

cat 인스턴스는 프로토타입 체인으로 say라는 메서드를 가져오는데 가장 가까운 say가 Cat.prototype.say이기 때문에 식별자로 선택되어 사용된다.

 

 

댓글