1. 각 언어별 특징 그리고 차이점을 설명하라.

제가 공부한 언어들만 물어볼거라고 생각해서 나열해보았습니다. 더 있지만 이 정도만…

C C는 시스템 프로그래밍 언어이다. 즉 운영체제, 언어처리계, 디버깅 등 소프트웨어 작성을 지원하는 프로그램을 구현하는데 사용된다. 이식성이 좋아서 조금만 수정해주면 여러 컴퓨터에서 사용이 가능하다. 위에서 예를 들었듯이 운영체제를 위한 언어라고 할 수 있는데, 유닉스 기반의 이눅스, 윈도우, MAC 등이 있다. DirectX나 openGL도 모두 C로 작성된 API이다. 공장 자동화 시스템, 산업용 로봇, 가전제품 등에서 사용된다.

C++ C언어의 기능을 포함한 객체지향언어다. C의 라이브러리를 그대로 사용할 수 도 있다. C에 비해 확장된 기능도 있지만, 제약이 걸린 기능도 있다. 예를 들어 C++은 전역변수를 여러 번 선언하면 에러가 발생하고 C는 그렇지 않고, C는 문장 상수가 자동으로 정수로 바뀌는데 C++은 그렇지 않다. 게다가 C는 main함수를 호출할 수 있지만, C++은 안된다. C++은 레지스터 메모리에 주소를 할당할 수 있다. 요즘은 Visual Studio.net 개발환경에 통합되어 있어서 유료이긴하다. 게임처럼 빠른 프로그램 구현에 가장 많이 사용된다.

C# C#은 .net 플랫폼 기반의 소프트웨어를 개발하는 도구 중 하나이다. 네트워크 환겨에서 개발자의 생산성을 증대시키고, 작성해야할 코드를 줄이는 기술이 포함되어 있다. ASP.NET, XML.NET, MOBILE 등을 빠르게 개발가능하다. 특히 ASP.NET에서 효과적이다.

CLR(Common Language Runtime)이라는 특징이 있는데, OS위에서 .NET App을 실행할 수 있게 해주는 놈이다. 닷넷 환경에서 어떠한 언어로 개발해도 컴파일된 파일은 같은 모양을 가진다. 자바로 따지면 JVM이다. 자바는 .java가 .class로 바뀌고 JVM에 로딩되어 실행되는 구조이다. 자바의 바이트 코드를 하나씩 OS의 기계어로 번역하는 것. CLR을 사용하므로써 .NET을 지원하는 모든 언어가 객체지향적인 프로그래밍 모델을 자유롭게 사용할 수 있게 도와준다. CLR은 파일로더, 메모리 관리자, 보안 시스템, 스레드 풀등 개발에 필요한 요소들을 가지고 있는 놈이다. 닷넴 프레임워크는 CLR + FCL(프레임워크 클래스 라이브러리)로 되어 있는데 후자는 모든 어플리케이션 모델에서 사용 가능한 객체 지향적인 API 집합을 제공한다. Exception, Thread 등 모두 제공중이다. Windows 프로그래밍에 대표적으로 많이 사용되고 있다. 최근에는 자마린이라는 놈이 나와서 안드로이드를 C#으로 구현할 수 있도록 도와주기도 한다.

Java 현재 가장 많이 사용되는 언어이다. Object라는 최상위 클래스로부터 여러 클래스가 상속되어 구현되어 있다. 다중 상속은 지원하지 않는다. 가비지 컬렉터를 사용하여 메모리 누수 걱정이 없다. 인터넷을 고려하고 네트워크 언어로 개발되었고, 이식성과 호환성이 뛰어나 DB를 쉽게 처리할 수 있다. 멀티 쓰레드 지원. JSP로 웹 프로그램도 정복. 동적 로딩 지원. 오픈소스 라이브러리가 풍부. 속도가 느리다는 말이 있지만, 차이가 많이 줄어들어서 가장 많이 사용되는 언어가 될 정도.

