🔥 Mojo의 struct는 정적으로, runtime중에는 요소들을 추가할 수 없음 (del, change value 등이 runtime 중에는 불가능) 유동성을 조금 포기하는 대신, 속도와 안정성 등의 이점을 얻음.현재 Mojo는 class가 없으며, 추후 구현이 될 예정이라고 함.
structMyCar:# Struct와 class의 차이점2:
# : struct는 명시적으로 var, let 등을 통해 구조체 내부의 변수를 선언해줘야 함
varcolor:Stringvarbrand:Stringvaryear:Intvarprice:Float32fn__init__(inoutself,color:String,brand:String,year:Int,price:Float32)->None:self.color=colorself.brand=brandself.year=yearself.price=pricefn__lt__(self,other:MyCar)->Bool:returnself.price<other.pricefnmain():car1:MyCar=MyCar("red","BMW",2020,100.0)car2:MyCar=MyCar("blue","Benz",2019,200.0)print(car1<car2)# print(car1 < 1) # Error
2. Struct Member Variable
🔥 struct는 명시적으로 var, let 등을 통해 구조체 내부의 변수를 선언해줘야 함
3. Type Specify
🐍 파이썬의 경우 타입 어노테이션을 지원하나, 강제성이 떨어지는 hint에 가까움
🔥 Mojo의 Type Checking은 강제성이 있음. 그러므로, 각 변수의 데이터타입을 명확하게 확인하고, 타입이 다른 변수끼리 연산을 시도하면 에러를 발생시킴. Struct는 하나의 타입을 만들 수 있는 것과 같으며, 그 타입간의 연산방식을 정의할 수 있음.
4. Int vs int
Int는 정수형을 의미하는 데이터 타입을 의미
int는 정수형으로 변환하는 함수 (Mojo에선 사용 불가)
이렇게 Int를 설계한 이유: 1) 시스템 프로그래밍 시에 투명하고 신뢰가능하게 하드웨어와 통신하기 위해 (굳이 JIT 컴파일러를 사용하지 않아도 되도록) 2) 파이썬의 int와 혼동을 하지 않으면서 Mojo의 Int를 사용하기 위해 3) 파이썬의 int와 마찬가지로 Mojo의 Int는 Mojo의 Struct를 기반으로 설계됨.