๋ฐ์ํ
๐น๏ธ ์ํ ํจํด์ด๋
๊ฐ์ฒด์ ์ํ๋ฅผ ์กฐ๊ฑด๋ฌธ์ผ๋ก ๊ฒ์ฌํด์ ํ์๋ฅผ ๋ฌ๋ฆฌํ๋๊ฒ์ด ์๋
์ํ๋ฅผ ๊ฐ์ฒดํ ํ์ฌ ์ํ๊ฐ ํ๋ํ ์ ์๋๋ก ์์ํ๋ ํจํด.
๊ฐ์ฒด์ ์ํ์ ๋ฐ๋ผ ํ๋์ ๋ณ๊ฒฝ
videoPlayer๋ฅผ ์ํํจํด ๋ง๋ค๊ธฐ
VideoPlayํด๋์ค๋ฅผ ํตํด ์ํ๋ฅผ ์ธ์๋ก ๋ฐ๊ณ , setState๋ฅผ ํตํด ์ํ๋ฅผ ๋ฐ๊พธ๋๋ก ํ๋ค
class VideoPlay {
constructor(state) {
// Object.create๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ฒด๋ก ๋ฐ๊ณ , Object.assign์ ํตํด ๊ฐ์ฒด๋ณต์ฌ๋ฅผ ์งํํ๋ค
this.state = Object.create(Object.assign({ videoplayer: this }, state));
}
setState(state) {
this.state = Object.create(Object.assign({ videoplayer: this }, state));
}
}
const streaming = {
pause() {
return "์คํธ๋ฆฌ๋ฐ ์ค์ง";
},
play() {
return "์คํธ๋ฆฌ๋ฐ ์ฌ์";
},
changeBrand() {
this.videoplayer.setState(brand);
},
};
const brand = {
pause() {
return "๋ธ๋๋ ์ค์ง";
},
play() {
return "don`t use";
},
changeStreaming() {
this.videoplayer.setState(streaming);
},
};
์ํํจํด ์ฌ์ฉ
const videoState = new VideoPlay(streaming);
console.log(videoState.state.play()); // ์คํธ๋ฆฌ๋ฐ ์ฌ์
console.log(videoState.state.pause()); // ์คํธ๋ฆฌ๋ฐ ์ค์ง
videoState.state.changeBrand(); // ๊ฐ์ฒด ์ํ ๋ณ๊ฒฝ
console.log(videoState.state.play()); // don`t use
console.log(videoState.state.pause()); // ๋ธ๋๋ ์ค์ง
videoState.state.changeStreaming(); // ๊ฐ์ฒด ์ํ ๋ณ๊ฒฝ
console.log(videoState.state.play()); // ์คํธ๋ฆฌ๋ฐ ์ฌ์
console.log(videoState.state.pause()); // ์คํธ๋ฆฌ๋ฐ ์ค์ง
์ํํจํด ๋ณ๊ฒฝ ์ฌ์ฉ ํ๊ธฐ
์ํํจํด์ ์ฌ์ฉํ์๋ ํ์คํ If/else๋ฌธ ๋ณด๋ค๋ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ธฐ๋๋ฌธ์,ํ์ฅ์ฑ์ด ์๊ฒผ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๊ธฐ๋ฐ์ผ๋ก ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๋๋ฌธ์, ๋ณ๊ฒฝ์๋ ์ฉ์ดํ๋ค. ๋ค๋ง ๊ทธ ๋งํผ ๊ฐ์ฒด(streaming,brand ๋ฑ)๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ๋ง๋ค์ด์ค์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค.
if/else์ผ๋ก ์์ฑ ํ ์ํ๊ฐ ๊ณ์ ์ถ๊ฐ๊ฐ ๋๋ค๋ฉด ์ฌ์ฉํด๋ณด๋ฉด ๊ด์ฐฎ์ ํจํด์ด๋ค
๋ฐ์ํ
'Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Queue์ผ๋ก ์์ ์คํ (0) | 2025.05.19 |
---|---|
โ๏ธ ์ ๋ต ํจํด (1) | 2024.11.19 |
โ๏ธ ์ปค๋ง (0) | 2024.05.29 |
๐Hls ์ฝํ ์ธ ๋ณ๊ฒฝ ๊ฐ์ (0) | 2023.12.04 |
navigator.mediaSession (1) | 2023.07.27 |
๋๊ธ