c언어와 자바와의 차이

.·2021년 4월 16일

JAVA

목록 보기
1/4

과거에 공부했던 언어들을 생각해보게 되었다.
c,c++,java,python,js 순으로 공부를 했었고, 언어에 대한 특성을 제대로 알지 못하고 선택했다는 것을 깨달았다.
입문 목적으로 - c,c++ , 웹프로그래밍 목적으로 - java,js , 딥러닝 목적으로 - python
이렇게 나눠질수 있을것 같은데, 왜 이런 목적일때는 해당 언어를 사용해야 했는지 언어의 특성과 관련하여 공부하는 시간을 가져보려고 한다.

c언어

  • 운영체제를 개발할 목적으로 만든 언어로 하드웨어를 제어하는 시스템 프로그래밍이 가능하다.
  • c언어는 이식성을 갖춘 언어로 기종이 다른 컴퓨터에서도 사용할수 있는 프로그램을 작성할 수 있다.(os에 따라서는 재사용이 어렵다)

실행과정

  • 컴파일러가 중간단계인 오브젝트 코드를 생성후에, 링커가 필요한 라이브러리들을 하나로 합쳐 최종 실행 가능한 파일로 생성한다.
    라이브러리의 형태가 정적 라이브러리의 경우 라이브러리를 실행파일에 포함시키므로 실행파일이 커지고 동적 라이브러리의 경우 런타임에 링크가 일어난다.

속도

  • 속도가 빠르고 바이너리 크기가 작다.
  • 이러한 특성 때문에 생산성보다 중요한 속도를 필요로 하는 임베디드, 모바일 계열, 시스템 프로그래밍에 주로 사용된다. 다만 수정 사항을 확인하려면 컴파일이 필요하며 디버깅이 어렵다.

언어

  • 절차지향 프로그래밍 언어이다.
  • 위에서 아래로 흐르는 것 처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 이다.
  • 흐름을 읽기는 좋지만 부분 수정할때도 전체 코드를 컴파일 해야 한다.

메모리 관리

  • 메모리 관리를 직접한다. 코드로 하드웨어를 제어 가능하다.
  • os레벨의 메모리에 직접 접근하기 때문에 free() 라는 메소드를 호출하여 할당받았던 메모리를 명시적으로 해제해 주어야 한다. 그렇지 않으면 memory leak이 발생하게 도고, 현재 실행중인 프로그램에서 memory leak이 발생하면 다른 프로그램에도 영향을 끼칠 수 있다.

java

  • 운영체제에 독립적인 언어로 전 세계 다양한 분야에서 사용하는 프로그래밍 언어이다.
  • jvm 위에서 실행 되므로 여러 os에서 실행 가능하다.

실행과정

  • 컴파일러가 바로 바이트 코드를 생성한다.
  • 바이트 코드는 jvm에서만 실행이 가능하다.
  • 런타임에 필요한 클래스들이 자바 가상기계에 링크되며 클래스 로더가 동적으로 필요한 클래스를 로딩한다.
    즉 컴파일된 클래스 파일이 자바 가상기계(JVM)에서 실행되어 플랫폼에 종속적인 코드를 갖지 않으므로 플랫폼이 달라져도 다시 컴파일 할 필요가 없다.

속도

  • 자바는 상대적으로 c언어에 비해 느리다.

언어

  • 객체지향 프로그래밍 언어이다.
  • 프로그램을 잘게 나누어 부품화 한 후 조립하는 형식으로 여러개의 클래스로 나누어 개발이 가능하다. 필요한 클래스만 수정해서 컴파일 할 수 있어 유지보수 측면에서 유리하다.
  • 캡슐화, 다형성, 상속 등의 특징이 있다.
  • 뛰어난 보안성 및 멀티스레드를 지원한다.

메모리 관리

  • GC라는 프로그램이 돌면서 메모리를 관리한다.
  • os 의 메모리 영역에 직접적으로 접근하지 않고 jvm이라는 가상머신을 이용해서 간접적으로 접근한다.
  • 메모리라는 까다로운 부분을 자바 가상 머신에 모두 맡겨 버리는 것이다.
  • 프로그램 실행시 jvm옵션을 주어서 os에 요청한 사이즈 만큼의 메모리를 할당받아서 실행하게 된다.
  • 할당받은 이상의 메모리를 사용하게 되면 에러가 나면서 자동으로 프로그램이 종료된다.
    그러므로 현재 프로세스에서 메모리 누수가 발생하더라도 현재 실행중인 것만 죽고, 다른 것에는 영향을 주지 않는다. 이렇게 자바는 가상 머신을 사용함으로써 os레벨에서 memory leak은 불가능하게 된다는 장점이있다.
profile
yi

0개의 댓글