본문 바로가기
etc/블록체인 뉴딜일자리사업

자바스크립트 조건문, 객체, 생성자 함수 / 토크노믹스 분석법

by vellahw 2023. 5. 11.

 

💭 서론

교육 7일차

오전부터 티스토리 에디터 오류가 나서 오늘은 노션으로 글을 작성하고 마크다운으로 내려받아봤다. 노션에서 옮겨오니까 형식 다 틀어져서 하나하나 고쳤다ㅎㅜ 오전은 자바스크립트 기초 수업이 진행 됐고 복습 문제를 시작으로 객체에 대한 수업이 진행됐다. 객체의 종류에 대한 이론적인 부분과 실습 위주였다. 오후는 블록체인 이론 수업을 들었는데 일주일 동안 수업한 내용 복습과 토크노믹스 분석법을 배웠다.

 

 


자바스크립트 기초

 

🧠 복습 문제

📎 두 숫자를 입력 받아 두 수의 합과 곱 출력하기

<script>
             //프롬포트는 문자이기 때문에 형변환 필요      
             var a = Number(prompt('1) 숫자를 입력하세요.'));
       var b = Number(prompt('2) 숫자를 입력하세요.'));

       let cal = (a, b) => {
        let plus = a + b; 
        let mul = a * b;

        document.write('두 숫자의 합은 ' + plus + '이고 곱은 ' + mul + '입니다.');
       }

       cal(a, b);
</script>

결과 ▼

 

📎 점수를 입력받아 점수에 따른 학점 출력하기

<script>
        let jumsu = Number(prompt('점수를 입력해주세요.'));

        let num = (jumsu) => {
            let credit = '';

            if(jumsu >= 90) {
                credit = 'A';

            } else if(jumsu >= 80) {
                credit = 'B';

            } else if(jumsu >= 70) {
                credit = 'C';

            } else if(jumsu >= 60) {
                credit = 'D';

            } else {
                credit = 'F';
            } 

            document.write('당신의 점수는 ' + jumsu + '점이고 ' + credit + '학점입니다.');
        }

        num(jumsu);
    </script>

결과 ▼

 

 

💡 case문에는 조건식이 올 수 없다.

let num = (jumsu) => {
            let credit = '';

            switch(jumsu) {
                case jumsu >= 90:
                    credit = 'A';
                    break;

                case jumsu >= 80:
                    credit = 'B';
                    break;
            }

            document.write('당신의 점수는 ' + jumsu + '점이고 ' + credit + '학점입니다.');
        }

위 num 함수는 switch-case문으로 작성할 수 없다는 뜻이다.

매번 if-else문만 작성해봐서 switch-case문을 써보고자 했는데 case문에는 상수만이 올 수 있기 때문에 조건식으로 비교하려면 if-else문을 사용해야한다!

 

 

✔️ 객체

자바스크립트에서 사용하는 여러 종류의 객체

내장 객체

  • 자바스크립트 프로그래밍을 할 때 자주 사용하는 요소는 미리 객체로 정의되어 있다.
    예) Date, Number, Boolean, Array, Math 등

문서 객체 모델(DOM)

  • 객체를 사용해 웹 문서를 관리하는 방식
    웹 문서 안에 포함된 이미지, 링크, 텍스트 필드 등도 모두 각 별도의 객체로 미리 존재한다.
    예) Document, Image 등

브라우저 객체 모델

  • 웹 브라우저의 주소 표시줄이나 창 크기 등 웹 브라우저 정보를 객체로 다루는 것
    예) Navigator, History, Location, Screen

사용자 정의 객체

  • 사용자가 필요할 때마다 자신의 객체를 정의해서 사용하는 객체

 

✔️ 사용자 정의 객체 만들기

