πŸ“ 였늘 ν•œ 것

  1. getAttribute() / switch() / :focus / forEach()

  2. carousel κ΅¬ν˜„ μ™„λ£Œ ❗


πŸ“– ν•™μŠ΅ 자료

  1. 사전 ν•™μŠ΅ κ°€μ΄λ“œ STEP 4 (carousel)

πŸ“š 배운 것

DOM


1. carousel(μΊλŸ¬μ…€)

  • κ·Έμ €κ»˜ 사전 ν•™μŠ΅ κ°€μ΄λ“œμ˜ ꢌ고 사항을 λ’€λŠ¦κ²Œ λ°œκ²¬ν•˜κ³  λ‚˜μ„œ μ§„μ§œ 제일 μ²˜μŒμ— μž‘μ„±ν–ˆλ˜ 것 쀑에 이런 게 μžˆμ—ˆλŠ”λ° λ‹Ήμ‹œμ— 싀행이 μ „ν˜€ μ•ˆ 됐음
<div class="carousel-image-box">
  <img src="/images/image-1.png" class="carousel-image">
</div>
<button type="button" class="carousel-arrow right">
  <i class="fas fa-arrow-circle-right"></i>
</button>
const rightArrow = document.querySelector('.right');

rightArrow.addEventListener('click', function goNext () {
  var presentImage = document.querySelector('.carousel-image');

  if (presentImage.src === '/images/image-1.png') {
    presentImage.src = '/images/image-2.png';
  } else if (presentImage.src === '/images/image-2.png') {
    presentImage.src = '/images/image-3.png';
  } else if (presentImage.src === '/images/image-3.png') {
    presentImage.src = '/images/image-4.png';
  } else if (presentImage.src === '/images/image-4.png') {
    presentImage.src = '/images/image-5.png';
  } else {
    presentImage.src = '/images/image-1.png';
  }
});
  • 근데 였늘 onclick을 κ²€μƒ‰ν•˜λ‹€κ°€ 이 글을 λ°œκ²¬ν•¨
  • μ—¬κΈ°μ„œ '클릭할 λ•Œλ§ˆλ‹€ κ°’ λ³€κ²½' λΆ€λΆ„μ˜ μ½”λ“œκ°€ λ‚΄κ°€ μœ„μ—μ„œ μ“΄ κ±°λž‘ 같은 λ§₯락인 λ“―ν•œλ° 이건 싀행이 잘 되길래 μ—¬κΈ° μ½”λ“œμ˜ ν…μŠ€νŠΈ 값을 이미지 src둜 λ°”κΏ”μ„œ ν…ŒμŠ€νŠΈ ν•΄λ΄€μŒ
  • κ·ΈλŒ€λ‘œ codepenμ—μ„œ ν•΄μ„œ μ™ΈλΆ€ 이미지 링크λ₯Ό μ‚¬μš©ν•¨
