01 ์ ์
๐ ๊ธฐ๋ณธ ๊ตฌ์กฐ
function ์ด๋ฆ (๋ฐ๊ณ ์ถ์ ํ์ ๋ณ์๋ช ) public { // public, private, internal, external ๋ฑ ๊ฐ๋ฅ // ๋ด์ฉ }โ
(1) Parameter ์ Retrun ๊ฐ์ด ์๋ function ์ ์
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์ ๊ฒฝ์ฐ, changeA๋ผ๋ ํจ์๊ฐ ์๋ํ ๋ ๋ณ์ a์ ๊ฐ์ 5๋ก ๋ณ๊ฒฝ์์ผ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค.
์ปดํ์ผ ์ดํ, ๋ฐฐํฌ๋ฅผ ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด๋ฉด a๋ง ํธ์ถํ์ ๊ฒฝ์ฐ ์ด๊ธฐ๊ฐ์ธ 3์ ์ถ๋ ฅํ๊ณ ์์ง๋ง
changeA ๋ฅผ ํธ์ถํ ์ดํ a๋ฅผ ํธ์ถํ๋ฉด ๊ฐ์ด 5์ธ ๊ฒ์ ํ์ธํ ์ ์๊ณ , ์ด ๊ณผ์ ์์๋ ๊ฐ์ค๊ฐ ์๋น๋๋ค.
์ฆ, changeA ํจ์๋ฅผ ํตํด 5๋ผ๋ ๊ฐ์ด ๋ณ์ a์ ๋์ ๋๋ค๊ณ ํ ์ ์๋ค.
(2) Parameter ๋ ์๊ณ , Retrun ๊ฐ์ด ์๋ function ์ ์
ํ๋ผ๋ฏธํฐ๋ ์๊ณ ๋ฆฌํด๊ฐ์ด ์๋ ํจ์์ ๊ฒฝ์ฐ, ์ changeB ํจ์์ ๊ฐ์ด ์์ฑํด์ค ์ ์๋ค. ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ํจ์๋ฅผ ์ ์ํด์ค ๊ฒฝ์ฐ type์ด ์ด๋ค ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฃ์ ๊ฒ์ธ์ง๋ฅผ ์์ฑํด์ฃผ์ด์ผ ํ๋ค.
๋ฐ๋ผ์ ํด๋น ํจ์๋ changeB ํจ์๋ฅผ ์คํํ ๋๋ง๋ค, _value์ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ฉฐ, ๋ณ์ a์ ์ ๋ ฅํ ๊ฐ์ด ๋ค์ด๊ฐ๋๋ก ํ ์ ์๋ค.
๋ฐฐํฌ ์ดํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด์. ์ฐ์ ๋ณ์ a๋ง ํธ์ถํ์ ๊ฒฝ์ฐ ์ด๊ธฐ๊ฐ์ธ 3์ ์ถ๋ ฅํ๊ณ ์๋ค.
changeB ํจ์ ๋ถ๋ถ์ 10์ ์ ๋ ฅํ๊ณ ํจ์๋ฅผ ํธ์ถํ๊ณ
๋ค์ ๋ณ์ a๋ฅผ ํธ์ถํด๋ณด๋ ๋ณ์์ ๊ฐ์ด 10์ผ๋ก ๋ฐ๋๊ฒ์ ํ์ธํ ์ ์๋ค.
(3) Parameter ์ Retrun ๊ฐ์ด ์๋ function ์ ์
ํ๋ผ๋ฏธํฐ์ ๋ฆฌํด๊ฐ์ด ๋ชจ๋ ์๋ ํจ์๋ changeC ํจ์์ ๊ฐ์ด ์์ฑํ ์ ์๋ค. ์ด๋, public ๋ค์ ๋ฆฌํดํด์ฃผ์ด์ผ ํ๋ ๊ฐ์ด ์์ผ๋ ๋ฆฌํด ๊ฐ์ ๋ช ์ํด์ฃผ์ด์ผ ํ๋ฉฐ ๋ฐ๋์ "s"๋ฅผ ๋ถ์ฌ "returns"๋ก ์์ฑํด์ผ ํ๋ค. ๋ํ, ์ด๋ค ๊ฐ์ ๋ฆฌํดํ ๊ฒ์ธ์ง ํ์ ์ ์์ฑํด์ผ ํ๋ค. ๋ณธ ์ค์ต์์๋ a ๋ณ์๋ฅผ ๊ทธ๋๋ก ๋ฆฌํดํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ uint256์ ์ฌ์ฉํ์๋ค.
๋ฐฐํฌ ์ดํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด์. ์ฐ์ a ๋ณ์์ ๊ฐ์ ์ด๊ธฐ๊ฐ ๊ทธ๋๋ก 3์ด ๋์ค๊ณ ์๊ณ
45๋ฅผ ๋ฆฌํดํ๊ณ ์ changeC์ ๊ฐ์ ๋ฃ๊ณ ๋ฆฌํดํ ํ
a๋ฅผ ํธ์ถํ๋ฉด 45๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ถ๊ฐ์ ์ผ๋ก ํฐ๋ฏธ๋์ ๋ฆฌํด๊ฐ์ด ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ฆ, changeC ํจ์๋ ์ ๋ ฅํ ๊ฐ์ ๋ฐ์์ ๋ณ์ a์ ๋์ ํ๊ณ ๋์ ํ a๋ฅผ ๋ฆฌํดํ ํจ์์์ ์ ์ ์๋ค.
02 public, private, internal, external
(1) public
: ์์ ํ ์คํ๋์ด ๋ชจ๋ ๊ณณ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
(2) private
: ์ค์ง private์ด ์ ์๋ ์๊ธฐ ์ปจํธ๋์์๋ง ๊ฐ๋ฅ (private์ด ์ ์๋ ์ปจํธ๋์ ์์๋ฐ์ ์์๋ ๋ถ๊ฐ๋ฅ)
(3) internal
: private์ฒ๋ผ ์ค์ง internal์ด ์ ์๋ ์๊ธฐ ์ปจํธ๋์์๋ง ๊ฐ๋ฅํ๊ณ , internal์ด ์ ์๋ ์ปจํธ๋์ ์์๋ฐ์ ์
(4) external
: public์ฒ๋ผ ๋ชจ๋ ๊ณณ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋, external์ด ์ ์๋ ์๊ธฐ ์์ ์ปจํธ๋ ๋ด์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ
โถ ์ค์ต ์งํ
์ ๊ฐ๋ ๋ค์ ํ์ธํด๋ณด๊ณ ์ ๊ฐ๋จํ ์ค์ต์ ์งํํ์๋ค.
๋จผ์ public๊ณผ private์ ๋น๊ตํด๋ณด๊ณ ์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์๋ค.
์ด๋ฅผ ๋ฐฐํฌํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด์. ์ฝ๋ ๋ฐฐํฌ๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด๋ a2 ๋ณ์๋ private ์ฆ, ์ ๊ทผ์ด ์ ํ๋์ด ์์ผ๋ฏ๋ก public ์ ๊ทผ ์ ํ์ ๊ฐ์ง๊ณ ์๋ ๋ณ์ a๋ง ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค์์ผ๋ก ์กฐ๊ธ ๋ ๋ฐ์ ๋ ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
๐ public ์์ ์ฝ๋
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract Lec5 { // public uint256 public a = 5; // private uint256 private a2 = 5; } contract Public_example { uint256 public a = 3; function changeA(uint256 _value) public { a =_value; } function get_a() view public returns (uint256) { return a; } } contract Public_example_2 { Public_example instance = new Public_example(); function changeA_2(uint256 _value) public{ instance.changeA(_value); } function use_public_example_a() view public returns (uint256) { return instance.get_a(); } }โ
์ ์์ ์๋ Public_example๊ณผ Public_example_2 ๋ผ๋ ๋๊ฐ์ ์ค๋งํธ ์ปจํธ๋์ด ์๋ค. Public_example_2๋ฅผ ์ฌ์ฉํ์ฌ Public_example ์ ์ ๊ทผ ํ ๊ฒ์ด๋ค.
์ด๋, Public_example_2์์ ์กฐ๊ธ ๋ ๋์ ๋๋ Public_example instance = new Public_example(); ์ธ์คํด์ค๊ฐ ์๋ค. ์ด ์ธ์คํด์ค๋ฅผ ํตํด์ Public_example ์ปจํธ๋์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ฆ, ์ธ์คํด์ค๋ Public_example์ ๋ถ์ ์ด๋ผ๊ณ ๊ฐ๋จํ๊ฒ ์ดํดํ ์ ์๋ค.
์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด ์ปดํ์ผ ํ ๋ฐฐํฌ๋ฅผ ์งํํด๋ณด์. ๊ทธ ์ ์, ์ฐ๋ฆฌ๋ ์ฝ๋์ contract์ ์ด 3๋ฒ ์์ฑํด์ฃผ์๊ธฐ ๋๋ฌธ์ remix ํ๊ฒฝ์์๋ ์ด 3๊ฐ์ ์ปจํธ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
3๊ฐ์ ์ปจํธ๋ ์ค public_example_2๋ฅผ ๋ฐฐํฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ๋ณผ ์ ์๋ค.
์ด์ ์ด A ๊ฐ์ 10์ ๋ฃ๊ณ ๋ฆฌํด์ ํ ํ ๊ทธ ๊ฒฐ๊ณผ๊ฐ 10๊ณผ ์ผ์นํ๋์ง ํ์ธํด๋ณด์. A๊ฐ์ 10์ ๋ฃ์์ ๋ ์ต์ข ์ ์ผ๋ก ๋์ผํ๊ฒ ๋ณ๊ฒฝ๋ ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ง์ฝ ์ ์ฝ๋์์ changeA์ get_a ๊ฐ๊ฐ์ ํจ์์ ์ ๊ทผ์ ํ์๋ฅผ public์ด ์๋ private์ผ๋ก ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค์์ผ๋ก external๊ณผ ๊ด๋ จ๋ ์์ ์ฝ๋๋ฅผ ํ์ธํด๋ณด์.
๐ external ์์ ์ฝ๋
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract Lec5 { // public uint256 public a = 5; // private uint256 private a2 = 5; } contract external_example { uint256 private a = 3; function get_a() view external returns (uint256) { return a; } } contract external_example_2 { external_example instance = new external_example(); function external_example_get_a() view public returns (uint256) { return instance.get_a(); } }โ
์ ์ฝ๋์์ external_examle์ get_a๋ external ๋ก ์ ์ ๋์ด ์๊ธฐ์, external_examle ๋ด์์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํ์ง๋ง, external_examle _2๋ ์ ํ ๋ณ๊ฐ์ ์ค๋งํธ ์ปจํธ๋์ด๊ธฐ์ ๊ฐ๋ฅํจ์ ์ ์ ์๋ค.
ํด๋น ์ฝ๋๋ public์ด ์์ฑ๋๋ ๋ถ๋ถ์ external์ ์์ฑํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
03 View์ Pure
(1) View
: function ๋ฐ์ ๋ณ์๋ค์ ์ฝ์ ์ ์์ผ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ
(2) Pure
: function ๋ฐ์ ๋ณ์๋ค์ ์ฝ์ง ๋ชปํ๊ณ , ๋ณ๊ฒฝ๋ ๋ถ๊ฐ๋ฅ
โถ View์ Pure ๋ชจ๋ ๋ช ์๋ฅผ ์ํ ๊ฒฝ์ฐ, function ๋ฐ์ ๋ณ์๋ค์ ์ฝ์ด์ ๋ณ๊ฒฝ์ ํด์ผํ๋ค.
๐ ๊ด๋ จ ์์
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract View_example{ uint256 public a = 1; function read_a() public returns(uint256){ a = 3; return a+2; } } contract Pure_example{ function read_a() pure public returns(uint256){ uint256 a = 3; return a+2; } }โ
04 String
โ ์๋ฆฌ๋ํฐ ์ ์ฅ ์์ญ
1. storage : ๋๋ถ๋ถ์ ๋ณ์, ํจ์๋ค์ด ์ ์ฅ๋๋ฉฐ, ์์์ ์ผ๋ก ์ ์ฅ์ด๋์ด ๊ฐ์ค ๋น์ฉ์ด ๋น์
2. memory: ํจ์์ ํ๋ผ๋ฏธํฐ, ๋ฆฌํด๊ฐ, ๋ ํผ๋ฐ์ค ํ์
์ด ์ฃผ๋ก ์ ์ฅ์ด ๋จ. ๊ทธ๋ฌ๋, storage ์ฒ๋ผ ์์์ ์ด์ง ์๊ณ , ํจ์๋ด์์๋ง ์ ํจํ๊ธฐ์ storage๋ณด๋ค ๊ฐ์ค ๋น์ฉ์ด ์
3. Colldata : ์ฃผ๋ก external function ์ ํ๋ผ๋ฉํฐ์์ ์ฌ์ฉ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ํจ์๋ฅผ ์คํํ ๋ ํ๋ผ๋ฉํฐ์ ๊ฐ ์์ฒด๋ฅผ calldata๋ก ๋ฐ์ ์ ์๋ค. calldata๋ก ๋ฐ๊ฒ ๋๋ค๋ฉด, ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ณ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค.
4. stack: EVM (Ethereum Virtual Machine) ์์ stack data๋ฅผ ๊ด๋ฆฌํ ๋ ์ฐ๋ ์์ญ์ธ๋ฐ 1024Mb 1024๊ฐ์ data๋ฅผ ์ ํ์ ์ผ๋ก ์ ์ฅํด ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํจ์๋ฅผ ์คํํ ๋ ๋ก์ปฌ ๋ณ์์ ๊ฐ์๊ฒ๋ค์ ์ ์ ๊ธฐ์ตํ ๋ EVM์ด ์ฌ์ฉ์ ํ๋ค.
โ ์์
// SPDX-License-Identifier GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract lec7 {
function get_string(string memory _str) public pure returns( string memory){
return _str;
}
}
์ ์์ ์ ๋ณด๋ฉด string ๋ค์์ memory ํค์๋๊ฐ ์๋ค. memory๋ ๋ string ๋ค์์ ๋ถ์ฌ์ค๋ค. ๊ทธ๋ฆฌ๊ณ , pure๋ฅผ ์ฐ๋์ด์ ๋, ํ๋ผ๋ฏธํฐ ๋ฐ์๊ฑธ ๋ฐ๋ก ๋ฆฌํดํ๊ธฐํด์, storage ์ ์ ์ฅ๋ ๋ณ์๋ค์ ์ฝ์ง ์์๊ธฐ ๋๋ฌธ์ pure์ ์ฌ์ฉํ๋ค.
์ถ์ฒ : ์ธํ๋ฐ ์๋ฆฌ๋ํฐ ๊นจ๋ถ์๊ธฐ(https://inf.run/qNVC)
'Study > Blockchain & Solidity' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Solidity ๊นจ๋ถ์๊ธฐ] Instance - constructor (0) | 2024.05.22 |
---|---|
[Solidity ๊นจ๋ถ์๊ธฐ] Instance ์ ์ (0) | 2024.05.15 |
[Solidity ๊นจ๋ถ์๊ธฐ] ๊ธฐ๋ณธ (1) | 2024.04.15 |
Solidity (0) | 2024.04.08 |
Blockchain (0) | 2024.04.03 |