var book = {
    title : '자바스크립트',
    author : '벨라로그',
    price : 15000,
    info : function() {
        alert('책의 제목은 ' + this.title + '이고 페이지수는 50페이지 입니다.');
    }
};
  • 속성 : 값 형식으로 입력하고 속성 추가시엔 콤마를 붙여 나열한다.
  • 메서드 정의시엔 메서드 이름 : function() { } 형태로 입력한다.

 

📎 객체 만들어 화면에 표시하기

<!DOCTYPE html>
<html lang="ko">
  <head>
    <title>사용자 정의 객체</title>
    <link rel="stylesheet" href="css/obj.css" />
  </head>
  <body>
    <div id="display"></div>
    <script src="js/object.js"></script>
  </body>
</html>

 html

var toyRobot = {
  productId: "123-12",
  name: "Robot",
  price: "25000",
  madeIn: "Korea",
  quantity: 10,
  showStock: function () {
    document.getElementById("display").innerHTML =
      this.name + "제품은 " + this.quantity + "개 남아있습니다.";
  },
};

toyRobot.showStock();

▲ js

실행결과

 

 

✔️ 생성자 함수로 객체 만들기

생성자 함수란 객체를 만들어 내는 함수

  • function 이름(속성, 속성2, …) { this.속성 = 속성; this.속성2 = 속성2; …}
  • 이름은 대문자로 시작하는 것이 일반적임
  • 객체의 속성과 함수를 정의할 때는 this.속성명 사용 (this가 가르키는 것은 선언하고 있는 객체 자신!)

 

🧷 생성자 함수 실습

  1. 도서 목록 만들기
function Book(title, author, volume, price) {
  this.title = title;
  this.author = author;
  this.volume = volume;
  this.price = price;
}

const book = new Book("자바스크립트 기초", "벨라로그", 60, 15000);
const book2 = new Book("자바스크립트 기초2", "벨라그", 160, 13000);
const book3 = new Book("자바스크립트 기초3", "벨라", 130, 33000);

let books = [book, book2, book3];

for (i = 0; i < books.length; i++) {
  document.write(
    "<p>제목: " +
      books[i].title +
      " | 저자: " +
      books[i].author +
      " | 가격: " +
      books[i].price +
      "원"
  );
}
document.write("</p>");

 

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>도서 관리 프로그램 - 객체 만들기</title>
    <link rel="stylesheet" href="css/book.css" />
  </head>
  <body>
    <h1>도서 목록</h1>

    <script src="js/book.js"></script>
  </body>
</html>

결과

 

  2. 아래 코드의 값을 출력해줄 생성자 함수 만들기

document.write("<h2>" + member1.name + "</h2>");
document.write("<ul><li>id : " + member1.id + "</li>");
document.write("<li>나이 : " + member1.age + "</li>");
document.write("<li>주소 : " + member1.address + "</li></ul>");

👀 답

function Member(name, id, age, address) {
        this.name = name;
        this.id = id;
        this.age = age;
        this.address = address;
}

let member1 = new Member("홍길동", "hongGD", 22, "서울시 중랑구");

document.write("<h2>" + member1.name + "</h2>");
document.write("<ul><li>id : " + member1.id + "</li>");
document.write("<li>나이 : " + member1.age + "</li>");
document.write("<li>주소 : " + member1.address + "</li></ul>");

출력 결과

 

 


블록체인 이론

🧠 복습

실리콘밸리 은행 파산 사태

  • 국가를 믿고 금융 거래를 했는데 지쳐주지 못함 ⇒ 탈중앙화를 바라는 여론

+ 블록체인 기술은 거래에 있어 중간자 즉, 은행을 제거한다.

 

블록체인은 어떻게 작동하나?

분산 원장을 노드 운영자(채굴자 Validator)가 관리한다. 합의 해주면 생성된 블록을 인정해줌

과정: Data Ability 데이터 가용성 - Execution 합의 - Settlement - Consensus 실행

 

PoW (Proof of Work) 작업 증명 방식

  • ‘일’을 하면서 증명
  • 수많은 노드들이 51% 동의하면 거래가 이루어짐
  • 수많은 노드들 ⇒ 컴퓨터 파워(채굴기!) 필요