<img src="https://cdn.pixabay.com/photo/2021/09/07/11/53/car-6603726_960_720.jpg" class="carousel-image">
<button type="button" onclick="goNext()">λ²„νŠΌ</button>
function goNext () {
  var presentImage = document.querySelector('.carousel-image');

  if (presentImage.src === 'https://cdn.pixabay.com/photo/2021/09/07/11/53/car-6603726_960_720.jpg') {
    presentImage.src = 'https://cdn.pixabay.com/photo/2014/09/03/20/15/shoes-434918_960_720.jpg';
  } else if (presentImage.src === 'https://cdn.pixabay.com/photo/2014/09/03/20/15/shoes-434918_960_720.jpg') {
    presentImage.src = 'https://cdn.pixabay.com/photo/2014/05/21/14/54/feet-349687_960_720.jpg';
  } else if (presentImage.src === 'https://cdn.pixabay.com/photo/2014/05/21/14/54/feet-349687_960_720.jpg') {
    presentImage.src = 'https://cdn.pixabay.com/photo/2014/07/10/10/19/steps-388914_960_720.jpg';
  } else if (presentImage.src === 'https://cdn.pixabay.com/photo/2014/07/10/10/19/steps-388914_960_720.jpg') {
    presentImage.src = 'https://cdn.pixabay.com/photo/2015/03/11/21/50/shutters-669296_960_720.jpg';
  } else {
    presentImage.src = 'https://cdn.pixabay.com/photo/2021/09/07/11/53/car-6603726_960_720.jpg';
  }
}
  • κ²°κ³ΌλŠ” μ™„μ „ 잘됨......(사싀 이것도 μ²˜μŒμ—” μ•ˆλμŒ. 개발자 λ„κ΅¬μ˜ issues 탭에 였λ₯˜κ°€ λœ¨λ©΄μ„œ μž‘λ™μ΄ μ•ˆ 되길래 μ—­μ‹œ μ•ˆ λ˜λŠ” 건가 ν–ˆλŠ”λ° κ²€μƒ‰ν•΄μ„œ Back-forward cache ꡬ글 섀정을 λ°”κΏ”μ£Όλ‹ˆκΉŒ 됐닀)
  • μ•„λ‹ˆ λ‘˜ λ‹€ λ˜‘κ°™μ΄ 이미지고 λ˜‘κ°™μ΄ λ²„νŠΌμ΄κ³  src λΆ€λΆ„ ν•˜λ‚˜λ§Œ λ‹€λ₯Έλ° λ‚΄ 건 μ™œ μ•ˆ λ˜λŠ” 걸까. src의 값이 μ›Ή μ„œλ²„ μ£Όμ†Œλƒ μ•„λ‹ˆλƒμ˜ 차이인데.
  • console.log(presentImage.src)λ₯Ό μ‹€ν–‰μ‹œν‚€λ©΄ http: //127.0.0.1:5500/images/image-1.png 라고 λœ¬λ‹€. 즉, src의 값이 κ·Έλƒ₯ /images/image-1.pngκ°€ μ•„λ‹ˆλΌλŠ” 뜻.
  • 이걸둜 λ°”κΏ” μ¨μ£Όλ‹ˆκΉŒ carousel이 μž‘λ™μ„ ν•˜κΈ΄ ν•˜λŠ”λ° μ΄λ ‡κ²Œ μ“°λ©΄ λ‚΄ μ»΄ν“¨ν„°μ—μ„œλ§Œ λ³Ό 수 μžˆμ–΄μ„œ μ˜λ―Έκ°€ μ—†λ‹€
function goNext () {
  var presentImage = document.querySelector('.carousel-image');

  if (presentImage.src === 'http://127.0.0.1:5500/images/image-1.png') {
    presentImage.src = 'http://127.0.0.1:5500/images/image-2.png';
  } else if (presentImage.src === 'http://127.0.0.1:5500/images/image-2.png') {
    presentImage.src = 'http://127.0.0.1:5500/images/image-3.png';
  } else if (presentImage.src === 'http://127.0.0.1:5500/images/image-3.png') {
    presentImage.src = 'http://127.0.0.1:5500/images/image-4.png';
  } else if (presentImage.src === 'http://127.0.0.1:5500/images/image-4.png') {
    presentImage.src = 'http://127.0.0.1:5500/images/image-5.png';
  } else {
    presentImage.src = 'http://127.0.0.1:5500/images/image-1.png';
  }
}
  • ν•΄λ‹΅μ˜ ν‚€μ›Œλ“œλŠ” getAttribute()μ˜€λ‹€ ❗❗❗ x 10000
<!-- HTML μ½”λ“œ μˆ˜μ • -->
<div class="carousel-image-box">
  <img src="/images/image-1.png" class="carousel-image">
</div>
<button type="button" class="carousel-arrow right">
  <i class="fas fa-arrow-circle-right"></i>
</button>
// 우츑 λ²„νŠΌ 클릭 μ‹œ πŸ’‘ λ‹€μŒ 이미지 보여주기
const rightArrow = document.querySelector('.right');