자바의 바이트코드는 JVM이 실행하는 명령어의 형태이다. 이를 꼭 이해할 필요는 없다. 이걸 이해하는 것은 C/C++에서 어셈블리어를 이해하는 것도 같다. 이는 어셈블리와 소스 코드의 중간 코드이다. 바이트코드는 인터프리터 언어이다. 소스코드를 바이트코드로 변환하는 과정이 컴파일과정인데, 이 과정이 있어서 인터프리터 언어다. 컴파일 언어다라는 말이 나온다. 참고로 파이썬도 바이트코드를 생성한다. pyc파일이 바로 파이썬 바이트코드이다. 루비도 있다. 안드로이드도 자바 기반이며, 전자정부 프레임워크의 뼈대인 Spring도 자바를 기반으로 하고 있다.

Ruby 루비는 스크립트 언어나 동적 언어이고, 간단한 문법구조를 가진 언어이다. 일본의 마츠모토 유키히로를 중심으로 개발된 오픈소스 소프트웨어이다. 웹을 시작으로 다양하게 사용되고 있고, 간단한 문법구조를 강점으로 가진 객체지향 스크립트 언어이다. 루비 패키지 관리 시스템인 RubyGems나 루비판 Make같은 Rake같은 툴도 탑재되어 있다. 현재는 2.3.2버전까지 나와있다. 2.0 이전과 이후가 문법구조가 조금 다르지만, 참고하여 사용하면 별 불편함은 없다. 이전에는 UTF-8 인식을 위한 설정이 필요했지만 2.0.0이후는 기본적으로 UTF-8로 인식되도록 설정되어 있다. irb는 대화 형식으로 루비 동작이 확인 가능하다. 이걸 대화형 인터페이스라고 한다. 기본 루비를 제외하고 CRuby나 JRuby 등으로 여러 언어와 환경에 맞도록 제작된 루비들이 있다.

다른 언어도 마찬가지이지만, 워낙 오픈 소스라는 말이 어울리는 언어로 많은 사람들이 루비와 관련된 질문이나 궁금증 버그 리포트 등을 모두 공개하고 공유하고 있다. 쉬운 프로그램을 만드는 프로젝트부터 조금 난이도가 있는 문제나 이슈들도 유투브나 개인 블로그 또는 스택오버플에 공유하는 사람들이 많다. 또한 미국이나 많은 나라에서 첫 프로그래밍 언어로 아직도 루비를 최고로 꼽고 있다.

Ruby와 함께 많이 언급되는 것이 하나 있다. 바로 Rails 이다.이는 WAF로 여러 장점이 있다. 생산성, 유지보수성, 최신 기술 트랜드에 대응하기 등의 장점이 있고 배우기도 다른 프레임워크에 비해 쉽다. 하지만 Ruby보다는 Rails에 치중되어 있는 듯한 느낌이 들 때도 있어서 꺼려하는 사람들도 있다. 커스터마이징의 문제도 있지만 용도에 따라 잘 사용하면 큰 문제는 없어보인다. 최근에는 Rails5까지 배포된 상태이다. 아직 안정화가 되지 않았지만, 많은 장점이 추가되었다. 자바와 비교를 해볼 때, 자바에 비해 프로그래머가 코드를 작성하는 속도가 2~5배 빨라서 프로그래머를 위한 언어라고 부를 수 있지만, 프로그래밍 속도는 아직 자바에 비해 느리다.

Python 원래 교육용으로 설계되어 있어서, 읽기 쉽고 효율적인 코드도 간단하게 쓸 수 있도록 하려는 철학이 구석구석에 있다. 동적 타이핑 언어이고 변수는 모두 값의 참조형으로 이루어져있다. 그리고 라이브러리와 통합 환경이 함께 제공되어 XML 처리, HTTP, FT, 메일, CSV, DB 접속, 등등이 제공된다. 행렬 연산, 이미지 처리용 등도 많이 제공된다. 이전에는 한글이 지원되지 않았지만 2.0 이후에 다국어를 지원중이다. 가벼운 프로젝트에 사용되는 Flask와 대부분 사람들이 사용중인 Django 등의 프레임워크가 있다. 루비와 라이벌 구조를 가지기도 하는데, 가장 큰 차이라고 한다면 루비는 순수 객제지향 언어이지만 파이썬은 하이브리드형 객체지향 언어라는 점입니다.

