데이터 프로세싱
자료처리(데이터 프로세싱)란 수학적 방법을 통해
무의미한 데이터를 유의미한 데이터로
정렬되지않은 데이터를 정렬된 데이터로
의사결정을 할 수 없는 데이터를 의사결정이 가능한 데이터로
만드는 과정
자료구조
- Stack - LIFO (Last In Frist Out) : 자료의 역전
- 자료를 넣는 행위를 push, 꺼내는 행위를 pop이라고 칭한다.
- Queue - FOFO (First In Frist Out) 구조
- 자료를 넣는 행위를 push, 꺼내는 행위를 shift라고 칭한다.
-
- linearQ - 순환되지않는 구조
- circleQ - 순환 구조
- buffer(성능100%일때 성능저하를 막는 목적)나 cache(성능이100%일때 성능을 끌어올리는 목적)도 Queue의 형태이다.
- Deck(Deque) - 양방향 구조
Stack 구조 코드화
class Stack {
constructor(id){
this.id = id;
this.array = [];
this.itemLength = 0;
}
pushItem(item){
this.array.push(item);
}
popItem(){
return this.array.pop();
}
countItem(){
this.itemLength = this.array.length;
}
}
const stack1 = new Stack('stack');
stack1.pushItem('a'); //a 넣기
stack1.pushItem('b'); //b 넣기
stack1.pushItem('c'); //c 넣기
stack1.countItem(); //카운트하기
document.write(stack1.itemLength); // 갯수 도출 // 3
document.write(stack1.popItem()); // 꺼내기 // c
document.write(stack1.popItem()); // 꺼내기 // b
document.write(stack1.popItem()); // 꺼내기 // a
stack1.countItem(); //카운트하기
document.write(stack1.itemLength); // 갯수 도출 // 0
예제) Stack 구조로 Palindrom 만들기
class Stack {
constructor(id){
this.id = id;
this.array = [];
}
pushItem(item){
this.array.push(item);
}
popItem(){
return this.array.pop();
}
}
const stack1 = new Stack('stack'); // 'stack'을 constructor에 파라미터 id로
const testString = "ABAB";
let reverseString = '';
for(let i=0; i<testString.length; i++){ //i : 0~3
stack1.pushItem(testString[i]); //testString[i]를 pushItem에 파라미터 item으로
}
//위의 과정으로 this.array에 testString이 배열로 담김
for(let i=0; i<testString.length; i++){
reverseString += stack1.popItem(); //return값을 reverseString에 담음
}
//testString과 역전된 testString을 담은 reverseString의 글자가 같은지 비교
if(testString == reverseString){
document.write("Palindrome");
}else {
document.write("Not Palindrome");
}
class Stack{
constructor(id){
this.id = id;
this.stackStorage = [];
this.count = 0;
}
pushItem(item){
this.stackStorage.push(item);
}
popItem(){
return this.stackStorage.pop();
}
countStorage(){
this.count = this.stackStorage.length;
}
}
class Palindrom {
constructor(id){
this.id = id;
this.inputString = '';
this.reverseString = '';
this.result = null;
}
inputAction(anyString){
this.inputString = anyString;
}
reverseAction(){
const useStack = new Stack("useStack"); //"useStack"은 Stack의 파라미터 id로
for(let i=0; i<this.inputString.length; i++){
useStack.pushItem(this.inputString[i]); //this.inputString[i]는 파라미터 item으로
}
for(let i=0; i<this.inputString.length; i++){
this.reverseString += useStack.popItem(); //popItem()의 return값은 this.reverseString으로
}
}
comparePalindrom(){
if(this.inputString == this.reverseString){ //값 비교
this.result = true;
} else {
this.result = false;
}
}
runPalindrom(anyString){
this.inputAction(anyString);
this.reverseAction();
this.comparePalindrom();
}
}
const myPalin = new Palindrom("myPalin");
myPalin.runPalindrom("ABBA");
document.write(myPalin.result ? "Palindrom" : "Not Palindrom"); //삼항연산자
Queue 구조 코드화
class Queue {
constructor(id){
this.id = id;
this.storage = [];
this.length = 0;
}
pushItem(anyItem){
this.storage.push(anyItem);
}
shiftItem(){
return this.storage.shift(); //내 클래스 밖으로 던지는 행위기때문에 return으로 받는게 낫다.
}
countQueue(){
this.length = this.storage.length;
return this.length; //this.length을 속성값으로 넘겼고 속성값을 return함
}
}
const myQ = new Queue("myQ");
myQ.pushItem('a');
myQ.pushItem('b');
myQ.pushItem('c');
document.write(myQ.storage); //a,b,c
myQ.shiftItem();
document.write(myQ.storage); //b,c
myQ.shiftItem();
document.write(myQ.storage); //c
document.write(myQ.countQueue()); //1
Deck 구조 코드화
class Deck {
constructor(id){
this.id = id;
this.storage = [];
this.length = 0;
}
pushItem(anyItem){
this.storage.push(anyItem);
}
popItem(){
//내 클래스 밖으로 던지는 행위기때문에 return으로 받는게 낫다.
return this.storage.pop();
}
shiftItem(){
return this.storage.shift();
}
unshiftItem(anyItem){
this.storage.unshift(anyItem);
}
countDeck(){
this.length = this.storage.length;
return this.length; //this.length을 속성값으로 넘겼고 속성값을 return함
}
}
const myD = new Deck("myD");
예제) Deck 구조 슬라이드
<style>
*{margin: 0; padding: 0;}
.slider {height: 148.83px; display: flex; align-items: center; justify-content: center; gap: 10px;}
figure {width: 170px; height: 150px; text-align: center;}
button {width: 40px; height: 40px;}
</style>
<body>
<div class="slider">
<button id="prevBtn"><</button>
<div id="imgArea" class="imgArea">
<figure></figure>
</div>
<button id="nextBtn">></button>
</div>
<script>
class Deck {
constructor(id){
this.id = id;
this.storage = [];
this.length = 0;
}
pushItem(anyItem){
this.storage.push(anyItem);
}
popItem(){
//내 클래스 밖으로 던지는 행위기때문에 return으로 받는게 낫다.
return this.storage.pop();
}
shiftItem(){
return this.storage.shift();
}
unshiftItem(anyItem){
this.storage.unshift(anyItem);
}
countDeck(){
this.length = this.storage.length;
return this.length; //this.length을 속성값으로 넘겼고 속성값을 return함
}
}
class slider {
constructor(id){
this.id = id;
this.lastItem = null;
}
prev(){
this.lastItem = myD.popItem();
const outputString = `
<figure>
<img src="${this.lastItem.img}" style="width: 170px;">
<figcaption>${this.lastItem.name}</figcaption>
</figure>`;
document.getElementById("imgArea").innerHTML = outputString;
myD.unshiftItem(this.lastItem);
}
next(){
this.lastItem = myD.shiftItem();
const outputString = `
<figure>
<img src="${this.lastItem.img}" style="width: 170px;">
<figcaption>${this.lastItem.name}</figcaption>
</figure>`
document.getElementById("imgArea").innerHTML = outputString;
myD.pushItem(this.lastItem);
}
}
const imgString1 = "https://url.kr/g5icvg"
const imgString2 = "https://url.kr/7vklif"
zardAlbum = [
{name: "ZARD 1", img: imgString1},
{name: "ZARD 2", img: imgString2},
{name: "ZARD 3", img: imgString1},
{name: "ZARD 4", img: imgString2},
{name: "ZARD 5", img: imgString1},
{name: "ZARD 6", img: imgString2},
{name: "ZARD 7", img: imgString1},
{name: "ZARD 8", img: imgString1},
{name: "ZARD 9", img: imgString2}
]
const mySlider = new slider("mySlider");
const myD = new Deck("myD");
zardAlbum.forEach(function(v){
myD.pushItem(v);
});
document.getElementById('prevBtn').addEventListener(
'click',
function(event){
mySlider.prev();
}
)
document.getElementById('nextBtn').addEventListener(
'click',
function(event){
mySlider.next();
console.log(zardAlbum)
}
);
</script>
</body>
SET
Stack, Queue, Deck은 순서가 보증된 자료구조 형태이다.
Set은 순서가 없는 형태를 말한다.
반응형
'JAVASCRIPT' 카테고리의 다른 글
JAVASCRIPT ) Rest 파라미터 (0) | 2024.07.26 |
---|---|
JAVASCRIPT ) 클로저 Closure (0) | 2024.07.25 |
JAVASCRIPT ) class (0) | 2024.07.22 |
JAVASCRIPT ) 템플릿 리터럴 (0) | 2024.07.19 |
JAVASCRIPT ) 오브젝트 (0) | 2024.07.18 |