C언어의 포인터는 어떤 이점이 있을까요?
C언어는 프로그램 내에서 메모리를 할당 및 해제를 할 수 있지만 자바와 같은 언어는 그런 기능이 없다고 알고 있습니다.
그렇다면 왜 C언어에는 포인터 기능이 있고 이것이 어떤 장점(차이점)이 있는지 알고 싶습니다.
메모리 할당 및 해제를 잘해주면 실행 속도도 빠르고, 메모리를 효율적으로 사용할 수 있습니다.
자바같은 언어는 개발자가 해제를 할 수없기 때문에 언제 메모리를 해제할지 관리할 수 없습니다. 고로 메모리를 원하는 시점에 해제를 못하죠. 가비지 콜렉터가 계속적으로 불필요한 메모리를 확인하는 과정을 거치고요. 거기에 따른 리소스도 추가로 사용하고요. 그렇지만 메모리 할당 및 해제를 따로 개발자가 생각을 안하고 안전하기 때문에 개발 속도가 빠릅니다
C의 장점과 역사
예전에 80~90년대 시절에는 컴퓨터의 기능이 많이 안좋았었습니다. C언어처럼 메모리를 할당하고 해제하고 이런 것이 굉장히 중요한 이유가 바로 컴퓨터의 성능과 직결되기 때문입니다. 예전에는 데스크탑이 몇백메가도 안되었기에 메모리를 조금이라도 허투루 쓰면 엄청난 낭비었기 때문에 조금이라도 더 효율적으로 메모리를 사용하기 위해 메모리 할당과 해제를 민감하게 생각하고 코딩했었습니다. 이는 현대에도 C/C++이 가장 빠른 이유중 하나입니다. 메모리와 최적화를 극도로 신경쓰면서 만들 수 있어서이죠. 그래서 최적화가 굉장히 중요한 게임이나 여타 민감한 시스템들에서는 C나 C++를 주로 씁니다.
C의 단점과 자바의 장점
C의 단점은 메모리 할당의 여간 귀찮은게 아니라는 것입니다. 그래서 C 이후에 등장한 자바에서는 가비지컬렉터(쓰레기 청소부)가 알아서 안쓰는 메모리를 수거하도록 설계되었죠. 하나하나 모든 메모리에 대해 액세스는 없지만 가비지컬렉터 덕분에 메모리 할당을 극도로 최적화하지 않아도 되는 개발환경에서는 자바가 선호되기 시작했죠. 재미있는 점은 자바도 엄청 오래된 언어라 현시대에는 관공서와 은행 같이 조금 낡은 시스템들에서 주로 사용합니다. 우리나라는 워낙 자바만 사용해서 스타트업에서도 자바를 많이 쓰는데요, 미국에서 자바는 스타트업에서는 거의 안쓰입니다.
자바의 단점
자바는 c와 함께 boilerplate(프로그램이 돌아가기 위해 필요한 각종 문법들)이 너무 많아서 파이썬과 자바스크립트에 비해서 처음 배울 때 조금의 진입장벽이 더 있고, 나중에 실무에서도 조금 귀찮을 때가 있습니다. 대신 가비지컬렉터와 오래된 자바 라이브러리들은 오래된만큼 최적화를 엄청나게 거쳤기에, 자바의 속도는 언어들 중에 굉장히 빠른 편에 속합니다. (파이썬과 자바스크립트는 속도면에서는 하위권)
포인터를 접근할 수 있다면 개발자가 메모리 관리를 효율적으로 또는 최적화 할 수 있습니다.
자바의 경우 포인터가 없다고 말하지만 눈에 안보일뿐 내부적으로는 모든게 포인터로 되어 있다고 보면 됩니다.
자바는 메모리관리를 JVM에서 해주기 때문에 장점이 있어보이지만 실제적으로 메모리가 모자르게 되면 메모리 정리를 하게 됩니다.
이때 자바 프로그램이 일시적으로 멈추게 됩니다.
속도가 중요한 시스템이 아니라면 크게 문제가 아닐 수 있지만 서버에서 이런일이 발생하게 되면 엄청난 이슈가 되기도 합니다.