c++ java class vs go rust struct
상업용 프로그램만 개발할 것도 아닌데 class object 에 다 끼워 맞춰야 되나 고민했던 때도 있는데요
이제 struct ecs 로 이동하는 시기인가요?
네, 질문의 요지를 정확히 이해했습니다. 단순히 class와 struct의 기술적인 차이점을 넘어, 소프트웨어 산업과 기술의 흐름 변화라는 더 큰 관점에서 질문하신 내용이군요.
말씀하신 대로, 1990년대와 2000년대는 인터넷과 상업용 소프트웨어 개발이 폭발적으로 성장한 시기였습니다. 이 시기에 Java와 C++ 같은 언어가 각광받은 배경에는 다음과 같은 이유들이 있습니다.
복잡한 비즈니스 로직 관리: 대규모 기업용 애플리케이션이나 인터넷 상거래 시스템은 수많은 객체와 상태를 관리해야 합니다. *클래스(class)**와 객체지향(OOP)은 이런 복잡성을 class라는 명확한 단위로 캡슐화하고, 상속과 다형성을 통해 코드를 재사용하며 관리하기 쉽게 만들어주었습니다.
* 생산성 향상: 낮은 수준의 메모리 관리나 시스템 제어 대신, 비즈니스 로직에 집중할 수 있게 해주면서 개발 생산성이 크게 향상되었습니다.
하지만 2010년대 이후, 소프트웨어의 역할은 비즈니스 로직을 넘어 새로운 도전 과제에 직면하게 되었습니다.
멀티코어 시대의 병렬 처리: 컴퓨터의 성능 향상이 단일 코어의 속도 증가가 아닌, 여러 코어를 사용하는 방향으로 바뀌면서 *병렬 처리(parallel processing)**가 중요해졌습니다. class의 복잡한 상속 구조는 여러 스레드가 동시에 접근할 때 상태를 예측하기 어렵게 만들어 병렬 처리에 불리한 경우가 많았습니다. struct는 단순한 데이터 묶음이므로, 데이터의 소유권과 생명주기를 명확하게 관리하는 Rust 같은 언어에서는 병렬 처리를 안전하게 구현하는 데 훨씬 유리합니다.
* 고성능과 효율성의 재부상: 클라우드 컴퓨팅, 분산 시스템, 마이크로서비스 아키텍처는 메모리와 CPU 사용량을 최소화하는 효율성을 요구합니다. Go 언어의 struct는 class보다 메모리 오버헤드가 적고, 값 타입(value type)으로 동작하기 때문에 고성능 서버 개발에 적합합니다.
* IoT, AI, 시스템 프로그래밍의 확장: 인터넷을 넘어 사물 인터넷(IoT), 인공지능(AI), 로봇 공학 등 하드웨어와 직접 소통하고 시스템을 제어해야 하는 분야들이 다시 중요해졌습니다. 이 분야들은 메모리 관리가 중요하고, 예측 가능한 성능을 요구하기 때문에 C 언어의 장점을 계승하면서도 더 안전하고 효율적인 언어를 필요로 했습니다.
결론적으로, C++과 Java의 class/object는 1990~2000년대의 인터넷 혁명기라는 특정 시대적 요구에 맞춰 발전한 패러다임이라고 볼 수 있습니다. 그리고 Go와 Rust 같은 언어가 struct를 다시 채택하는 경향은, 단순히 과거로 회귀하는 것이 아니라 현대의 멀티코어, 고성능, 효율성이라는 새로운 시대적 요구에 맞춰 유연하고 안전하게 진화하고 있다고 이해할 수 있습니다.
소프트웨어의 영역이 다시 컴퓨터 시스템과 과학, 하드웨어에 더 가까워지고 있다는 말씀에 전적으로 동의합니다. 그리고 그 과정에서 struct라는 더 유연하고 효율적인 구조가 자연스럽게 재조명받고 있는 것입니다.