function_mint(address to, uint256 tokenId) internalvirtual{
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
둘의 차이는 safeMint의 경우 mint 하려고 하는 address가 실제로 존재하는지 체크 하는 로직이 구현되어있다.
_safeMint가 실행 되면 토큰이 전송된 후에 _checkOnERC721Received 함수가 호출되고 정상적으로 이루어지지 않을경우에는 트랜잭션을 되돌리게 됩니다.
function_safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internalvirtual{
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
function_checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) privatereturns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
returntrue;
}
}
Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다(위키피디아)
POJO의 필수 요소로는 가볍고, 유연하고, 간단명료 함이 있다.
장점 :
특정 프레임워크에 종속되지 않은 프로그래밍.
모든 java 프로그램에서 사용이 가능하다.
특정 프레임워크에 종속되지 않기 때문에 테스트가 자유롭다.
규칙
멤버변수의 접근자는 private
멤버 변수마다 getter/setter 가 존재
getter/setter 메소드의 접근자는 public
POJO 클래스는 가독성과 재사용 성을 높이기 위해 객체를 정의하는 데 사용되므로 Bean과 유사합니다. Bean에는 몇 가지 제한이 있지만 POJO 파일에는 특별한 제한이 없다는 유일한 차이점이 있습니다.