rightArrow.addEventListener('click', function goNext () {
  var presentImage = document.querySelector('.carousel-image');

  if (presentImage.getAttribute('src') === '/images/image-1.png') {
    presentImage.src = '/images/image-2.png';
  } else if (presentImage.getAttribute('src') === '/images/image-2.png') {
    presentImage.src = '/images/image-3.png';
  } else if (presentImage.getAttribute('src') === '/images/image-3.png') {
    presentImage.src = '/images/image-4.png';
  } else if (presentImage.getAttribute('src') === '/images/image-4.png') {
    presentImage.src = '/images/image-5.png';
  } else {
    presentImage.src = '/images/image-1.png';
  }
});

// 쒌츑 λ²„νŠΌ 클릭 μ‹œ πŸ’‘ 이전 이미지 보여주기
const leftArrow = document.querySelector('.left');

leftArrow.addEventListener('click', function goBack () {
  var presentImage = document.querySelector('.carousel-image');

  if (presentImage.getAttribute('src') === '/images/image-1.png') {
    presentImage.src = '/images/image-5.png';
  } else if (presentImage.getAttribute('src') === '/images/image-2.png') {
    presentImage.src = '/images/image-1.png';
  } else if (presentImage.getAttribute('src') === '/images/image-3.png') {
    presentImage.src = '/images/image-2.png';
  } else if (presentImage.getAttribute('src') === '/images/image-4.png') {
    presentImage.src = '/images/image-3.png';
  } else {
    presentImage.src = '/images/image-4.png';
  }
});

πŸ”₯ 속성( attribute ) μ°Έκ³ 

  • getAttribute('κ·Έ 값을 μ–»κ³  싢은 속성 이름')
  • setAttiribute('μΆ”κ°€ν•˜κ³  싢은 속성 이름', 'κ·Έ κ°’')
  • hasAttribute('쑴재 μ—¬λΆ€λ₯Ό μ•Œκ³  싢은 속성 이름')
  • removeAttribute('μ œκ±°ν•˜κ³  싢은 속성 이름')
  • κ²°κ΅­ μ΄ˆλ°˜μ— μž‘μ„±ν–ˆλ˜ μ½”λ“œμ—μ„œ srcλ₯Ό getAttribute('src')둜만 λ°”κΎΈλ©΄ λ˜λŠ” κ±°μ˜€λ‹€......
  • 저건 어렡지도 μ•Šκ³ , λ‹¨μˆœν•œ κΈ°λ³Έ if 쑰건문은 λ‚΄κ°€ 이해도 ν•˜κ³  μžˆλŠ” ꡬ문인데 λ©μ²­ν•œ λ‚˜λŠ” μ• κΏŽμ€ 곳만 λŒ€μ²΄ λͺ‡ 바퀴λ₯Ό 돈 걸까.
  • 일단은 κ΅¬ν˜„μ΄ λλ‚œ 게 μ•„λ‹ˆλ‹ˆ μ“Έλ°μ—†λŠ” 사담은 혼자 삭이고, λ‹€μŒ λ‹¨κ³„λ‘œ λ„˜μ–΄κ°
  • 남은 μš”κ΅¬ 사항은 이미지 ν•˜λ‹¨μ˜ Dotλ₯Ό λˆ„λ₯Ό 경우, ν•΄λ‹Ή 순번의 이미지 보여주기
<!-- HTML μˆ˜μ • -->
<div class="carousel-dots">
  <button class="carousel-dot">●</button>
  <button class="carousel-dot">●</button>
  <button class="carousel-dot">●</button>
  <button class="carousel-dot">●</button>
  <button class="carousel-dot">●</button>
</div>
// CSS μˆ˜μ •
.carousel-dot {
  background-color: transparent;
  border-style: none;
  cursor: pointer;
  font-size: 20px;
  line-height: 2.5;
  margin: 0 15px;
  color: grey;
}

.carousel-dot:focus {
  color: black;
  outline: none;
}
// javascript μΆ”κ°€ - ν•˜λ‹¨μ˜ Dot 5개
const btn_1 = document.querySelectorAll('.carousel-dot')[0];
btn_1.addEventListener('click', function showImage () {
  presentImage.src = '/images/image-1.png';
});

const btn_2 = document.querySelectorAll('.carousel-dot')[1];
btn_2.addEventListener('click', function showImage () {
  presentImage.src = '/images/image-2.png';
});

