728x90
C언어
- C언어의 등장
- 1980년대에 IBM이 개인용 컴퓨터를 만들어 보급하기 전에는 윈도우나 Mac같은 운영체제가 없었다
- 따라서 컴퓨터 산업 초기에는 주로 회사에서 사용하는 컴퓨터에 Unix 운영체제를 사용했다
- 그러나 유닉스에서 실행되는 프로그램은 하드웨어가 바뀌면 새로 개발해야 했다
- 이러한 불편함을 해결하고자 데니스 리치와 켄 톰슨은 B언어를 발전시켜, 1972년 C언어를 만들었다
- C언어는 low level 퍼포먼스를 위해 디자인된 프로그래밍 언어로, 기계어에 가깝다
- 따라서 에어컨이나 스마트 TV 등의 시스템 프로그래밍이나 운영체제(OS) 개발을 할 때 주로 사용한다
- C언어는 메모리를 적게 차지하고 빠르게 동작하기 때문에 메모리 공간이 부족한 곳에 주로 사용한다
C언어 특징
- 시스템 프로그래밍이 가능하다
- 운영체제를 개발할 목적으로 만든 언어이므로 하드웨어를 제어하는 시스템 프로그래밍이 가능하다
- 이식성을 갖춘 프로그램을 만들 수 있다
- 표준이 정의되지 않은 문접을 사용한 프로그램은 특정 컴파일러에서만 컴파일 될 가능성이 높으므로 이식성을 유지하기가 힘들다
- 하지만 C언어는 이식성을 갖춘 언어여서 기종이 다른 컴퓨터에서도 사용 가능한 프로그램을 작성할 수 있다
- 작고 효율적이다
- C로 짜여진 코드는 속도가 빠르고 바이너리 크기가 작다
- 이러한 특성 때문에 속도가 생산성보다 중요한 임베디드 혹은 모바일 계열, 시스템 프로그래밍 등에서 주로 사용된다
- 절차지향 프로그래밍 언어이다
- 절차지향 프로그래밍은 순차적인 처리가 중요하며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다
Java
- 자바는 객체지향 프로그래밍 언어(Object Oriented Programming)로, 1991년 썬 마이크로 시스템즈에서 개발했으며 현재는 오라클에서 관리하고 있는 언어이다
- 자바는 운영체제에 독립적인 언어로 전 세계 다양한 분야에서 사용하는 프로그래밍언어이며, 주로 웹 서버와 안드로이드 앱 개발에 사용된다
- 자바에는 Java API라고 하는 자바 시스템 제어를 위한 명령어가 있으며 무료로 배포된 자바 개발 도구(JDK)와 풍부한 Java API를 활용해 강력한 기능의 자바 프로그램을 작성할 수 있다
- 자바 프로그램은 바이트 코드 파일(.class)로 구성된다
- 이 바이트 코드 파일은 운영체제에서 바로 실행할 수 없고, JVM(자바 가상 기계)라는 번역기가 필요하다
- Java는 JVM을 통해 바이트 코드 파일이 다양한 운영체제에서 독립적으로 사용이 가능하다
- C는 리눅스, 윈도우, 맥 등 운영체제 별로 운영체제 위에서 바로 실행되지만, Java는 운영체제 위의 JVM에서 실행된다
Java 특징
- 여러 운영체제에서 실행 가능하다
- 자바로 작성도니 프로그램은 JVM 위에서 실행되므로 운영체제를 가리지 않는다
- 윈도우에서 개발된 프로그램을 수정하지 않고도 리눅스, 맥에서 바로 실행할 수 있다
- 객체지향 프로그래밍 언어이다
- 절차지향인 C와는 다르게 자바는 객체지향 프로그래밍 언어이다
- 자바는 객체를 만들고 이 객체들을 연결하여 더 큰 프로그램을 완성한다
- 메모리를 자동으로 관리해준다 (Garbage Collection)
- 자바가 메모리(RAM)를 자동으로 관리해주기 때문에 개발자는 메모리를 관리하는 수고를 덜고, 코드 작성에만 집중할 수 있게 되었다
- 무료 라이브러리가 풍부하다
- 무료로 다운로드해서 사용할 수 있는 오픈 소스 라이브러리가 풍부하기 때문에 프로그램 개발 기간을 단축한다
- 그래픽 사용자 인터페이스의 제작(GUI 설계), 데이터베이스 접근, 다중 스레드, 네트워크 프로그래밍 등은 모두 표준 라이브러리에서 지원한다
- 이 외에도 캡슐화, 다형성, 상속, 뛰어난 보안성, 멀티쓰레드 지원 등의 특징이 있다
C언어 vs Java
C언어 | Java | |
절차지향 vs 객체지향 | 절차지향 언어 | 객체지향 언어 |
처리 속도 | 상대적으로 빠르다 | 상대적으로 느리다 |
유지보수 | 어렵다 | 용이하다 |
용도 | 임베디드 또는 운영체제 구현 | 응용 SW, 안드로이드 앱 등 |
안정성 & 확장성 | 상대적으로 낮다 | 상대적으로 높다 |
주로 사용하는 개발환경 | 비주얼 스튜디오(윈도우 기준) | 이클립스(eclipse), 인텔리제이(IntelliJ) |
메모리 제어 | 메모리를 직접 조절하여 메모리 낭비가 적다 | 각각의 클래스로 인해 메모리 낭비가 높다 |
💡 절차지향은 데이터 중심으로 함수를 구현하며, 객체지향은 기능 중심으로 메서드를 구현하는 것이지, 이 둘은 반대 개념이라고 할 수 없다
참고)
https://unequaled-peach-7e5.notion.site/Java-C-c5fc8ee5b7bb493caaa0a456aca887b3
728x90
'야미스터디 > Backend' 카테고리의 다른 글
[Etc] Docker 📌 (0) | 2022.10.11 |
---|---|
[Etc] DTO 📌 (0) | 2022.09.28 |
[Etc] 좋은 개발자란 무엇일까요? 📌 ~ing (0) | 2022.08.28 |
[보안] 암호화, 해시함수 (0) | 2021.12.23 |
비전공자를 위한 이해할 수 있는 IT 지식 (0) | 2021.09.10 |
댓글