JS 추상화, 캡슐화

sam_il·2022년 7월 22일
0

JavaScript

목록 보기
14/22
post-thumbnail

추상화

특정 기능을 하는 그룹의 공통된 기능(프로퍼티와 메서드)을 정의하는 작업을 말한다.

객체지향 프로그래밍에서 추상화는 객체들의 공통적인 프로퍼티와 메서드를 뽑아내는 작업을 말한다. 개발하려고 하는 프로젝트에서 사용하는 객체가 무엇인지 살펴본 후 객체가 가지고 있어야 할 프로퍼티와 메서드를 추상적으로 생각해 설계도를 그리게 된다.

  • 추상화는 특정 기능을 하는 그룹의 공통된 기능을 정의하는 작업을 말한다. 클래스의 선언부분과 구현부분 중 추상화는 오직 선언부분에만 정의할 뿐 구현 부분은 작업하지 않는다.

! 이미지 슬라이더 추상화하기 (단순한 객체 추상화)

! 이미지 슬라이더 추상화하기2 (좀더 복잡한 추상화)

  • 앞선 추상화 그림에서 주의깊게 살펴볼 부분은 바로 정렬 기능 인터페이스 부분이다. 여기서 인터페이스를 사용한 이유는 앞에서 살펴본 것처럼 인터페이스와 연결되는 클래스는 반드시 인터페이스에 정의되어 있는 기능을 구현해야 하는 규약을 적용하기 위해서이다.
  1. 일반 OOP(객체지향 프로그래밍)에서 지원하는 추상화
    일반 클래스(class) / 추상 클래스(abstract class) / 인터페이스(interface)

  2. 자바스크립트에서 추상화
    추상 클래스와 인터페이스를 제공하지 않기 때문에 오직 클래스만을 이용하여 추상화 작업을 해야 한다. 클래스와 비슷하게 만들어 사용하는 방식 3가지를 제공한다. (리터럴 방식, 함수활용 방식, 프로토타입 방식)


캡슐화

캡슐화는 객체의 프로퍼티와 메서드를 숨기거나 노출할 때 사용한다.

캡슐화는 일반적으로 연관있는 변수와 함수를 클래스로 묶는 작업을 말한다. 캡슐화에서는 은닉성이라는게 있어서 클래스에 담는 내용 중 중요한 데이터나 기능을 외부에서 접근하지 못하게 할 수 있는 기능이 있다.

  1. 일반 OOP에서 지원하는 추상화
    접근 제어자 : 일반적으로 객체 내부에 들어있는 프로퍼티와 메서드는 객체 외부, 객체 내부 자식 객체에서 접근해 사용한다. (public, protected, private, + default)
    UML로 접근 지정자 표현하기 (public +, protected #, private -)

  2. 자바스크립트에서 캡슐화
    문법적으로 캡슐화를 제공하지 않는다. 다음과 같은 방식으로 접근 제어자를 흉내내어 사용한다.

function MyClass() {
        //public 프로퍼티
        this.프로퍼티이름 = 값;
        //private/protected 프로퍼티
        this._프로퍼티이름 = 값;
        //public 메서드
        MyClass.prototype.메서드이름 = function() {…}
        //private/protected 메서드
        MyClass.prototype._메서드이름 = function() {…}

정리하자면 접근 제어자 대신 사용하는 자바스크립트 캡슐화 문법은 다음과 같다.

여기서 주의해야 할 점은 앞에서 언급한 것처럼 이렇게 한다고 해도 자바스크립트는 문법적으로 접근제어자 기능을 지원하지 않기 때문에 객체 외부에서 얼마든지 접근할 수 있다. 다만, 일종의 무언의 약속처럼 “앞에 _이 붙은 것은 private이라는 뜻이기 때문에 클래스 밖에서 접근해 사용하면 안되는구나”라고 하는 식으로 사용한다라는 것이다. (노출시킬 부분과 아닌 부분을 결정해서 사용하면 되는 것)

profile
🍀

0개의 댓글