const btn_3 = document.querySelectorAll('.carousel-dot')[2];
btn_3.addEventListener('click', function showImage () {
  presentImage.src = '/images/image-3.png';
});

const btn_4 = document.querySelectorAll('.carousel-dot')[3];
btn_4.addEventListener('click', function showImage () {
  presentImage.src = '/images/image-4.png';
});

const btn_5 = document.querySelectorAll('.carousel-dot')[4];
btn_5.addEventListener('click', function showImage () {
  presentImage.src = '/images/image-5.png';
});
  • λ‹€μ„― 개의 점듀을 λˆ„λ₯΄λ©΄ 각각의 이미지가 λ‚˜μ˜¨λ‹€
  • 그런데 이건 정말 λ„ˆλ¬΄ 쀄여 μ£Όκ³  μ‹Άκ²Œ 생겼닀. μ•„λ§ˆλ„ for ꡬ문을 μ“°λ©΄ 될 κ±° 같은데 μ •ν™•ν•˜κ²Œ 뭘 써야 할지λ₯Ό λͺ¨λ₯΄κ² λ‹€.
  • λΈ”λ‘œκ·Έμ— 정리해놓은 for λ°˜λ³΅λ¬Έλ“€μ„ λ‹€μ‹œ ν•œ 번 μ‚΄νŽ΄λ³Έ ν›„ forEach ꡬ문을 써보기둜 ν–ˆλ‹€
const btns = document.querySelectorAll('.carousel-dot');

btns.forEach(function clickBtn (btn, index) {

  btns[index].addEventListener('click', function showImage () {
    presentImage.src = `/images/image-${index+1}.png`;
  });
});
  • 그런데 이게 웬걸, λœλ‹€λœλ‹€λœλ‹€λœλ‹€λœλ‹€
  • μ–΄λ–€ 검색도 없이 μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”© μƒκ°ν•˜λ©΄μ„œ 적어본 건데 λ§‰νžˆλŠ” 뢀뢄도 없이 μ½”λ“œ μž‘μ„±μ΄ λλ‚œ ν›„ μ‹€ν–‰κΉŒμ§€ 문제 없이 된 건 이 과제λ₯Ό μ‹œμž‘ν•œ 이래둜 이번이 μ²˜μŒμ΄λ‹€. λ„ˆλ¬΄ 신기함 😲
  • κ·Έλ ‡μ§€λ§Œ, 이걸 ν•΄λ‚Έ 것과 λ³„κ°œλ‘œ 이번 과제λ₯Ό ν•˜λ©΄μ„œ λΌˆμ €λ¦¬κ²Œ λŠλ‚€ 건, λ‚˜λŠ” for λ°˜λ³΅λ¬Έμ„ 잘 λͺ¨λ₯Έλ‹€λŠ” κ±°λ‹€. 이 κ²½μš°λŠ” forEach ꡬ문 μ„€λͺ…을 μ‚΄νŽ΄λ³΄λ‹ˆκΉŒ '왠지' μ—¬κΈ° μ μš©ν•˜λ©΄ 될 κ±° κ°™μ•„μ„œ ν•˜λ‚˜μ”© μ λ‹€λ³΄λ‹ˆ 된 κ²½μš°λ‹€. 즉, forEach ꡬ문이 μ΄λž˜μ„œ 될 κ±° κ°™λ‹€κ³  μ½”λ“œλ₯Ό 적기 μ „λΆ€ν„° λͺ…λ£Œν•˜κ²Œ 머릿속에 μ •λ¦¬ν•΄μ„œ 말할 μˆ˜λŠ” μ—†μ—ˆλ‹€. μ—¬λŸ¬λͺ¨λ‘œ 이번 κ³Όμ œλŠ” λ‹€μ‹œ ν•œλ²ˆ μ΄˜μ΄˜ν•˜κ²Œ 곡뢀해야 ν•  ν•„μš”μ„±μ„ μ ˆμ‹€ν•˜κ²Œ λŠλΌλ„λ‘ λ§Œλ“€μ–΄μ€€ κ³Όμ œμ˜€λ‹€.

