πŸ“Œ 맀핑과 μ£Όμ†Œ

  • 맀핑
    맀핑 (mapping) 은 "ν‚€-κ°’" ꡬ쑰둜 데이터 μ €μž₯ν•  λ•Œ μ“°μ΄λŠ” object
    (파이썬의 라이브러리 같은)

    // key : addressν˜• value : uintν˜•
    mapping(address => uint) ownerZombieCount;

    // 맀핑값 읽고 μ“°κΈ°
    mapping(uint => address) public zombieToOwner;
    // uintν˜• ν‚€ 0에 ν˜ΈμΆœν•œ μ‚¬λžŒμ˜ μ£Όμ†Œκ°€ 할당됨
    zombieToOwner[0] = msg.sender;

  • μ£Όμ†Œ : νŠΉμ • μœ μ €κ°€ μ†Œμœ ν•˜λŠ”, like 은행 κ³„μ’Œλ²ˆν˜Έ

πŸ“Œ Msg.sender

  • λͺ¨λ“  ν•¨μˆ˜μ—μ„œ 이용 κ°€λŠ₯ν•œ νŠΉμ • μ „μ—­λ³€μˆ˜.

  • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ μ‚¬λžŒμ˜ μ£Όμ†Œλ₯Ό 가리킨닀

  • μ†”λ¦¬λ””ν‹°μ—μ„œ ν•¨μˆ˜ 싀행은 항상 μ™ΈλΆ€ ν˜ΈμΆœμžκ°€ μ‹œμž‘ν•˜λ―€λ‘œ, λˆ„κ΅°κ°€κ°€ μ»¨νŠΈλž™νŠΈμ˜ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ” κ²ƒμž„!

πŸ“Œ Require

  • ν•¨μˆ˜κ°€ 각 ν”Œλ ˆμ΄μ–΄λ§ˆλ‹€ ν•œ λ²ˆμ”©λ§Œ ν˜ΈμΆœλ˜λ„λ‘ 함
  • require ν™œμš©ν•˜λ©΄ νŠΉμ • 쑰건이 참이 아닐 λ•Œ ν•¨μˆ˜κ°€ μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό λ°œμƒν•˜κ³  싀행을 λ©ˆμΆ”κ²Œ 됨

    //_name이 vitalik인지 λΉ„κ΅ν•˜λŠ” κ²ƒμž„.
    require(keccak256(_name) == keccak256("Vitalik"));

if 쑰건 μ•ˆ 맞으면 원상볡귀가 μ–΄λ €μš΄λ° requireμ“°λ©΄ 그게 훨씬 빠름!

πŸ“Œ 상속

μ—¬λŸ¬ μ»¨νŠΈλž™νŠΈμ— μ½”λ“œ 둜직 λ‚˜λˆ„λŠ” 게 νŽΈλ¦¬ν•¨. κ·Έλ•Œ 상속을 μ΄μš©ν•˜μž!

contract Doge {
  function catchphrase() public returns (string) {
    return "So Wow CryptoDoge";
  }
}

contract BabyDoge is Doge {
  function anotherCatchphrase() public returns (string) {
    return "Such Moon BabyDoge";
  }
}

BabyDogeλŠ” Dogeλ₯Ό 상속함.

BabyDoge μ»¨νŠΈλž™νŠΈκ°€ μ»΄νŒŒμΌμ—μ„œ 싀행될 λ•Œ, catchphrase()ν•¨μˆ˜μ—λ„ μ ‘κ·Όν•  수 있고, anotherCatchphrase()ν•¨μˆ˜μ—λ„ μ ‘κ·Όν•  수 μžˆλ‹€λŠ” μ˜λ―Έμž„.

뢀뢄집합 ν΄λž˜μŠ€κ°€ μžˆμ„ λ•Œ μ‚¬μš©ν•  수 있고, λ‹¨μˆœνžˆ λ™μΌν•œ λ‘œμ§μ„ μ—¬λŸ¬ 클래슀둜 λΆ„ν• ν•˜κ³  싢을 λ•Œλ„ μ‚¬μš©ν•  수 있음

πŸ“Œ Import

  • import : μ–΄λ–€ νŒŒμΌμ„ λ‹€λ₯Έ 파일둜 뢈러였고 싢을 λ•Œ !

    	import "./(파일과 λ™μΌν•œ 폴더에 μžˆμ„λ•Œ)fileName";

πŸ“Œ Storage vs Memory

  • storage : 블둝체인에 영ꡬ적으둜 μ €μž₯λ˜λŠ” λ³€μˆ˜
  • memory : μž„μ‹œμ μœΌλ‘œ μ €μž₯λ˜λŠ” λ³€μˆ˜

보톡 ν•¨μˆ˜ 외뢀에 μ„ μ–Έλœ μƒνƒœλ³€μˆ˜λŠ” storage
ν•¨μˆ˜ 내뢀에 μ €μž₯된 λ³€μˆ˜λŠ” memory

ν•¨μˆ˜μ—μ„œ λ°°μ—΄ 정리할 λ•Œ 쓰이기도

