함수 접근 제어자들에 다시 복습
- public
다른 컨트랙트에서도 호출할 수 있게 된다
- private
해당 함수가 속해있는 컨트랙트에서만 호출할 수 있고 다른 컨트랙트에서는 사용할 수 없다.
- internal
해당 함수가 속한 컨트랙트와 해당 컨트랙트를 상속받는 컨트랙트에서만 사용할 수 있고
그외의 상속받지 않은 다른 컨트랙트에서는 사용할 수 없다.
- external
함수가 있는 컨트랙트 내부에서는 사용할 수 없고 다른 컨트랙트에서만 사용할 수 있다.
함수 제어자도 복습
- 함수제어자(modifier)
이 함수 제어자를 이용하면 특정 함수가 실행될 때 함수 제어자를 거쳐서 함수된다.
함수제어자의 내부를 보면 _; 라는 문구를 마지막에 넣는데
이건 해당 함수가 실행되기 전에 함수제어자가 먼저 실행되고, _; 를 만나면 해당함수로 다시 되돌아간다는 뜻이라한다.
함수제어자도 함수처럼 매개변수(인수)를 가질 수 있다.
modifier 함수제어자라네(uint 휘뚜루, uint 마뚜루, uint 나뚜루) {
require(휘뚜루+마뚜루 >= 나뚜루);
_;
}
이런식으로 함수 제어자의 역할을 한층 더 맛깔나게 만들 수 있다.
modifier aboveLevel(uint _level, uint _zombieId) {
require(zombies[_zombieId].level >= _level);
_;
}
이전 챕터에서 만든 함수 제어자를 이용하여 챕터9의 답인
좀비 레벨 2 이상일 때 이름 변경기능
좀비 레벨 20 이상일 때 DNA 변경기능을 만든다
챕터7 전
// 1.
function feedAndMultiply(uint _zombieId, uint _targetDna, string _species) public {
// 2.
// 3.
후
// 1. 이 컨트랙트 또는 상속된 컨트랙트 안에서만 사용되게 internal 함수로 변경
function feedAndMultiply(uint _zombieId, uint _targetDna, string _species) internal {
// 2. 좀비를 공격 시킬 때 쿨타임이 다 되었는지 확인하기
require(_isReady(myZombie));
// 3. 좀비를 공격하고 나서 쿨타임 주기
_triggerCooldown(myZombie);
챕터 8 답
//
modifier aboveLevel(uint _level, uint _zombieId) {
require(zombies[_zombieId].level >= _level);
_;
}
챕터 9 답
// 좀비 이름 임의로 바꿔주는 함수 / 좀비레벨이 2 이상인지 함수제어자로 확인함
function changeName(uint _zombieId, string _newName) external aboveLevel(2, _zombieId) {
// 사용자와 이름 바꾸려는 좀비의 주인이 같은지 확인
require(msg.sender == zombieToOwner[_zombieId]);
// 해당 좀비의 이름을 바꾸려는 이름(_newName)으로 변경
zombies[_zombieId].name = _newName;
}
// 좀비의 DNA를 임의로 바꿔주는 함수 / 좀비레벨이 20이상인지 함수제어자로 확인
function changeDna(uint _zombieId, uint _newDna) external aboveLevel(20, _zombieId) {
// 사용자와 이름 바꾸려는 좀비의 주인이 같은지 확인
require(msg.sender == zombieToOwner[_zombieId]);
// 해당 좀비의 DNA를 바꾸려는 DNA(_newDna)로 변경
zombies[_zombieId].dna = _newDna;
}
'솔리디티 > 크립토좀비' 카테고리의 다른 글
레슨 3 챕터 10, 11, 12 - view 함수의 가스 절약/storage와 memory의 가스 소모/반복문(for) (0) | 2022.02.17 |
---|---|
레슨3 챕터4, 5, 6 - 가스(gas) / 시간 단위(Time units) (0) | 2022.02.17 |
레슨3 챕터2, 3 - 소유 가능한 컨트랙트, 함수제어자(modifier) (0) | 2022.02.17 |
레슨3 챕터1 - 컨트랙트 불변성(Immutable) (0) | 2022.02.17 |
레슨2 챕터 10, 11, 12, 13 - 인터페이스 (0) | 2022.02.12 |
댓글