< HTML >

    <section>
      <div class="title-image-box">
        <img src="/images/vanilla_coding_logo.png" />
      </div>
      <h1>Carousel</h1>

      <!-- Carousel Start -->
      <div class="carousel-outer">
        <div class="carousel-image-and-arrow">
          <button type="button" class="carousel-arrow left">
            <i class="fas fa-arrow-circle-left"></i>
          </button>
          <div class="carousel-image-box">
            <img src="/images/image-1.png" class="carousel-image">
          </div>
          <button type="button" class="carousel-arrow right">
            <i class="fas fa-arrow-circle-right"></i>
          </button>
        </div>
        <div class="carousel-dots">
          <button class="carousel-dot">●</button>
          <button class="carousel-dot">●</button>
          <button class="carousel-dot">●</button>
          <button class="carousel-dot">●</button>
          <button class="carousel-dot">●</button>
        </div>
      </div>
      <!-- Carousel End -->
    </section>

< CSS >

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  width: 100%;
}

body {
  background-image: url("./images/bg.jpeg");
  background-repeat: no-repeat;
  background-size: cover;
  font-family: "Varela Round", sans-serif;
}

section {
  margin: 60px auto;
  max-width: 1000px;
}

.title-image-box {
  text-align: center;
  padding: 0 80px;
}

.title-image-box img {
  width: 100%;
  max-width: 800px;
}

h1 {
  font-family: "Pacifico", cursive;
  text-align: center;
  font-size: 5vw;
}

.carousel-outer {
  display: flex;
  flex-direction: column;
  align-items: center;
  background-color: white;
  margin: 20px auto;
  width: 80%;
}

.carousel-image-and-arrow {
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 0 auto;
  width: 100%;
  margin-top: 50px;
}

.carousel-arrow {
  background-color: transparent;
  border-style: none;
  width: 120px;
}

.fa-arrow-circle-left,
.fa-arrow-circle-right {
  font-size: 30px;
  cursor: pointer;
}

.carousel-image-box {
  width: 70%;
  margin: 0 auto;
}

.carousel-image {
  width: 100%;
  vertical-align: middle;
}

.carousel-dots {
  text-align: center;
}

.carousel-dot {
  background-color: transparent;
  border-style: none;
  cursor: pointer;
  font-size: 20px;
  line-height: 2.5;
  margin: 0 15px;
  color: grey;
}

.carousel-dot:focus {
  color: black;
  outline: none;
}

< JavaScript >

var presentImage = document.querySelector('.carousel-image');

// 우츑 λ²„νŠΌ
const rightArrow = document.querySelector('.right');

rightArrow.addEventListener('click', function goNext () {

  const imageSrc = presentImage.getAttribute('src');

  switch (imageSrc) {
    case '/images/image-1.png':
      presentImage.src = '/images/image-2.png';
      break;
    case '/images/image-2.png':
      presentImage.src = '/images/image-3.png';
      break;
    case '/images/image-3.png':
      presentImage.src = '/images/image-4.png';
      break;
    case '/images/image-4.png':
      presentImage.src = '/images/image-5.png';
      break;
    case '/images/image-5.png':
      presentImage.src = '/images/image-1.png';
      break;
  }
});

// 쒌츑 λ²„νŠΌ
const leftArrow = document.querySelector('.left');

leftArrow.addEventListener('click', function goBack () {

  const imageSrc = presentImage.getAttribute('src');

  switch (imageSrc) {
    case '/images/image-1.png':
      presentImage.src = '/images/image-5.png';
      break;
    case '/images/image-2.png':
      presentImage.src = '/images/image-1.png';
      break;
    case '/images/image-3.png':
      presentImage.src = '/images/image-2.png';
      break;
    case '/images/image-4.png':
      presentImage.src = '/images/image-3.png';
      break;
    case '/images/image-5.png':
      presentImage.src = '/images/image-4.png';
      break;
  }
});

