💡 핵심 인사이트
솔리디티(Solidity)는 이더리움 블록체인 위에서 돌아가는 앱(스마트 컨트랙트)을 만들기 위해 고안된 객체지향적이고 정적 타입(Statically Typed)의 고급 프로그래밍 언어입니다.
코드를 다 짜면 이더리움 가상 머신(EVM)이 이해할 수 있는 바이트코드(Bytecode)로 컴파일되어 전 세계 노드에 뿌려집니다.
Ⅰ. 솔리디티(Solidity)의 탄생과 철학
비트코인에도 '스크립트(Script)'라는 코딩 기능이 있었지만, 반복문(Loop)이나 복잡한 계산이 불가능한 매우 제한된 기능만 제공했습니다(튜링 불완전). 이더리움의 창시자인 가빈 우드(Gavin Wood)와 크리스찬 라이트위스너(Christian Reitwiessner) 등은 **"어떤 복잡한 논리라도 다 구현할 수 있는 튜링 완전(Turing-Complete)한 프로그래밍 언어"**를 만들어 이더리움을 세계의 컴퓨터로 만들고자 했고, 그 결과물이 2014년에 탄생한 솔리디티입니다.
Ⅱ. 솔리디티의 주요 문법적 특징
C++, 파이썬, 그리고 특히 자바스크립트(JavaScript)의 문법과 매우 비슷하게 생겨 웹 개발자들이 쉽게 배울 수 있습니다.
1. 컨트랙트 기반 (Contract-Oriented)
- 자바(Java)가
class를 중심으로 코딩하듯, 솔리디티는contract라는 키워드로 감싸서 코딩합니다. 하나의 컨트랙트는 블록체인 상에 배포되는 하나의 독립된 프로그램 주소가 됩니다.
2. 정적 타입 (Statically Typed)
- 코드를 실행하기 전(컴파일 타임)에 변수의 자료형(숫자, 문자, 주소 등)을 명확히 선언해야 합니다. 금융(돈)을 다루는 언어이므로 애매모호한 자동 형변환은 끔찍한 해킹으로 이어질 수 있기 때문입니다.
- 특수 데이터 타입: 다른 언어에는 없는
address(이더리움 지갑 주소)나mapping(해시 테이블)같은 블록체인 전용 특수 타입이 존재합니다.
3. 전역(Global) 변수의 존재
msg.sender: 이 함수를 실행하라고 요청한 사람의 지갑 주소. (결제자)msg.value: 이 함수를 호출하면서 같이 보낸 코인(이더)의 양.- 별도로 코딩하지 않아도 블록체인 네트워크의 상태를 읽어올 수 있는 막강한 환경 변수들입니다.
Ⅲ. 솔리디티 코드의 배포와 가스(Gas)의 제약
일반 파이썬 코드는 내 노트북 CPU를 공짜로 돌리지만, 솔리디티 코드는 전 세계 수만 대의 컴퓨터(노드) CPU를 빌려서 강제로 실행시킵니다.
- 가스비의 공포:
솔리디티 코드 내부에서 반복문(
for루프)을 10만 번 돌리는 무거운 코드를 짰다고 합시다. 이 코드가 EVM(이더리움 가상머신) 위에서 굴러가는 순간, 명령어 한 줄이 실행될 때마다 내 지갑에서 '가스(Gas)'라는 수수료가 현금으로 뭉텅뭉텅 빠져나갑니다. 만약 해커가 악의적인 무한 루프 코드를 배포해 네트워크를 마비시키려 해도, 금세 자기 지갑의 가스비(현금)가 오링 나서 코드가 강제 정지(Out of Gas 에러)되어 버립니다. - 개발의 덕목: 따라서 훌륭한 솔리디티 개발자는 '기능을 구현하는 것'에 더해, **"어떻게 하면 변수 용량을 줄이고 로직을 단축시켜 사용자가 낼 가스비(수수료)를 몇십 원이라도 아껴줄 수 있을까?"**를 극한으로 고민(최적화)해야 합니다.
📢 섹션 요약 비유: 솔리디티는 전 세계 수만 대의 컴퓨터가 동시에 알아듣고 똑같이 행동하게 만드는 **'절대 권력의 흑마법 주문서'**입니다. C언어나 자바와 비슷하게 생겼지만, 이 주문서를 한 번 낭독(실행)할 때마다 마법사(사용자)의 마나(가스비/현금)가 뭉텅이로 깎여나가기 때문에 최대한 짧고 명료하게 주문을 짜야 하는 독특한 문법 체계를 가집니다.