php 최근에는 단점이 부각되고 있지만, 과거에 가장 많이 사용된 웹 서버와 가장 어울리는 웹 용 언어이다. 어느 나라에서는 아직도 가장 많이 사용된다. php는 주로 리눅스에서 아파치 웹 서버와 짝을 이뤄 사용한다. 다양한 데이터베이스를 지원하는 것도 특징이다. 공짜이다. 사실 문법도 어렵지 않다. 빠른 생선성, 저렴한 유지비용이 장점이다. 하지만 여러 단점이 있습니다. 보안에 취약한 것도 있고, 해킹의 대상자가 되기 쉽습니다.

JavaScript 정적인 HTML에 동적인 기능을 추가하기 위해 만든 스크립트 언어이다. 특정 운영체제에대한 제한이 없다. 하지만 HTML 코드 아에 포함되어 있어서 사용자가 복사하여 재사용이 가능하고 이 때문에 보안성이 없다. 하지만 서버의 부담을 줄이기 위해 최적화 작업이나 동적 화면 구성에 효과적으로 사용될 수 있다. 이벤트 중심 언어이다. jQuery라고 JS를 기반으로 한 프레임워크가 있는데, 가볍고 빠르고 간결한 오픈소스 스크립트 라이브러리가 있다. 하지만 버전에 따라 고쳐줘야하는 단점이 있다.

CSS CSS는 Cascading Style Sheets 의 약자로 HTML, XHTML, XML 등의 문서를 꾸밀 때 사용되는 스타일 시트 언어이다. 글꼴이나 배경색, 너비와 높이, 위치 등을 지정학나 브라우저마다 그리고 장치마다 다르게 표시될 수 있도록 지정할 수 있다. 원래는 HTML안에 style 형태로 넣어줬는데, 어느순간부터 분리가 되서 장점을 극대화 시켜주었다.

HTML 웹 문서를 만들기 위해 사용하는 언어중 하나이다. 하이퍼텍스트를 작성하려고 개발되었다. 문자의 글자크기, 색, 모양 등을 정의하는 명령어로 홈페이지를 작성하는 데 사용된다. 각각 명령어를 태그라고 한다. 별도 컴파일러가 필요없이 웹 브라우저에서 해석이 가능한 사용하기 쉬운 언어다. img, br같은 걸 제외하고는 시작과 끝이 있는 태그로 이루어져있고, 이 둘울 합쳐 Element라고 한다. 대소문자를 구분하지않고 사용된다. enter같은게 무의미하다. br이 있으니까. spacebar도 한 번만 인식한다.

XML HTML같은 마크업 언어로 구조화된 문서를 전송 가능하도록 설계된 마크업 언어이다. 태그만 사용하는 HTML과 달리 속성, 개체를 선언하고 자료를 구조적으로 표현할 수 있다. HTML은 Element가 지정되어 있지만 XML은 정의할 수 있다. 웹 기반 앱의 경우 XML을 사용해서 가능한 모든 정보를 클라이언트에 저장하여 웹 부하를 줄일 수 있다. 여기저기서 XML을 지원하고 있다.

Ajax 이는 쉽게 말해서 JS를 통해 서버에 데이터를 요청하는 놈이다. JS를 통해서 이뤄져서 페이지에서 리로딩을 할 필요가 없다. 그래서 빠르다. 비동기이기 때문에 요청을 보내도 계속 프로그램은 돌아간다. HTTP 요청을 보낸다. XML은 JS에서 사용하기 불편하기 때문에 JS로 서버에 요청을 보낼 때는 주로 JSON을 많이 쓴다.

출처 : https://m.blog.naver.com/potter777777/220784481760