PoS(Proof of Stake) 지분 증명 방식

  • 주식과 비슷한 방식으로 많은 코인을 가지고 있으면 더 많은 의결권을 갖게 됨
  • 시장 점유율이 높은 사람이 더 많은 의결권을 가지고 참여함

블록체인 트릴레마 - 탈중앙화, 보안성, 확장성

확장성을 높이면 탈중앙화와 보안성을 어느정도 포기 해야하지만 그럼에도 불구하고 PoS를 선호하는 이유 ⇒ 느리고 어려움

  • 자동차 체인과 유사한 Layer 2 - 대표적으로 이더리움

모놀리틱 블록체인과 모듈러 블록체인

  1. Monolithic 모놀리틱 - Data Ability, Execution, Settlement, Consensus 4개 과정을 을 혼자 수행
  2. Modular 모듈러 - 4가지 기능을 분업하여 수행하여 생산성이 높음

모놀리틱 vs 모듈러는 엄마 vs 아빠와 같은 질문이지만 모듈러가 대세다.

모듈러 블록체인으로 인해 이더리움의 확장성을 개선함

 

Layer

 

 

Layer 0 : 인터넷

Layer 1 : 블록체인

Layer 2 : 블록체인의 확장성을 개선해줌 (Zk, 옵티미스틱)

Layer 3 : dApp (탈중앙화 앱)

 

 

 

 

🗣 조장님의 쉬운 설명

우리조 조장님은 블록체인에 대해 빠삭하신 분으로.. 개발도 해보고자 이전에 개발 교육 과정을 듣고 추가로 들으러 오신 분인데 이해되지 않은 근본적인 부분(?)을 쉽게 이해할 수 있게 설명 해주셨다.

비트코인은 솔직히 우리나라처럼 은행이 잘 되어 있는(신뢰 빵빵) 국가에선 화폐로 자리 잡기 어렵다. 우리는 너무나 중앙화에 대한 신뢰와 신용이 탄탄하기 때문임

인도를 예를 들면 한 가정의 ‘아빠’만이 계좌를 개설할 수 있는데 그로인해 여성들은 착취 당하게 된다. 이런 국가일 경우 코인 계좌를 개설하면 돈을 받을 수 있게 된다. 이러한 경우에만 ‘탈중앙화’ 기능이 빛을 발휘하게 되는 것..

그리고 나는 NFT에 대해 궁금하면서도 좋지 않게 보고 있는데, 인터넷에 그림을 올리는 개인 창작자들의 그림이 무단으로 도용되는 사례가 있기 때문이다. 그 그림에 대한 저작권은 그 개인 창작자에게 있는 것인데 훔쳐다가 NFT로 올린 사람이 ‘보장권’을 갖게 되는 사태가 발생하게 되니… 해결 방안이 없을지 생각해보고 싶다. 근데 궁금은 함 😑

 

*코인과 토큰의 차이

layer1이 발행한게 코인 layer1의 dApp이 발행한게 토큰

요즘 코인과 토큰을 정확히 구분하고 있지 않지만 둘의 차이를 알고 있는건 중요!

 

 

✔️ 토크노믹스 보는 법 - 프로젝트 분석하기

💡 핵심 : 내 앱에서 어떤 경제를 가진 토큰을 만들 것인가?

 

👾 예시 프로젝트 Yuliverse

1. 서비스의 성격 파악

  • 게임(롤플레잉)
  • 플레이어가 토큰을 채굴(퀘스트 완료, $ARG, $ART)
  • $ARG: 게임 콘텐츠를 이용하기 위한 토큰 (== *유틸리티 토큰)
  • $ART: 서비스의 가치를 반영하는 토큰
  • Yuliverse 정의: Yuliverse 서비스는 Dual Token 시스템