// ν•˜λ‹¨μ˜ Dot 5개 - ex) indexκ°€ 0인 λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œ 화면에 image-1 λ„μš°κΈ°
btns.forEach(function clickBtn (btn, index) {

  btns[index].addEventListener('click', function showImage () {
    presentImage.src = `/images/image-${index+1}.png`;
  });
});

cf. λ”°λ‘œ 적진 μ•Šμ•˜μ§€λ§Œ, 우츑 λ²„νŠΌκ³Ό 쒌츑 λ²„νŠΌ 뢀뢄도 if, else if, else ꡬ문을 switch ꡬ문으둜 λ‹€μ‹œ 적은 건데 μ½”λ“œκ°€ 막 κ·Έλ ‡κ²Œ 쀄어든 κ±° 같진 μ•Šλ‹€. if ꡬ문보닀 λ³΄κΈ°λŠ” νŽΈν•΄μ§„ λ“―ν•˜μ§€λ§Œ, μ•„λ§ˆ 200% 더 쀄일 수 μžˆμ§€ μ•Šμ„κΉŒ.


3. λŠλ‚€ 점

μ΄λ ‡κ²Œ ν•΄μ„œ μž₯μž₯ 꽉찬 3일에 걸친 carousel λ§Œλ“€κΈ°κ°€ 끝이 났닀. μ΄λ²ˆμ—λ„ 였랜 기간에 걸쳐 해결을 ν•˜κΈ΄ ν–ˆμ§€λ§Œ, μ „μ²˜λŸΌ λΏŒλ“―ν•˜κΈ°λ³΄λ‹¨ μ’€ 더 ν˜„μ‹€μ„ μ§μ‹œν•œ λŠλ‚Œμ΄λ‹€. (λ¬Όλ‘  μ²˜μŒμ— λ˜λŠ” κ±° λ³΄λ©΄μ„œ λ¬Όκ°œλ°•μˆ˜ 치긴 ν–ˆμŒ)

μ•žμ—μ„œλ„ λ§ν–ˆμ§€λ§Œ, 이번 과제λ₯Ό ν•΄κ²°ν•˜λŠ” κ³Όμ •μ—μ„œ λ‚΄κ°€ λͺ¨λ₯΄κ³  ν—·κ°ˆλ € ν•˜λŠ” 것듀이 상상 μ΄μƒμœΌλ‘œ λ§Žλ‹€λŠ” κ±Έ μ•Œκ²Œ 됐닀. λ‹Ήμ—°ν•œ μ–˜κΈ°μ§€λ§Œ, μ΄ν•΄ν•œ μ²™ 이둠을 μ •λ¦¬ν•˜λŠ” 것과 μ§„μ§œλ‘œ μ΄ν•΄ν•œ κ±Έ 직접 μ½”λ“œλ‘œ μ¨λ³΄λŠ” 건 μ²œμ§€ 차이인 κ±° κ°™λ‹€.

μ–΄λ””μ„œ λ³Έ 건 μžˆμ–΄μ„œ 이걸 μ“°λ©΄ 될 κ±° 같은데 μ•ˆ λœλ‹€. 눈으둜 보면 λŒ€μΆ© μ•„λŠ” 것 κ°™μ§€λ§Œ, 싀은 λ‚΄ 슀슀둜 λ‚΄κ°€ ν—·κ°ˆλ € ν•˜λŠ” 뢀뢄이 μ–΄λ”˜μ§€λ₯Ό λͺ…ν™•ν•˜κ²Œ ν•œκ΅­μ–΄λ‘œ μ–˜κΈ°ν•˜λŠ” 것뢀터도 μ–΄λ €μš΄ κ±° κ°™λ‹€. 검색을 ν•˜λ©΄μ„œλ„ 직접 정보λ₯Ό μ„ νƒν•˜λŠ” 게 μ•„λ‹ˆλΌ μ΄λŸ°μ €λŸ° 정보에 νœ˜λ‘˜λ¦¬κΈ°λ§Œ ν•˜λŠ” λ‚˜λ₯Ό λ°œκ²¬ν•˜κΈ°λ„ ν–ˆλ‹€.

