본문 바로가기

Web 프로그래밍/Javascript59

[Javascript] 팩토리 패턴 팩토리 패턴의 가장 큰 목적은 비슷한 객체를 반복수행할 수 있도록 생성하는 것이다. 또한 팩토리 패턴의 사용자가 구체적인 타입을 모르고도 객체를 생성할 수 있게 해준다. 팩토리 패턴은 만들어진 객체들을 생성하기 때문에 동일한 부모 객체를 상속한다. 예제를 보자 위의 예제는 팩토리 패턴을 구현한 예제 이다. 요구도는 타입의 객체를 생성하는 생성자 함수를 찾아내기만 하면 된다. 2016. 6. 7.
[Javascript] 싱글톤 패턴 디자인 패턴은 꽤 오랫동안 쓰여왔고, 다양한 상황에서 유용하다는 것이 입증되었다. 디자인패턴은 친숙해지는 것이 좋다. 우선 디자인패턴의 가장 기본적으로 되는 싱글톤 패턴에 대해 알아보자. 1. 싱글톤패턴 싱글톤 패턴은 특정 클래스의 인스턴스를 오직 한 개만 가지고 있는 것이다. 즉 동일한 클래스에서 객체를 생성하면, 두 번째 생성부터는 처음 만들어진 객체를 얻게 되는 것. 자바스크립트에서는 클래스가 없어서 엄밀히 말하면 싱글톤이라는 말은 이치에 맞지 않지만 몇가지 방법을 사용하여 싱글톤을 구현할 수 가 있다. 1) new 생성자 사용하기 가장 간단하지만 인스턴스 생성을 위해 전역변수를 사용한다. 좋은 방법은 아니다. 2) 스태틱 프로퍼티에 인스턴스 저장 3) 클로저에 인스턴스 저장 2016. 6. 7.
[Javascript] 클래스 방식의 상속패턴 #5 - 임시 생성자 마지막으로 알아볼 패턴은 프로토타입 체인의 이점은 유지하면서, 동일한 프로토타입을 공유 할 때의 문제를 해결한다. 다음의 소스코드를 보자 F라는 임시의 생성자를 만들어서 구현이 된 예제 소스이다. 하지만 이 방식은 프로토타입을 연결 하였기 때문에 부모의 this 프로퍼티는 상속 받지 못한다. 마지막으로 부모의 this프로퍼티까지 완전히 상속받기 위해서는 다음과 같이 작성하는 것이 최적의 방안이다. 위와 같은 방식은 상위 클래스의 저장을 하며 생성자 포인터를 재설정 한 것이다. 상위 클래스에 저장을 한 프로퍼티는 uber이고 포인터 재설정을 한곳은 constructor 이다. 자바스크립트에서 클래스방식의 상속패턴을 5가지 알아보았다. 상속패턴 첫 번째에서 말했던 것만 기억하자. 위와 같은 패턴을 사용하는 .. 2016. 6. 7.
[Javascript] 클래스 방식의 상속패턴 #4 - 프로토타입 공유 앞서 살펴본 3번째의 클래스방식의 상속패턴은 부모 생성자를 두 번호출하여 쓸떼없는 메모리를 사용한다.이번에 살펴볼 패턴은 부모생성자를 한 번도 호출 하지 않는다. 원칙적으로 재사용할 멤버는 this가 아니라 prototype에 추가 되어야 한다. 따라서 상속되어야 하는 모든 것들도 프로토타입에 존재하면 된다. 코드는 간단하다.기본패턴에서 약간만 변형이 된 코드다.부모의 프로토타입을 자식의 프로토타입으로 지정해 주면 된다 프로퍼티와 프로토타입 모두 상속이 된 것을 확인 할 수 있다. 그림으로 확인해보자 하지만 여기에도 단점은 있기 마련이다.프로토타입을 공유한다는 것은 C언어로 비유하자면 포인터를, 리눅스로 비유하자면 하드링크 가리킨다고 생각하면 이해가 쉬울 듯하다.공유된 다른 객체에서 수정을 할 경우 모든.. 2016. 6. 7.
[Javascript] 클래스 방식의 상속패턴 #3 - 생성자 빌려쓰고 프로토타입 지정해주기 앞서 본 2가지의 패턴은기본패턴은 프로토타입은 상속받지만 this 전역의 프로퍼티를 상속받지 못했고생성자빌려쓰기는 this 전역을 상속받지만 프로토타입을 상속받지 못하였다 정상적으로 상속이 된 것을 확인할 수 있다. 다만 부모 생성자를 비효율적으로 두 번 호출하는 단점이 있으므로 좋은 코드는 아니다. 2016. 6. 7.
[Javascript] 클래스 방식의 상속패턴 #2 - 생성자 빌려쓰기 생성자 빌려쓰기는 자식에서 부모로 인자를 전달하지 못했던 패턴#1의 대응책이다.이 패턴은 부모가 생성자 함수의 this에 자식 객체를 바인딩한 다음, 자식생성자가 받은 인자들을 모두 넘겨준다 ※ 생성자 빌려쓰기 패턴은 부모 생성자 함수 내부의 this에 추가된 프로퍼티만 물려받고 prototype에 추가된 멤버는 상속되지 않는다 예제를 보면 쉽게 알 수 있다. arguments의 타입을 찍은 것은 apply 메소드는 (this, 배열로 된 것) 만 인자로 넘겨 줄 수 있다child 객체는 parent로 부터 this로 선언된 name은 받아왔지만 prototype으로 선언된 say() 함수는 받지 못한다. 여기서의 상속은 부모가 가진 자신만의 프로퍼티를 자식의 프로퍼티로 복사해주는 일회성 동작이고, __.. 2016. 6. 6.