2. 토큰의 배분과 할당

  • 총 토큰의 양 80억개
  • 총 유통량: 총 공급의 12.5%
  • 토큰 배분 기간 (Unlock Schedule) ****5.5년
  • 나머지 77.5%는 어떻게 분배되나? ⇒ 게임 콘텐츠를 통해 플레이어가 채굴의 30%를 얻고 투자자가 15%(Seed 5%, Private 5%, Public Sales 5%) , 내부자 20%(Advisory, Team)

 

🐑 실습 - Alpaca Finance

1. 알파카파이낸스는 어떤 서비스?

  • 2021년도 출시, 레버리지 파밍 프로토콜 == ‘대출’ 프로토콜

개인이 유동성 공급해서 수익을 받는 구조를 파밍이라고 하는데,

우선 유동성 공급을 쉽게 정의하자면 바구니에 사과🍎와 바나나🍌를 넣었을 때 사과를 바나나로, 바나나를 사과로 교환 가능한 것을 말한다.

레버리지 파밍 프로토콜은 “사과 하나를 바나나 하나로 교환했을 때 수익 10프로 얻던 시스템 말고 우리가 대출 해줄게! 사과 2개나 바나나 2개” 얻을 수 있어!”의 개념

위 파밍이 알파카파이낸스에서 유일한 수익을 얻는 방법이었는데 획기적이라며 상도 받고 인기 많았음

  • 💡 Fair Launch 프로젝트(투자자 없이 토큰을 발행한 프로젝트)이다.

 

2. 몇 종류의 토큰을 발행?

  • AUSD (AlpacaUSD) ⇒ 사업 방향성에 투표 가능한 거버넌스 토큰

⇒ 알파카파이낸스는 Single Token 시스템

 

3. 토큰 총 공급량은 얼마?

1억 8천만

총 공급량의 87%가 프로토콜 사용자에게 분배되고 약 9%는 팀에게 2년에 걸쳐 창립 팀에 분배?

 

4. 토큰 사용처는 어떻게 되나?

보상과 사업 방향성에 대해 투표 (홈페이지에 거창하게 길게 써놨지만 이 두 개 뿐..)

 

5. 왜 가격이 하락 했을까?

토큰 투자자에게 프로토콜 수익을 배분하지 않음

 

6. 무엇이 문제일까?

토큰을 투표권으로만 줌. 배당 달라는 것을 거부!

⇒ 배당하는게 증권법 위반이기는 했다.

알파카파이낸스는 매주 토큰 소각(burn)을 통해 영구적으로 누구도 토큰을 꺼낼 수 없게 한다.

⇒ 공급은 줄고 수요는 올라가니 가격도 올라갈거라 주장했지만 디파이는 공급에 대한 탄력성이 떨어져 가격은 오르지 않았다.

 

 

💭 마치며

자바스크립트 수업이 지루하진 않은데 너무 기초적인거라… 꾸준히 이 수준으로 진행되는 건가 싶다. 기초를 다시 한 번 되새기고 다지는 건 좋지만! 좋지만….!!! 수업 들으며 있는 그대로 따라하지 않고 좀 더 응용해보려고 노력 중이긴 하다. 시간 관계상 타협하는 부분이 많긴 하지만!

오후에 진행한 프로젝트 토크노믹스 분석하기.. 좀 헤맸다. (당연함) 강사님이 설명해주시면서 Yuliverse를 분석할 땐 백서 페이지도 뭔가 직관적이라 오오~ 하면서 들었는데 알파카파이낸스 분석할 땐 뭐가 뭔지 모르겠는 ㅋㅋㅋ 혼자 분석할 때 Fair Launch 프로젝트라는 것과 대출 프로토콜의 디파이라는 것 .. 토큰 소각.. 만 파악하게 된 듯

블록체인을 듣고 있으면 계속해서 “이게 뭐지”란 생각이 지배적이지만 응근히 흥미롭긴 하다… 킵고잉!!

 


 

댓글