πŸ“Œ ν•¨μˆ˜ μ ‘κ·Ό μ œμ–΄μž 더 μ•Œμ•„λ³΄κΈ°

  • internal : ν•¨μˆ˜κ°€ μ •μ˜λœ μ»¨νŠΈλž™νŠΈλ₯Ό μƒμ†ν•˜λŠ” μ»¨νŠΈλž™νŠΈμ—μ„œλ„ 접근이 κ°€λŠ₯
    (이 점만 μ œμ™Έν•˜λ©΄ privateλž‘ λ˜‘κ°™λ‹€)

  • external : ν•¨μˆ˜κ°€ μ»¨νŠΈλž™νŠΈ λ°”κΉ₯μ—μ„œλ§Œ 호좜될 수 있고 μ»¨νŠΈλž™νŠΈ λ‚΄ λ‹€λ₯Έ ν•¨μˆ˜μ— μ˜ν•΄ 호좜될 수 μ—†λ‹€ (이 점만 μ œμ™Έν•˜λ©΄ publicμ΄λž‘ λ˜‘κ°™λ‹€)

  • javaλž‘ λΉ„μŠ·

πŸ“Œ λ‹€λ₯Έ μ»¨νŠΈλž™νŠΈμ™€ μƒν˜Έμž‘μš©ν•˜κΈ°

블둝체인 상에 μžˆμœΌλ©΄μ„œ μš°λ¦¬κ°€ μ†Œμœ ν•˜μ§€ μ•Šμ€ μ»¨νŠΈλž™νŠΈμ™€ 우리 μ»¨νŠΈλž™νŠΈκ°€ μƒν˜Έμž‘μš©μ„ ν•˜λ €λ©΄ λ¨Όμ € μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•΄μ•Ό ν•œλ‹€

interface μ •μ˜λ²• contract μƒˆλ‘œ μ •μ˜ν•˜λŠ” κ±°λž‘ λΉ„μŠ·ν•¨!

πŸ“Œ μΈν„°νŽ˜μ΄μŠ€ ν™œμš©ν•˜κΈ°

contract LuckyNumber {
  mapping(address => uint) numbers;

  function setNum(uint _num) public {
    numbers[msg.sender] = _num;
  }

  function getNum(address _myAddress) public view returns (uint) {
    return numbers[_myAddress];
  }
}

μ‚¬μš©μž μ£Όμ†Œλ₯Ό ν†΅ν•΄μ„œ κ·Έ μ‚¬λžŒμ˜ ν–‰μš΄μ˜ 수 μ°Ύμ•„λ³Ό 수 μžˆλŠ” μ»¨νŠΈλž™νŠΈκ°€ μžˆλ‹€.
이제 getNum ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ 이 μ»¨νŠΈλž™νŠΈμ— μžˆλŠ” 데이터λ₯Ό 읽고자 ν•˜λŠ” external ν•¨μˆ˜ λ“±μž₯!

contract NumberInterface {
  function getNum(address _myAddress) public view returns (uint);
}

getNumν•¨μˆ˜λ₯Ό μ“°κ³  싢은 κ±°λ‹ˆκΉŒ.. interface μ •μ˜ν•΄μ£Όκ³  κ·Έ μ•ˆμ— μ €κ±Έ 써쀌

contract MyContract {
  address NumberInterfaceAddress = 0xab38...
  // ^ μ΄λ”λ¦¬μ›€μƒμ˜ FavoriteNumber μ»¨νŠΈλž™νŠΈ μ£Όμ†Œμ΄λ‹€
  NumberInterface numberContract = NumberInterface(NumberInterfaceAddress)
  // 이제 `numberContract`λŠ” λ‹€λ₯Έ μ»¨νŠΈλž™νŠΈλ₯Ό 가리킀고 μžˆλ‹€.

  function someFunction() public {
    // 이제 `numberContract`κ°€ 가리킀고 μžˆλŠ” μ»¨νŠΈλž™νŠΈμ—μ„œ `getNum` ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€:
    uint num = numberContract.getNum(msg.sender);
    // ...그리고 μ—¬κΈ°μ„œ `num`으둜 무언가λ₯Ό ν•  수 μžˆλ‹€
  }
}

πŸ“Œ λ‹€μˆ˜μ˜ λ°˜ν™˜κ°’ μ²˜λ¦¬ν•˜κΈ°

λ‹€μˆ˜μ˜ 값을 ν• λ‹Ήν•˜λ©΄ λœλ‹€!

function processMultipleReturns() external {
  uint a;
  uint b;
  uint c;
  // λ‹€μŒκ³Ό 같이 λ‹€μˆ˜ 값을 ν• λ‹Ήν•œλ‹€:
  (a, b, c) = multipleReturns();
}
// ν˜Ήμ€ 단 ν•˜λ‚˜μ˜ κ°’μ—λ§Œ 관심이 μžˆμ„ 경우: 
function getLastReturnValue() external {
  uint c;
  // λ‹€λ₯Έ ν•„λ“œλŠ” 빈칸으둜 λ†“κΈ°λ§Œ ν•˜λ©΄ λœλ‹€: 
  (,,c) = multipleReturns();
}

0개의 λŒ“κΈ€

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

Powered by GraphCDN, the GraphQL CDN