[JS] JavaScript와 기타 OOP언어와의 차이점

김형주·2021년 4월 12일
0

JavaScript는 일반적인 객체지향언어들과 달리, Prototype을 중심 개념으로 객체 체계를 가지고 있는 언어다. 일반적인 객체지향언어의 경우 객체 내부 데이터의 접근성을 조작하는 public, private와 같은 키워드들을 가지고 있다. 그렇다면 어떤 차이점들이 있는지 간단하게 알아보자.

은닉화(private 키워드)의 한계


Java나 TypeScript, 혹은 C++이나 C#같은 언어에는 클래스 내부에서만 쓰이는 속성 및 메소드를 구분시키기 위해 private라는 키워드를 제공한다. 이러한 은닉화(데이터를 클래스 외부로부터 안정적으로 가리는 효과)를 도와주는 기능이 JavaScript에서는 쓰이지 않는다. 아래는 TypeScript의 예제인데, name이라는 속성이 존재하지만, private라는 키워드가 붙어있어서, 클래스 내부에서만 접근하고 사용할 수 있다.

 // TypeScript 예제
 class Animal {
 	private name: string;
    	constructor(theName: string) {
    	this.name = theName;
        }
     }
  new Animal("Cat").name; // 접근 불가
  // name 프로퍼티는 private 타입이다. 
  // Animal class 안에서만 사용될 수 있다.

JavaScript에서는 은닉화를 돕기 위해 클로저 모듈 패턴을 사용하는 것이 보통이며, 클로저 모듈 패턴은 다음과 같다.

  const Module = function(){
 	 var privateKey = 0;
  function privateMethod(){
  	return ++privateKey;
    }
  return {
  	publicKey : privateKey,
    publicMethod : function(){
    		return privateMethod();
            }
         }
      };

위의 방식을 이용하면 Module로 생성한 인스턴스는 publicMethod로 호출을 하면 내부에 숨겨진 privateMethod를 호출하게된다. privateKey값은 publicKey를 이용해서 호출한다. 이를 통해서 모듈의 인스턴스 내부에 프로퍼티나, method를 숨겨두고 사용할 수 있도록 하는 것이 클로저 모듈 패턴이다.

추상화(interface 키워드) 기능 부재


객체지향 프로그래밍의 주요 키워드 중 하나인 추상화는, 속성과 메소드의 이름만 노출시켜서 사용을 단순화한다는 의미를 가지고 있다. 즉, 인터페이스(interface)의 단순화를 의미한다. Java나 TypeScript 언어는 이를 언어의 주요 기능으로 구현해놓았다. interface는 JavaScript에 존재하지 않는 기능이다.

//typeScript 예제
interface ClockInterFace {
	currentTime: Date;
        setTime(d: Date): void;
        }
class Clock implements ClockInterface {
	currentTime: Date = new Date();
    setTime(d: Date) {
    	this.currentTime = d;
        }
        constructor(h: number, m: number) { }
      }

인터페이스의 이점은, 인터페이스가 일종의 규약(설계도)처럼 간주되서, 인터페이스를 클래스로 구현하는 사람들이 이에 맞게 작성할 수 있도록 돕는다.(인터페이스는 다양한 구현이 있을 수 있다.)
이게 왜 장점이냐하면, 클래스를 이용하는 입장에서 노출된 인터페이스를 통해, "이 클래스는 메소드 이름이 의도한 바대로 작동할 것이다."라는 것을 명백히 드러나게 해준다. 또한 실질적인 구현을 공개하지 않고, 사용법을 노출시키기에도 유리하다.
어떤 클래스가 외부 공개용으로 모듈처럼 작동할 때에, 이러한 인터페이스는 빛을 발한다. 이러한 인터페이스 사용의 대표적인 예가 API(Application Programming Interface)이다. API는 이후에 자세히 다시 다루겠다.

profile
만물에 관심이 많은 잡학지식사전이자, 새로운 도전을 꿈꾸는 주니어 개발자 / 잡학지식에서 벗어나서 전문성을 가진 엔지니어로 거듭나자!

0개의 댓글