무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
익명함수의 용도
안녕하세요 제로초님 아래처럼 함수표현식으로 만든 익명 함수는 여러번 호출해서 사용 가능한데 말씀하신 한 번만 쓸 떄 사용하는 익명함수라는건 어느 때를 말씀하시는건지 궁금합니다 const test = function () { console.log(123); } test(); test(); test(); 질문하면서 곰곰이 생각을 해봤는데 혹시 addEventListener의 리스너 함수로 쓰거나 즉시실행함수로 사용될 때가 익명함수가 주로 활용되는 경우인가요?
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
setTimeout 관련 질문
아래 사진처럼 6개의 공의 값이 출력이 안되는데 도무지 이유를 모르겠습니다 ㅠ for (i = 0; 7 > i; i++) { if (i === 6) { console.log(bonus) setTimeout(() => { const $ball = document.createElement('div'); $ball.className = 'ball'; $ball.textContent = bonus; $bonus.appendChild($ball); }, (i + 1) * 1000); } else { console.log(winBalls[i]) setTimeout(() => { const $ball = document.createElement('div'); $ball.className = 'ball'; $ball.textContent = winBalls[i]; $result.appendChild($ball); }, (i + 1) * 1000); } }
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
let으로 구조분해할당을 했을 때 궁금한 점이 생겼습니다!
else if (input === '3') { // 도망 let { monster } = this; monster = null; this.updateMonsterStat(); this.changeScreen('game'); this.showMessage(`무사히 ${this.monster.name}에게서 도망쳤습니다!`); } 위와 같은 코드에서 this.updateMonsterStat()을 하면 텍스트를 지워주지 않는 것인지 궁금합니다! 배틀 부분에서 도망을 구현하고 있었습니다. 근데 습관적으로 구조분해할당을 const로 하고 monster를 null로 바꾸려고 하니 오류가 발생했습니다. 그래서 아무 생각 없이 let으로 구조분해할당을 했습니다. 그런데 여기서 monster = null을 한뒤 this.updateMonsterStat()을 했을 때 당연히 맨 아래 몬스터에 관련된 텍스트가 지워질 줄 알았는데, 지워지지 않았습니다. 그래서 monster.hp -= 10을 해봤더니 이거는 또 동작을 해서 혼란스럽습니다... 이 부분은 어떠한 문제가 있는 건가요??
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
숫자야구 할 때 썻던 방식을 로또 추첨에 응용해보려고 하는데 처음부터 막혀버렸습니다 ㅠㅠ
<form id="form"> <input type="number"> <input type="number"> <input type="number"> <input type="number"> <input type="number"> <input type="number"> <input type="number"> <button>추첨</button> </form> $form.addEventListener('Submit', (event) => { event.preventDefault(); }); 이런 식으로 해서 번호 7개 받은 뒤 로또 추첨이 시작되도록 하려고 하는데 preventDefault가 먹히지 않네요;; 오류를 보려고 해도 순식간에 새로고침 돼서 감이 안잡힙니다 ㅠㅠ 어떻게 하면 새로고침을 막을 수 있을까요??
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
자바스크립트는 이 강의만 보면 되나요?
자바스크립트는 이 강의만 보면 되나요? this, dom, class등의 내용도 포함돼있나요?
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
백틱관련
const message = document.createTextNode("Lose! The Answer is ${answer.join('')}"); $logs.append(`${value}: ${strike} 스타라이크 ${ball} 볼`, document.createElement('br')); 메서드 안의 작은 따옴표의 중복으로 문제가 될 줄 알고 큰 따옴표를 써봤는데Lose! The Answer is ${answer.join('')} ${value}: ${strike} 스타라이크 ${ball} 볼 이렇게 나옵니다.항상 백틱으로 써야하는 것인가요?
- 해결됨[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
let과 var에 관해 질문있습니다
안녕하세요. 제로초님 다름이 아니라, 스코프에 관한 문제를 하나 풀다가 너무 이해가 안 되서 질문 드립니다. - 문제 : 콘솔창에 1초에 한번씩 1부터 5까지의 정수를 출력해주고 싶습니다. for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, i*1000 ); } 논리적으로 완벽한 for 반복문입니다. 그런데 반복문으로 축약하자마자 제대로 작동하지 않습니다. 계속 5라는 숫자가 1초마다 출력되네요. Q. 위 코드는 왜 의도대로 동작하지 않는 것이죠? 해결할 방법은 무엇일까요? 개발자 툴에서 돌려보니, for문이 다 실행되고 나서 setTimeout 함수가 실행이 되는데, 이때 i 값은 5 이기 때문에 5초에 동시에 5가 찍힌다는 것은 알겠습니다. 그런데, 제가 이해가 안 되는 부분은 바로 "정답"입니다. 정답은 var 로 선언된 for문 속의 i 값을 let으로 바꿔주는 건데요... for문 안에 var를 안 쓰고, let을 쓰더라도 for문이 다 돌고나서( 1초 전에 ), setTimeout이 작동하기 때문에 5 -> 5 -> 5 -> 5 -> 5 이렇게 뜨거나, for문은 종료가 됐기 때문에, i 변수가 사라져서, 차리라 undefined 로 5번 뜨는 게 더 말이 되는 것같은데..... 어떻게 1, 2, 3, 4 ,5 로 뜨는지 모르겠습니다. 왜 Let 으로 바꿨을 뿐인데, 1, 2, 3, 4 ,5 가 뜨나요?? - 현재까지 제가 생각할 수 있는 최대한도는 반복문이 끝나도, setTimeout 함수가 let i 변수가 살아있는 블록 스코프 안에 존재하기 때문에, setTimeout 함수 i 값을 찾으려 할 때, 해당 i 값은 살아 있겠다. 고 생각하는데요. 정말로 이해가 안되는 건, setTimeout 함수가 i 값을 찾으려 하는 순간에는 for 문은 끝나있고, 그럼 i는 무조건 5이기 때문에, var 나 Let 이나 출력값은 5 -> 5 -> 5 -> 5 -> 5 되야 맞지 않나?? 라는 겁니다. 그런데, 1 -> 2 -> 3 -> 4 -> 5 가 출력되버리니... 너무 혼란스럽니다 ㅠ.ㅠ
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
4강 if문 중첩 줄이기 질문입니다
응용으로 쿵쿵따의 중첩 if문을 줄여봤는데 else가 없는데도 중첩 if문인 경우는 어떻게 해야 하나요? 일단 이해한대로 줄여보긴 했는데 잘못된 방법으로 줄인 건지, 정석으로 줄인 건지 궁금합니다! 쿵쿵따 셀프체크랑은 좀 다른 코드입니다! const number = parseInt(prompt('몇 명이 참가하나요?'), 10); if (!number) { alert('몇 명이 참가하는지 입력해주세요!'); } if (number) { const $input = document.querySelector('input'); const $button = document.querySelector('button'); const $word = document.querySelector('#word'); const $order = document.querySelector('#order'); let word; let newWord; const onClickButton = () => { if (!word) { word = newWord; const order = parseInt($order.textContent); if (!(2 === word.length || 3 === word.length)) { alert('두 글자, 세 글자로 이루어진 단어로만 입력해주세요!'); word = null; $input.value = ''; $input.focus(); return; } if (2 === word.length || 3 === word.length) { $word.textContent = word; if (!(order === number)) { $order.textContent = order + 1; $input.value = ''; $input.focus(); return; } if (order === number) { $order.textContent = 1; $input.value = ''; $input.focus(); } } return; } if (!(word[word.length - 1] === newWord[0] && word.length === newWord.length)) { alert('틀렸습니다!'); $input.value = ''; $input.focus(); return; } if (word[word.length - 1] === newWord[0] && word.length === newWord.length) { word = newWord; $word.textContent = word; const order = parseInt($order.textContent); if (!(order === number)) { $order.textContent = order + 1; $input.value = ''; $input.focus(); return; } if (order === number) { $order.textContent = 1; $input.value = ''; $input.focus(); } } } 아래는 원본 코드입니다! const number = parseInt(prompt('몇 명이 참가하나요?'), 10); if (number) { const $input = document.querySelector('input'); const $button = document.querySelector('button'); const $word = document.querySelector('#word'); const $order = document.querySelector('#order'); let word; let newWord; const onClickButton = () => { if (!word) { word = newWord; const order = parseInt($order.textContent); if (2 === word.length || 3 === word.length) { $word.textContent = word; if (order === number) { $order.textContent = 1; } else { $order.textContent = order + 1; } } else { alert('두 글자, 세 글자로 이루어진 단어로만 입력해주세요!'); word = null; } } else if (word[word.length - 1] === newWord[0] && word.length === newWord.length) { word = newWord; $word.textContent = word; const order = parseInt($order.textContent); if (order === number) { $order.textContent = 1; } else { $order.textContent = order + 1; } } else { alert('틀렸습니다!'); } $input.value = ''; $input.focus(); } const onInput = (event) => { newWord = event.target.value; } $button.addEventListener('click', onClickButton); $input.addEventListener('input', onInput); } else { alert('몇 명이 참가하는지 입력해주세요!'); }
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
점수 표기 누적 질문있습니다.
let message; // 2, -1은 승리조건이고, -2, 1은 패배조건, 점수표 참고 if ([2, -1].includes(diff)) { me += 1; message = '승리'; } else if ([-2, 1].includes(diff)) { computer += 1; message = '패배'; } else { message = '무승부'; } if (me >= 3){ // 3번 먼저 이기면 나의 승리 $score.textContent = `나의 승리 ${me}:${computer}`; } else if (computer >= 3){ // 3번 먼저 이기면 컴퓨터의 승리 $score.textContent = `컴퓨터의 승리 ${me}:${computer}`; } else { $score.append(`${me}:${computer}`, document.createElement('br')) setTimeout(() => { clickable = true; intervalId = setInterval(changeComputerHand, 50); }, 1000); } } }; 점수 표기 누적을 해보고 싶어서 else에 $score.append(`${me}:${computer}`, document.createElement('br')) 값을 추가해보았는데요, 이렇게 적용하면 1:0이 아닌 01:0 으로 시작합니다. 이유가 무엇일까요? 그리고 message = '승리';message = '패배';message = '무승부'; 값이 적용되지 않습니다. 승리, 패배, 무승부 값도 적용하고, 점수 표기도 누적으로 나오게 하려면 어느 부분을 수정해야할까요?
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
1아웃,2아웃,3아웃 질문입니다. 그리고 색 입히기
if (strike === 0 && ball === 0) { out++; $logs.append(`${value}:${out+0}아웃`, document.createElement('br')) } 이렇게 코드를 작성해보았는데, 1아웃, 2아웃, 3아웃으로 정상 작동합니다. 여기서 {out+1}로 하면 2아웃 부터 작동하는데요, 이 원인은 const numbers = []; // [1, 2, 3, 4, 5, 6, 7, 8, 9] for (let n = 0; n < 9; n += 1) { numbers.push(n + 1); } 의 numbers.push(n + 1); 때문인건가요? ------------------------------------------------------- 글자 색 입히기 if (strike === 0 && ball === 0) { out++; let outTxt = document.createElement('span'); outTxt.style = 'color: red'; outTxt.innerHTML = `${out+0}`+"아웃"; $logs.append(`${value}:`, outTxt, document.createElement('br')) } else { let strikeTxt = document.createElement('span'); strikeTxt.style = 'color: blue'; strikeTxt.innerHTML = `${strike}`+"스트라이크"; let ballTxt = document.createElement('span'); ballTxt.style = 'color: green'; ballTxt.innerHTML = `${ball}`+"볼"; $logs.append(`${value}:`, strikeTxt, ballTxt, document.createElement('br')); } if (out === 3) { defeated (); return; } 아웃은 빨간색, 스트라이크는 파란색, 볼은 녹색으로 지정해 봤는데요, 맞는 방법일까요? 구동할 때는 오류 없이 잘 진행됐습니다.
- 해결됨[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
기능 구현을 위한 최적의 event를 찾는 법이 궁금합니다.
안녕하세요~ 제로초님 다름이 아니라, DOM에서 event를 선택하는 문제에 관해 질문이 있어서 글을 남기게 됐습니다. click이나 scroll, submit 같이 명확한 이벤트가 아니라면, 특정한 기능을 구현하기 위해 어떤 이벤트를 사용하는게 좋은지 모를 때가 많은데요. 예를 들어, input 태그의 input 이벤트를 사용하면, 유저가 타입하는 값의 변화를 매번 감지할 수 있는데, input 이벤트의 존재를 몰라서, keypress, keyup, keydown 이벤트를 사용해서 꾸역꾸역 그 기능을 구현한 경험이 있습니다. 그러다가 input 이벤트로 너무나 쉽게 원하는 기능이 구현되는 걸 보고 많이 허탈했는데요... 이 일을 계기로 궁금점이 하나 생겼습니다. ------------------------- Q. 어떤 기능들은 여러 이벤트들을 조합해야만 구현할 수 있고, 어떤 기능은 특정 이벤트 하나만으로 모든 문제를 해결할 수있다보니 특정 기능을 구현할 때, 거기에 알맞는 최적의 이벤트를 알아내는 방법이 궁금합니다. 제가 모든 이벤트들을 잘 알고 있다면, 이런 고민을 할 필요가 없겠지만, 이벤트의 종류도 많고, 제가 존재하는 지도 몰랐던 이벤트가 알고보니, 그 이벤트를 사용하면, 일이 너무나 쉽게 해결되는 경우가 있다보니... 제로초님은 이 문제를 어떻게 접근하시는지 궁금합니다. 혼자 어떻게든, 제 고민에 대한 해답을 찾아보려고 했는데, 잘 나오지 않아서, 제로초님께 좋은 가르침 부탁드립니다. 감사합니다.
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
질문입니다.
for (let i = 0; i < 5; i--) { console.log('*'.repeat(i+5)); } 코드를 이렇게 작성하니 *************** Uncaught RangeError: Invalid count valueat String.repeat (<anonymous>)at <anonymous>:3:21 에러가 나옵니다. 제가 작성한 코드를 에러가 안 나오는 방법으로 코드를 작성하려면 어디를 수정해야 할지 모르겠습니다. 제로초님께서 작성하신 for (let i = 0; i < 5; i++) { console.log('*'.repeat(5-i)); } 이 코드로 꼭 진행하여야 에러가 안나는 퀴즈였을까요?
- 해결됨[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
script 태그 짚어넣는 위치에 관해 질문있습니다.
안녕하세요~ 제로초님 다름이 아니라, HTML 파일에서 script 태그를 어디다 넣는게 가장 좋은지에 관해 질문있습니다. 어디서는 " 모든 script 태그를 body 태그 안에 짚어넣은 게 좋다 "고 하고. 그 근거로 " 컴퓨터가 .html파일을 로드할 때 위에 있는 코드부터 먼저 읽습니다. 일반 html 먼저 읽게하면 그거부터 화면에 보여줄 수 있습니다. 거의 모든 자바스크립트는 html보다 덜 중요하니 body 끝나기 전에 적으면 됩니다. " => 이런 식으로 설명을 하구요. 또 다른 블로그에서는 cdn으로 작동하는 script 태그는 body 안에 넣고 App.js 같이 다른 파일로 링크가 걸리는 script 태그(<script src="App.js"></script>)는 body 태그 밖으로 빼고 태그 안에 defer 라는 키워드를 넣어주는 게 맞다고 하고요;;; 자료를 찾아볼 때마다, 통일된 의견이 없어서 좀 혼란스럽습니다. Q. HTML 파일에서 script 태그들을 어디에다가 위치시키는 게 가장 좋은 가요?? Ex) cdn 라이브러리는 body 태그 위 App.js 같이 다른 파일로 링크가 걸리는 script 태그(<script src="App.js"></script>)는 body 태그 밖으로 빼는 것 맞다는 등등
- 해결됨[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
setTimeout 에 관하여 질문있습니다.
setTimeout하고 setInterval을 좀 더 잘 이해하기 위해서 간단한 출력물을 만들어봤는데요. "5초 이내 구매시 사은품 증정" 이라는 문구가 4 , 3, 2, 1 로 바뀌고 5초가 지나면, 문구 자체가 사라지는 구조입니다. Q1. timer라는 변수에 담아줬을 뿐인데, 왜 변수 안에 담겨진 setInterval()이 즉시 실행되는 건가요? 다시 말해서, timer();를 안 했는데도 실행되는 이유가 궁금합니다. 이 상황 너무 혼란스러워요;;; Q2. setTimeout()을 5초로 맞춰놓으면, 마지막 "1초"가 출력이 안 되고 바로 display: none;이 발생하는데요. 아마도, setInterval()이 1초 늦게 실행되서 그러는 것같습니다. 왜 setInterval()이 setTimeout()보다 1초 늦게 실행되는 걸까요?? - 해당 코드를 바로 실행해볼 수 있게 Codepen 링크도 올리겠습니다. https://codepen.io/uscgil0127/pen/GRQQMzB - 질문 코드 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> body { margin: 0; padding: 0; } </style> </head> <body> <div class="alert alert-danger"> <span> 5초 이내 구매시 사은품 증정 </span> </div> </body> <script> const sp = document.querySelector("span"); let count = 5; let timer = 0; document.addEventListener("DOMContentLoaded", function () { // Q1. timer 라는 변수에 할당만 해줬을 뿐인데, 왜 함수가 즉시 실행되는지 이해가 안 됩니다. timer = setInterval(thisThisOne, 1000); // Q2. setTimeout 5초로 맞춰놓으면, "1초"가 안 보이고 바로 display: none;이 되버리네요. setTimeout(tryThis, 6000); }); function tryThis() { sp.style.display = "none"; } function thisThisOne() { if (count === 0) { clearInterval(timer); } sp.textContent = `${count}초 이내 구매시 사은품 증정`; count--; } // testTimer 역시 변수에 담겼을 뿐인데, 실행이 된다. 혼란스럽군요... let testTimer = 0; testTimer = setInterval(function () { console.log('이거 실행 됩니다.') }, 1000); </script> </html>
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
textContent 에러
선생님 안녕하세요. 코드를 따라서 쳐보고 돌려봤는데 Uncaught TypeError TypeError: Cannot set properties of null (setting 'textContent') at onClickButton (c:\FrontEnd\HTML\JSProject1.html:25:25) 라는 에러가 발생했습니다. 여러 해결법을 찾아보다가 선생님 전자책에 나와있는 코드를 그대로 복붙했는데도 같은 에러가 발생합니다. 도대체 뭐가 문제인지 모르겠네요ㅜㅜ
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
버블링 이해가 잘안가는데요..
버블링이 자식에서 부모로 전달되고 캡처링이 부모에서 자식으로 이벤트가 전달된다고 이해했는데요 table에 이벤트를 걸어서 td를 클릭했을때 td가 이벤트 타겟이 되면 캡처링 아닌가영?..ㅠㅠㅠ table이 부모고 td가 자식인데 왜 버블링이 되는거죠..?ㅠㅠㅠ
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
인수와 인자
안녕하세요 함수 용어 관련해서 헷갈리는게 있어서요 parameter = 매개변수 argument = 인수 = 인자 이렇게 정리하면 되는걸까요? 검색해보면 죄다 다르게 설명하고 있어서 헷갈리더라구요
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
addEventListener 이전 예제와 비교
이전 쿵쿵따나 끝말잇기에서 $button.addEventListener('click', onClickButton); 도 리턴값이 없어 undefined 를 반환하는데 왜 버튼을 누르면 실행이 되는지 궁금합니다. $document.queyrSelector(#num-0).addEventListener('click', onClickNumber('0')); 여기서는 매개변수를 썼기 때문에 함수 자체를 쓴 게 아니라 함수 반환값을 쓴 것인가요?? 이전 쿵쿵따, 끝말잇기 addEventListener 코드와 이번 코드의 다른 점이 무엇인지 궁금합니다..ㅠㅠ 만약 위처럼 이해한 게 맞다면, 자바스크립트에서는 함수에 매개변수가 있어야 할 경우 모두 함수를 반환하는 고차함수로 작성해야 하나요??
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
얕은 복사 깊은 복사 설명이 이상한 거 같습니다.
얕은 복사가 참조 주소 값을 복사하는 거고 깊은 복사가 실제 값을 복사하는 거라고 알고 있습니다. 그렇다면 얕은 복사는 객체가 복사되었을 때 원본이나 사본 중 하나만 바뀌더라도 바라보고 있는 주소가 같기 때문에 값이 같이 바뀌게 되고 깊은 복사가 바뀌지 않는다라고 표현하는게 맞다고 생각하는데 전체적인 설명이 잘못되지 않았나 합니다. 확인 부탁드립니다. [제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다.
- 미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
순서도 질문드립니다.
안녕하세요! 강의 잘 보고 있습니다! 강의를 보다가 순서도에 대한 궁금증이 생겨 질문드립니다. 강의를 멈추고 순서도 작성을 해보는데 항상 선생님이 하시는 것과 조금씩 다릅니다. 예를 들어 아래와 같이 작성을 했는데 이렇게 작성하는 것도 맞는 방법인가요? 제가 작성한 게 맞는 건지 궁금합니다!