κ·Έλž˜λ„ λκΉŒμ§€ ν¬κΈ°ν•˜μ§€ μ•Šκ³ , carouselμ΄λž€ 단어λ₯Ό 직접 κ²€μƒ‰ν•˜μ§€ μ•Šκ³  ν•΄λ‚Έ κ²ƒλ§ŒνΌμ€ λΏŒλ“―ν•˜λ‹€. 일정은 쑰금 μ§€μ²΄λμ§€λ§Œ, 쀑간에 ν¬κΈ°ν•˜κ³  λ‹€λ₯Έ μ‚¬λžŒμ˜ 닡을 λ΄€λ‹€λ©΄ μ—­μ‹œ ν›„νšŒν–ˆμ„ κ±° κ°™λ‹€. λ‚˜μ€‘μ— λ‹€μ‹œ 보면 μ—„μ²­λ‚˜κ²Œ νˆ¬λ°•ν•œ λ‹΅μ΄κ² μ§€λ§Œ, μ§€κΈˆμ€ λ‚˜λ¦„ μ• μ •(애증)이 담겨 μžˆλŠ” μƒνƒœλΌ 계속 보게 λ˜λŠ” κ±° κ°™λ‹€.

μ–Έμ œλ‚˜μ™€ 같이 λ‹΅λ‹΅ν–ˆμ§€λ§Œ, ν¬κΈ°ν•˜μ§€ μ•Šμ•„μ„œ 의미 μžˆλŠ” μ‹œκ°„μ΄μ—ˆλ‹€. 뢈과 μ–΄μ œλ§Œ 해도 λ‹€μ‹œ 이둠 곡뢀λ₯Ό ν•˜κ³  μ‹Άλ‹€κ³  ν–ˆμ—ˆλŠ”λ° 과제λ₯Ό ν•΄κ²°ν•˜κ³  λ‚˜λ‹ˆκΉŒ μ—­μ‹œ μ‹€μŠ΅μ΄ 더 μž¬λ°ŒλŠ” κ±° κ°™λ‹€.


4. μ•žμœΌλ‘œμ˜ ν•™μŠ΅ κ³„νš

μ΄λ ‡κ²Œ λ“œλ””μ–΄ STEP 4κΉŒμ§€ 끝이 λ‚˜κ³  STEP 5λ₯Ό λ“€μ–΄κ°ˆ 차둀이닀. 슬쩍 ν›‘μ–΄ 봐도 이번 과제λ₯Ό ν¬ν•¨ν•΄μ„œ λ‚΄κ°€ κ·Έλ™μ•ˆ ν—·κ°ˆλ Έλ˜ 것듀을 닀루고 μžˆλŠ” κ±° κ°™λ‹€. 근데 μ°Έ 인터넷 검색을 톡해 자료λ₯Ό 보면 μ΄ν•΄ν•œ κ±° 같은데 막상 μ μš©ν•˜λ €κ³  ν•˜λ©΄ λ¨Έλ¦¬λž‘ 손이 μ•ˆ 움직인닀. 이번 STEP이 도움이 됐으면 μ’‹κ² λ‹€.

μΆ”κ°€ 이둠 κ°•μ˜λ„ 더 λ“£κ³  싢은데 일단은 사전 ν•™μŠ΅ κ°€μ΄λ“œλ₯Ό λ¨Όμ € 봐야겠닀. 남은 μ‹€μŠ΅μ΄ 3개인데 문제λ₯Ό ν‘ΈλŠ” 데 주어진 기간이 μ΅œλŒ€ 13일이라고 μ ν˜€ μžˆλ‹€. 괜히 λ‹€λ₯Έ κ°•μ˜λ₯Ό λ¨Όμ € λ“€μ—ˆλ‹€κ°€ 이걸 λͺ»ν•˜κ²Œ 되면 λ‚­νŒ¨λ‹ˆκΉŒ 일단은 주어진 것뢀터 ν•  생각이닀.


✨ 내일 ν•  것

  1. 사전 ν•™μŠ΅ κ°€μ΄λ“œ STEP 5
profile
dev log

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보

Powered by GraphCDN, the GraphQL CDN