CS
프록시 패턴 대상 객체(Subject)에 접근하기 전 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴 Subject : Proxy와 RealSubject를 하나로 묶는 인터페이스(다형성) 대상 객체와 프록시 역할을 동일하게 하는 추상 메서드 action() 정의 RealSubject : 원본 대상 객체 Proxy : 대상 객체(RealSubject)를 중계할 대리자 역할 프록시는 대상 객체를 합성(Composition)한다. 프록시는 대상 객체와 같은 이름의 메서드를 호출하며, 별도의 로직을 수행할 수 있다. (인터페이스 구현 메서드) 프록시는 흐름제어만 할 뿐 결과값을 조작하거나 변경시키면 안된다. Client : Subject 인터페이스를 이용하여 프록시 객체를 생성해..
주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 알려주는 디자인 패턴 주체란? 객체의 상태 변화를 보고 있는 관찰 옵저버들이란? 이 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 "추가 변화 사항"이 생기는 객체들을 의미 옵저버 패턴은 다른 디자인 패턴과 다르게 일대다 (one-to-many) 의존성을 가진다. 옵저버 패턴의 특징 애플리케이션이 한정된 시간, 특정한 케이스에만 다른 객체를 관찰해야하는 경우 대상 객체의 상태가 변경될 때마다 다른 객체의 동작을 트리거해야할 때 한 객체의 상태가 변경되면 다른 객체도 변경해야할 때 MVC 패턴 Model 과 View 의 관계는 옵저버 패턴의 Subject 역할과 Observer 역..
전략 패턴는 정책 패턴(policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 '직접' 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘' 을 컨택스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴 쉽게 말하면 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장 class Crawler { dataScrape(site: string) { if (site === 'naver') { console.log('naver') } else if (site === 'google') { console.log('google') ..
객체를 사용하는 코드에서 객체 생성 부분을 떼어내어 추상화한 팬턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스 에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴 팩토리 메소드 패턴 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 하위 클래스에서 결정 (즉, 클래스 인스턴스 생성은 하위 클래스에게 맡기는 것) 추상 팩토리 패턴 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성 (new 지시자를 사용하여 구상 클래스를 만드는 것) 자바스크립트에서의 팩토리 패턴 const factory1 = new Object(10); const factory2 = new Object('전다훈'); fac..
싱글톤 패턴이란? 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이우에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴 프로그램 내에서 하나의 객체만 존재 프로그램 내에 여러 곳에서 해당 객체를 공유받아 사용해야하는 경우 싱글톤 패턴의 장점 1. 메모리 측면의 이점 싱글톤 패턴을 사용하게 될 경우 한 개의 인스턴스만을 사용하기 때문에 메모리 낭비를 방지할 수 있다. 2. 속도 측면의 이점 생성된 인스턴스를 사용할 때마다 이미 생성된 인스턴스를 활용함으로 속도 측면에 이점이 있다. 3. 데이터 공유가 쉽다. 전역으로 사용하는 인스턴스이기 때문에 다른 여러 클래스에서 데이터를 공유하여 사용할 수 있다. 💡 경험 웹 사이트 크..
문제 설명 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한사항 ) numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다. 입출력 예 ) numbers result [2,1,3,4,1] [2,3,4,5,6,7] [5,0,2,7] [2,5,7,9,12] 작성한 코드 /** * @param numbers * @returns {*[]} */ function solution(numbers) { const arr = []; for(let i = 0; i < numbers.length; i++)..
문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN, MON, TUE, WED, THU,FRI, SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한사항 ) 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 입출력 예 ) a b result 5 24 "TUE" 정답코드 /** * * @param a: Month * @param b: Day * @returns {strin..
문제 설명 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요. 제한사항 ) d는 부서별로 신청..
문제 설명 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한 사항 ) n은 1 이상 100,000,000 이하인 자연수입니다. 입출력 예 ) n result 45 7 125 229 정답 코드 /** * * @param n: 매개변수 * @returns {number} */ function solution(n) { const num = n.toString(3); const result = num.split('').reverse().join(''); return parseInt(result,3); } toString( ) 문법(Syntax) : number.toString(radix);..