티스토리 뷰
컴포저빌리티는 스마트 컨트랙트끼리 상호작용해서 작업을 수행할 수 있는걸 의미한다고 한다.
예를 들어 컨트랙트 A가 있는데, 이 컨트랙트는 토큰을 예치하면 이자를 준다. 그리고 컨트랙트 B는 담보에 대해서 대출을 해준다.
그러면 사용자는 대출을 받기 위해 A 컨트랙트에서 발생한 이자에 대해 컨트랙트 B를 이용해 대출을 받는 컨트랙트 C를 만들 수 있는 것이다. 따로 이거하고, 저거하고 복잡하게 할 거 없게 되는 것이다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
import "./SimpleStorage.sol";
contract SolidityFactory {
// type visibility name
// uint public favoriteNumber
SimpleStorage public simpleStorage;
function createSimpleStorageContract() public {
simpleStorage = new SimpleStorage(); // new - solidity knows deploy contract
}
}
여기서에서 new 키워드는 새로운 컨트랙트 인스턴스를 생성하는데 사용된다.
override
상속까지는 저번에 크립토좀비 하면서 배웠는데 오버라이드는 처음 배운다.
SImpleStore에서 숫자 저장하는 store 함수를 AddFiveStorage에서 상속받아서 업데이트하고자 한다.
AddFiveStorage.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
import {SimpleStorage} from "./SimpleStorage.sol";
contract AddFiveStorage is SimpleStorage {
// +5
// overrides
// virtual override
function store(uint256 _newNumber) public override {
}
여기 보면 public 옆에 override 키워드가 있다. 이대로 컴파일하려면 안된다.
우선 괄호가 하나 없고.. (방금 추가함)

상속해서 오버라이드하려는 함수가 non-virtual이라고 한다. virtual 키워드가 필요해. 원래 SimpleStorage.sol에서 store 함수를 다음과 같이 변경한다.
function store(uint256 _favoriteNumber) public virtual {
myFavoriteNumber = _favoriteNumber;
}
그럼 컴파일이 무슨 일 있었니?? 하듯 아주 잘 되는걸 알 수 있다.
virtual 키워드 넣으니 이 함수는 override-able 하게 되었다.
그래서 오버라이드한 store 함수에서는 뭘 할거냐면
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
import {SimpleStorage} from "./SimpleStorage.sol";
contract AddFiveStorage is SimpleStorage {
// +5
// overrides
// virtual override
function store(uint256 _newNumber) public override {
myFavoriteNumber = _newNumber +5;
}
}
이렇게 할거다.
솔리디티는 기본적으로 함수를 final, 재정의 불가한 상태로 간주한다. 그렇기에 virtual 키워드를 넣어 컴파일해주면, 컴파일러에게 이 함수는 상속되어서 자식 컨트랙트 안에서 재정의 될 수 있다고 명시적으로 알려주는 것과 같다. 의도치않은 오버라이딩 (예를 들어 모르고 같은 이름으로 상속받은 컨트랙트에서 함수를 정의한 경우 등)을 피할 수 있어서 컨트랙트의 안정성을 높일 수 있다.
그러면 이렇게 된다. 2가 내게 젤 좋아하는 숫자야! 하고 저장하면, 7이 되어서 저장된다.

아주 사용자를 답답하게 하는 서비스가 아닐 수 없다.
끝! >..<
- Total
- Today
- Yesterday
- vscode
- 선라이즈 패들보트
- setState
- contains
- web2
- 플러터
- zksync
- 패들보트
- web2web3비교
- web3
- gili
- 테스트넷
- 길리
- 세폴리아
- 이더리움
- 솔리디티
- 크립토좀비
- Flutter
- 찾아봄
- 세상만사새옹지마
- 스파르타코딩클럽
- 터틀포인트
- 티스토리챌린지
- til
- prettier
- DART
- 공부좀열심히해라
- 김영한
- 오블완
- 길리여행
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |