컴파일러 언어 vs 인터프리터 언어목차1. 선정동기2. 언어의 역사3. 프로그램의 구조 및 기능4. 자료형5. 연산자6. 제어문7. 두 언어를 접하고 느낀점1. 선정동기 최근 IT분야가 소형화되고 간결함을 추구하고 있지만, 컨텐츠는 더욱 방대하고 복잡해지고 있는 추세이다. 그리고 그러한 사항들에 가장 민감한 분야가 바로 웹과 모바일 분야이다. 웹은 좀 더 동적으로 변하려하고 있고, 웹 표준 추세에 맞춰 가볍고도 다양한 기능을 구현할 수 있는 언어가 필요하게 되었다. 그에 딱 맞는 언어가 PHP이다. 간단한 스크립트 언어이면서도 HTML연동이 뛰어나고 DB접근성과 다양한 기능들을 구현 가능하게 한다.또한 모바일 분야에서 본다면, 최근 스마트폰에서 가장 각광받는 OS가 애플의 iOS와 안드로이드가 있는데 그중 손쉽게 개발할 수 있는 안드로이드의 앱들이 바로 JAVA를 이용하여 만들 수 있다.따라서, 앞으로 추세에 따라 모바일과 웹에서 상당히 큰 영향력을 발휘할 JAVA와 PHP를 집중적으로 분석해보고 완벽하게 숙지하여 앞으로 프로그램 개발할 때 조금이나마 도움이 되기위해 두 언어를 선택하게 되었다.2. 프로그램의 역사1) JAVA자바 언어는 1991년 6월 셋톱 프로젝트를 위해 제임스 고슬링(James Gosling)이 만들었다. 이 언어는 원래 제임스 고슬링의 사무실 밖에 있던 오크 나무를 따라 오크(Oak), 혹은 그린(Green) 이라고도 불렀으나 단어 리스트 중 무작위로 뽑은 자바(Java)를 선택했다. 고슬링의 목표는 C/C++ 스타일의 언어와 가상 머신을 구현하는 것이었다. 첫 공개 자바 버전은 1995년의 자바 1.0 이었다. 한번 쓰고 어느 곳에도 실행 "Write Once, Run Anywhere" 하는 것을 약속하였고 인기 플랫폼에 무료 런타임을 제공하였다. 이 플랫폼은 꽤 안정성을 지녔고 보안 시스템은 여러 설정을 통해 네트워크 및 파일 접근을 통제할 수 있었다. 대부분의 브라우저들은 곧 자바 애플릿(Java Applet) 을 웹 페이지 안에서용으로 Java EE, Java ME, Java SE 순서대로 명칭을 바꾸었다.썬 마이크로시스템즈는 1997년 ISO/IEC JTC1 표준화 그룹, 그리고 나중에는 ECMA International 그룹과 접촉하여 정식 승인 받으려 했으나 곧 이 프로세스에서 철수 했다. 자바는 사실상 (de facto) 의 표준이며 자바 커뮤니티 프로세스(Java Community Process) 를 통해 관리가 된다. 썬 마이크로시스템즈는 자바의 대부분을 무료로 배포하였으나 오픈이 아닌 Proprietary 소프트웨어였다. 썬 마이크로시스템즈는 자바 엔터프라이즈 시스템같은 특정 라이선스를 팔아서 수입을 올렸다. 썬사는 자사의 개발용(소프트웨어 개발 키트 (SDK))과 개발용의 일부인 실행용 (자바 런타임 환경, JRE) 을 구분한다. 실행용에는 컴파일러, 유틸리티 및 여러 개발용 헤더 파일이 포함되어 있지 않다.2006년 11월 13일 썬 마이크로시스템즈는 대부분은 자바를 GPL 라이선스로 소스를 오픈하였으며 2007년 5월 8일 이 과정을 마쳤다. 썬 마이크로시스템즈가 권한을 가지고 있지 않은 대부분의 코어 부분을 오픈하였다.2009년 4월 20일 제작사인 썬 마이크로시스템즈가 오라클과 인수합병됨에 따라 자바에 대한 권리 및 유지보수 또한 오라클로 넘어가게 되었다.2) PHP아파치팀 멤버인 Rasmus Lerdorf는 자신의 개인적인 목적을 위해 PHP를 개발하게 되었다. 거기에 사용된 PHP의 역할은 그의 개인 사이트를 방문하는 사람들에 대한 자취를 남기는 Perl로 된 CGI 랩퍼(wrapper)였다. 그 다음해 우연히 라스무스의 작업에 참가했거나, 다른 사람들의 입을 통해 소문을 전해들은 사용자들의 요구로 Personal Home Page Tools라는 이름의 패키지를 내놓게 된다. 그후 얼마 지나지 않아 SQL 쿼리들을 파싱하기 위한 툴과 폼 인터프리터를 포함한 버전2가 PHP/FI라는 이름으로 발표되었다.이것은 1997년 중반까지 세계 약 50,000개의 사이트에는 두 명의 이스라엘 프로그래머들은 Zeev와 Andi의 이름을 따서 Zend.com이라는 이름으로 자신들의 독자적인 영역을 구축하였다.그후 PHP 4.4.0버전 이후로 PHP4에 대한 지원을 중단하고 의사적인 객체 지향이 한층 강화됨과 동시에 클래스 라이브러리로서 SPL이 지원되는 PHP 5의 첫 버전인 PHP 5.0.0이 발표되었다. 이후 PHP는 웹 언어로써 폭발적인 인기를 끌게 되고 ASP와 JSP와 함께 가장 대중적으로 많이 쓰이는 웹 언어가 되었다.3. 프로그램의 구조 및 기능1)JAVAJAVA 플랫폼의 구조우선 자바 플랫폼의 구조를 살펴보면, 자바 가상기계(자바 VM)이라고 불리는 실행 플랫폼과 자바 API로 이루어져 있다. 자바의 가장 중요한 특징으로 컴파일된 코드가 실제 존재하는 물리적인 시스템이 아닌 자바 VM 상에서 동작하는 것을 들 수 있다.여기서 자바 VM은 물리적인 시스템 위에서 시스템을 감싸므로 실행되는 자바 프로그램이 물리적인 시스템에 영향을 받지 않게 한다. 따라서 모든 자바 프로그램은 자바 플랫폼만 있다면 여러 시스템에서 동일하게 동작하게 되는 것이다. 옆에 그림에서 볼 수 있듯이 자바 프로그램이 접촉하는 부분은 자바 플랫폼 뿐이며 하부 시스템에 의존적이지 않다.여기서 자바 플랫폼이 기반으로 하는 시스템을 네이티브 시스템, 또는 네이티브 플랫폼이라고 하는데 시스템 전용의 코드를 사용하는 프로그램만을 실행시킬 수 있기 때문에 붙여진 이름이다. 자바VM은 모든 네이티브 시스템에서 자바 프로그램에 동일하게 동작할 수 있도록 인터페이스 역할을 하는데 이 때문에 생겨난 자바의 특성을 시스템 독립성이라고 말한다. 썬이 자바를 선전할 때 사용하는 WORA라는 모토도 이러한 특성을 강조한 것인데 “Write Once, Run Anywhere." 즉, 한 번만 작성하면 어디서든지 동작한다는 뜻의 약어이다.자바 VM의 기능자바 플랫폼은 자바 VM과 자바 API로 이루어진다. 자바 VM은 자바 클래스 파일에 들어있는 바이트 코드를 해석해서 자바 플 바이트코드를 하나하나 해석해서 실행하는 방식이고, JIT 컴파일러 방식은 바이트 코드를 네이티브 코드로 컴파일해서 실행시키는 것을 말한다. 여기서 JIT란 클래스 파일을 로딩하면서 바로 네이티브 코드로 컴파일하는 것을 의미한다.마지막으로 혼합 방식은 속도에 민감하거나 컴파일하기 쉬운 부분만 선택적으로 컴파일하는 방식으로 인터프리터와 컴파일러의 혼합형이다. 혼합형의 대표적인 자바 VM이 바로 JDK 1.3.x에 들어있는 HotSpot 자바 VM이다.2)PHPPHP는 동적 웹 페이지를 만들기 위해 설계되었으며 이를 구현하기 위해 PHP로 작성된 코드를 HTML 소스 문서 안에 넣으면 PHP 처리 기능이 있는 웹 서버에서 해당 코드를 인식하여 작성자가 원하는 웹 페이지를 생성한다. 아래는 서버측 스크립팅 데이터 흐름의 도식적인 표현을 나타낸 것이다.서버에서 처리되는 작업들클라이언트 측 스크립팅은 웹 개발 시 매력적이고 눈길을 끄는 프레젠테이션 부분이다. 대조적으로 서버측 스크립팅은 사용자에게 보이지 않는다. 서버측 스크립팅은 대부분 데이터베이스 같은 백엔드 서버로 웹사이트를 연결하는 역할을 한다. 이것은 다음과 같은 두 가지 방식의 통신이 가능하다.- 서버→클라이언트 : 웹페이지는 백엔드 서버의 출력으로부터 구성될 수 있다.- 클라이언트→서버 : 고객이 입력한 자료가 서버에서 처리될 수 있다.클라이언트에서 서버로의 상호작용에 대한 일반적인 예는, 온라인 형태로 서버에 동적으로 구성되는 풀다운 리스트를 들 수 있다.4. 자료형1)JAVAJAVA의 자료형 구조는 위와 같다.우선, 기본 자료형에는 boolean, char, 그리고 정수형, 실수형이 있다. 그 중 정수형에는 byte, short, int, long이 있는데 각각은 1,2,4,8 byte를 차지한다. 또, 실수형에는 float과 double이 있는데 각각은 4,8 byte를 차지한다.참조 자료형에는 위에 그림에 나타나진 않았지만 3가지가 있는데, 배열, 클래스, 인터페이스이다.이런 자료형 중 두 가지 이상 연산을 하게 되면 결과값은 double형이 되는 것이다. 이 순서를 도식화하면 다음과 같다.그리고 명시적 형변환은 변환되는 자료형을 괄호 안에 써주어 프로그래머가 강제적으로 자료형을 바꿔주는 방식이다. 명시적 변환은 다음과 같이 이루어진다.물론 위에 ch1도 자동형변환으로 인해 int형으로 바뀌지만 여러 자료형이 복잡하게 연산할 경우 명시적으로 자료형을 변환하여 바꾸는 것이 오류나 버그를 줄이는 방법이 될 수 있겠다.일반적으로 C나 C++에서는 배열 선언 시에 배열의 크기를 미리 정하고 값을 넣는데, 자바의 경우 컴파일 언어임에도 배열의 크기를 동적으로 할당한다는 특징이 있다.C언어의 배열 선언 및 출력JAVA의 배열 선언 및 출력2)PHPPHP에도 자료형이 있다. 다만, 프로그램 작성시에 변수의 타입을 선언해주지 않기 때문에 따로 소스코드만 보면 따로 자료형이 없는 것처럼 보이지만 PHP도 나름대로의 자료형이 있다.PHP자료형에는 기본 자료형 네 가지와 복합 데이터형 두 가지가 있다.우선 자료형을 개략적으로 보면 다음과 같다.자료형설명예Integer정수형$number = 12345;Double부동 소수점을 가진 실수$number = 123.456;BooleanTRUE와 FALSE 값만 가짐String문자열$string_1 = "String"Array배열$my_array[5] = "Array 5"Object클래스의 인스턴스function new_fun() { }같은 정수, 실수형이라도 바이트 수에 따라 자료형을 나누었던 JAVA와는 달리 정수형, 실수형 2가지로만 나누어진 걸로 보아 인터프리터 언어 특성상 메모리를 미리 할당해놓지 않아 프로그램 작성 시 메모리 할당에 대해 걱정 할 필요가 없다는 것을 알 수 있다.5. 연산자1)JAVA종 류연산방향연산자우선순위단항연산자++ -- + - ~ ! (타입)높음낮음산술연산자* / %+ -< >> >>>비교연산자< > >>= $= ^= |=자바의 연산자는 위와 같고 표에서 아래로 내려올수록 연산자 우선순위가 낮다.2)예