2 번째 수정본 소스 보기 : Perl/Java프로그래머를위한Perl소개
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/Java프로그래머를위한Perl소개 는 읽기 전용 페이지입니다.
* 원문: [http://kevinboone.net/javaperl.html An introduction to Perl for Java programmers -- Kevin Boone's Web site] * 이하의 내용은 원문의 내용 중 코드 비교 부분을 중점으로 요약 == # 개요 == Perl과 자바는 많은 부분이 비슷하고, 많은 부분이 다르다. 둘 다 절차적이고, 비슷한 키워드와 구조를 가지고 있고, 기능은 서브루틴(메쏘드,함수)으로 분리되고, 객체지향과 예외처리, 패키지를 지원한다. 반면 펄은 문법이 매우 유동적이고, 기본 언어의 기능이 자바보다 훨씬 많다. 유동적인 문법이란 말은 펄은 같은 일을 하는 데 여러 가지 다른 방법을 지원한다는 뜻이다. 다음과 같은 자바 코드가 있다면, {{{#!vim java if (!test) { throw new Exception ("aargh"); } }}} 펄에서는 똑같이 다음과 같이 쓸 수 있다: {{{#!vim perl if (!test) { die ("aargh"); } }}} 이것은 자바 버전과 매우 유사하다. 하지만 이것은 다음과 같이 쓸 수도 있다: {{{#!vim perl unless (test) { die ("aargh"); } }}}
unless
는 '~가 아니라면'의 뜻이다. 그러나 더 보편적으로, 숙련된 펄 해커들은 다음과 같은 식으로 쓸 것이다: {{{#!vim perl test or die ("aargh"); }}} 왜 자바로는 똑같이 압축된 형태로 쓸 수 없는가? 자바는 문법 구조가 매우 경직되어 있다. 첫째로 논리 연산자 AND(&&)나 OR(||)는 불리언 타입을 갖는 피연산자에만 쑬 수 있다. test는 여기 해당된다고 가정해도 throw에서는 값을 얻을 수 없어서 논리값 비교에 쓸 수 없다. 두번째로 논리 연산자들로 구성된 구문은 그 자체가 불리언 타입을 반환해야 한다. 셋째로 논리 비교식은 독립적인 구문으로 존재할 수 없다.
if (x || y) {};
는 괜찮지만
x || y;
는 불가능하다. 펄의 이러한 문법의 유연함이 더 좋은지 나쁜지는 스스로 판단할 문제이다. 펄의 문법은 매우 빈번한 연산을 짧은 형태로 표현할 수 있게 해 주는 반면 종종 펄 프로그래머가 아닌 사람들이 읽을 수 없게 된다. 기본 언어의 기능을 비교하면 펄이 자바보다 훨씬 풍부하다. 이것은 펄이 더 많은 일을 할 수 있다는 뜻이 아니라, 단지 기본 언어가 더 많은 일을 할 수 있다는 뜻이다. 자바의 철학은 언어 중추는 매우 간단하게 유지하고 다른 모든 기능을 표준 클래스 라이브러리에 넣는 것이었다. 따라서, 예를 들어, 펄은 연관 배열
을 언어의 일부로서 지원한다. 자바는 java.util 패키지에 있는 클래스들을 통하여 지원한다. 펄은 정규표현식을 프로그램 구문에 직접 적을 수 있는 반면 자바는 정규식이 클래스에 캡슐화되어 있을 것을 기대한다. 어느 쪽이 더 좋고 나쁜 건 아니며 그저 다를 뿐이다. == # 기본 요소 == === # 프로그램 구조와 철학 === * 둘 다 절차적이다. 프로그램은 구문(statement)들로 구성되고, 이 구문들은 컴퓨터가 어떤 순서대로 어떤 동작을 수행하도록 지시한다. 구문은 {...}을 사용하여 그룹지어지고, 세미콜론(;)으로 끝난다. * 펄의 문법은 자바와 매우 유사하다. 자바의 키워드들 중 많은 것이 펄에도 있다. 그러나 펄은 문법적으로 매우 유연하다. * 펄에도 객체 지향적인 특징이 있지만 옵션이다. 자바와 달리 전혀 객체 지향을 쓰지 않고도 프로그램을 작성할 수 있다. * 펄은 가비지 컬렉션이 있으며, 개발자가 메모리 관리에 관여하지 않도록 한다. 자바와 달리 스코프를 벗어나도 가비지 컬렉터에 의해 회수되지 않는 오브젝트를 정의할 수 있다. * C++처럼, 그리고 자바와 달리, 펄은 변수의 레퍼런스를 특정하게 조작할 수 있다. * 펄은 자바처럼 대소문자를 구분한다. * 대체적으로 펄은 자바에 비해 타입 체킹이 느슨하다(weakly typed). === # 컴파일과 실행 === * 자바처럼 펄은 인터프리터 언어이다. 플랫폼에 네이티브하게 실행되는 머신 코드를 생성하지 않는다. * 자바는 바이트코드를 생성하여 .class 파일에 저장하고 런타임 환경에 제공하여 실행한다: {{{#!vim javac Test.java java Test }}} * 펄은 인터프리터가 소스 코드를 파스 트리로 번역하고 동일한 프로세스 내에서 펄 런타임을 이용하여 해석한다. {{{#!vim perl Test.pl }}} * 유닉스 환경에서 더 보편적인 방법은 소스 코드 처음에 펄 인터프리터를 실행하라고 적어두고, {{{#!vim perl #!/usr/bin/perl }}} : 그 다음 커맨드 라인에서 직접 실행하는 것이다. {{{#!vim Test.pl }}}
---- [[기타분류]]
Perl/Java프로그래머를위한Perl소개
페이지로 돌아가기 |
다른 수정본 보기