Skip to content

Translate to ruby from ... (ko) #2995

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Mar 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions ko/documentation/ruby-from-other-languages/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ Java나 다른 언어들과 유사합니다. 다른 언어를 사용한 적이

## 차이점들: *어떤 언어*에서 Ruby로

* [C나 C++에서 Ruby로](/en/documentation/ruby-from-other-languages/to-ruby-from-c-and-cpp/)
* [C나 C++에서 Ruby로](to-ruby-from-c-and-cpp/)
* [Java에서 Ruby로](to-ruby-from-java/)
* [Perl에서 Ruby로](/en/documentation/ruby-from-other-languages/to-ruby-from-perl/)
* [PHP에서 Ruby로](/en/documentation/ruby-from-other-languages/to-ruby-from-php/)
* [Perl에서 Ruby로](to-ruby-from-perl/)
* [PHP에서 Ruby로](to-ruby-from-php/)
* [Python에서 Ruby로](to-ruby-from-python/)

## 언어의 중요한 기능과 알아둘 점
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
---
layout: page
title: "C나 C++에서 Ruby로"
lang: ko
---

Ruby에서 코드가 C 또는 C++와 어떻게 다른지 항목 별로 설명하는 것은 상당히
큰 차이가 있기 때문에 어렵습니다.
이 어려움의 원인 중 하나는 Ruby 런타임이 많은 일을 해 주기 때문입니다.
Ruby는 C의 "숨겨진 메커니즘 없음" 원칙에서 가능한 한 멀리 있는 것 같습니다.
Ruby의 요점은 런타임이 더 많은 작업을 수행하는 대신 인간의 작업을 더 쉽게
만드는 것입니다. 최적화를 위해 코드를 프로파일링 하지 않는 한, Ruby를 사용할 때
"컴파일러를 행복하게 유지"하는 데 조금도 신경을 쓸 필요가 없습니다.

즉, Ruby 코드가 "같은 일을 하는" C 또는 C++ 코드보다 훨씬 느리게 실행될 것으로
예상할 수 있습니다. 동시에 Ruby 프로그램을 얼마나 빨리 시작하고 실행할 수
있는지, 작성하는 데 몇 줄의 코드가 필요한지 빠르게 이해할 수 있습니다.
Ruby는 C++ 보다 훨씬 간단합니다. Ruby는 여러분을 응석받이로 만들 것입니다.

Ruby는 정적으로 타입이 결정되지 않고 동적으로 결정됩니다. 런타임은 실행 시간에
가능한 한 많은 작업을 수행합니다. 예를 들어, Ruby 프로그램이 "링크"(즉, 로드 및
사용)할 모듈이나 미리 호출할 메서드를 알 필요가 없습니다.

다행스럽게도 Ruby와 C는 건강한 공생 관계를 가지고 있습니다. Ruby는 소위
"확장 모듈"을 지원합니다. 이들은 Ruby 프로그램에서 사용할 수 있지만(외부에서 볼
때 다른 Ruby 모듈처럼 보이고 작동함) C로 작성된 모듈입니다. 이런 식으로 Ruby
소프트웨어의 성능에 중요한 부분을 구획화하고 순수한 C로 만들 수 있습니다.

물론 Ruby 자체는 C로 작성되었습니다.

### C와 비슷한 점

C처럼, Ruby에서도...

* 원하는 경우 절차적으로 프로그래밍할 수 있습니다(그러나 내부에서는 여전히 객체
지향일 것입니다).
* 대부분의 연산자는 동일합니다(복합 할당 및 비트 연산자 포함). 그러나 Ruby에는
`++` 또는 `--`가 없습니다.
* `__FILE__` 및 `__LINE__`이 있습니다.
* 특별한 `const` 키워드는 없지만 상수도 쓸 수 있습니다. 상수다움은 명명
규칙으로 결정됩니다. 대문자로 시작하는 이름은 상수입니다.
* 문자열은 큰따옴표로 묶습니다.
* 문자열은 변경 가능합니다.
* `man` 페이지와 마찬가지로 `ri` 명령을 사용하여 터미널 창에서 대부분의 문서를
읽을 수 있습니다.
* 동일한 종류의 커맨드 라인 디버거를 사용할 수 있습니다.

### C++과 비슷한 점

C++처럼, Ruby에서도...

* 대부분 같은 연산자를 사용합니다(심지어 `::`까지). `<<`는 종종 목록에 요소를
추가하는 데 사용됩니다. 하지만 주의할 것이 하나 있습니다. Ruby에서는 `->`를
사용하지 않습니다. 항상 `.`입니다.
* `public`, `private` 및 `protected`는 유사한 작업을 수행합니다.
* 상속 구문은 동일하게 한 문자이지만 `:` 대신 `<`를 사용합니다.
* C++에서 `namespace`가 사용되는 방식과 유사하게 코드를 "모듈"에 넣을 수
있습니다.
* 예외도 비슷한 방식으로 작동하지만 순수 예외를 보호하기 위해 키워드 이름이
변경되었습니다.

### C와 다른 점

C와는 다르게, Ruby에서는...

* 코드를 컴파일할 필요가 없습니다. 직접 실행하면 됩니다.
* 객체는 강력한 타입입니다(변수 이름 자체에는 타입이 전혀 없음).
* 매크로나 전처리기가 없습니다. 캐스트가 없습니다. 포인터도 없습니다(포인터
연산도 없습니다). typedefs, sizeof, enum도 없습니다.
* 헤더 파일이 없습니다. 기본 소스 코드 파일에서 기능(일반적으로 "메서드"라고
함)과 클래스를 정의하기만 하면 됩니다.
* `#define`이 없습니다. 대신 상수를 사용하십시오.
* 모든 변수는 힙에 저장됩니다. 또한, 가비지 컬렉터가 처리하므로 직접 해제할 필요가
없습니다.
* 메서드(예: 함수)에 대한 인수는 값으로 전달되며 값은 항상 개체 참조입니다.
* `#include <foo>` 또는 `#include "foo"` 대신 `require 'foo'`를 사용합니다.
* 어셈블리를 사용할 수 없습니다.
* 줄 끝에 세미콜론이 없습니다.
* `if` 및 `while` 조건 표현식에는 괄호 없이 사용합니다.
* 메서드(예: 함수) 호출에 대한 괄호는 종종 생략 가능합니다.
* 일반적으로 중괄호를 사용하지 않습니다. `end` 키워드로 여러 줄 구성(`while`
루프와 같은)을 끝냅니다.
* `do` 키워드는 소위 "블록"을 위한 것입니다. C와 같은 "do 문"이 없습니다.
* "블록"이라는 용어는 다른 의미를 가집니다. 실행하는 동안 메서드 본문이 블록을
호출할 수 있도록 메서드 호출과 연결하는 코드 블록용입니다.
* 변수 선언이 없습니다. 필요할 때 즉시 새 이름을 지정하기만 하면 됩니다.
* 참 거짓을 확인할 때 `false` 및 `nil`만 거짓 값으로 평가됩니다. 다른 모든 것은
true입니다(`0`, `0.0` 및 `"0"` 포함).
* `char`가 없습니다. 단지 1자로 된 문자열입니다.
* 문자열은 null 바이트로 끝나지 않습니다.
* 배열 리터럴은 중괄호 대신 대괄호 안에 들어갑니다.
* 배열에 더 많은 요소를 넣으면 배열이 자동으로 커집니다.
* 두 개의 배열을 더하면 포인터 연산을 수행하는 대신 새롭고 더 큰 배열(물론 힙에
할당됨)을 반환합니다.
* 대부분의 경우 모든 것이 표현식입니다(즉, `while` 문은 실제로 rvalue로
평가됩니다).

### C++과 다른 점

C과는 다르게, Ruby에서는...

* 명시적인 참조가 없습니다. 즉, Ruby에서 모든 변수는 일부 개체에 대해 자동으로
역참조된 이름일 뿐입니다.
* 개체는 강 타입이지만 *동적* 타입이 지정됩니다. 런타임은 *실행 시간에* 해당 메서드
호출이 실제로 작동하는지 확인합니다.
* "constructor"는 클래스 이름 대신 `initialize`라고 합니다.
* 모든 메서드는 항상 가상입니다.
* "클래스"(정적) 변수 이름은 항상 `@@`로 시작합니다.(예: `@@total_widgets`)
* 멤버 변수에 직접 접근하지 않습니다. 공용 멤버 변수(Ruby에서 attributes로
부름)에 대한 모든 액세스는 메서드를 통해 이루어집니다.
* `this`가 아니라 `self`입니다.
* 일부 메서드는 '?' 또는 '!'로 끝납니다. 실제로 메서드 이름의 일부입니다.
* 그 자체로는 다중 상속이 없습니다. Ruby에는 "믹스인"이 있습니다(즉, 모듈의 모든
인스턴스 메서드를 "상속"할 수 있음).
* 일부 대소문자 규칙이 적용됩니다(예: 클래스 이름은 대문자로 시작하고 변수는
소문자로 시작).
* 메서드 호출에 대한 괄호는 일반적으로 생략 가능합니다.
* 언제든지 클래스를 다시 열고 메서드를 더 추가할 수 있습니다.
* C++ 템플릿이 필요하지 않습니다(주어진 변수에 모든 종류의 개체를 할당할 수 있고
타입은 어쨌든 런타임에 파악되기 때문입니다). 캐스팅도 없습니다.
* 이터레이션은 약간 다르게 수행됩니다. Ruby에서는 별도의 이터레이터
객체(`vector<T>::const_iterator iter`와 같은)를 사용하지 않습니다. 대신
연속적인 요소를 전달하는 코드 블록을 취하는 컨테이너 개체의 이터레이터
메서드(`each`와 같은)를 사용합니다.
* 컨테이너 타입은 `Array`와 `Hash` 두 가지뿐입니다.
* 타입 변환이 없습니다. 그러나 Ruby를 사용하면 필요하지 않다는 것을 알게 될
것입니다.
* 멀티스레딩은 내장되어 있지만 Ruby 1.8부터는 네이티브 스레드와 달리 "그린
스레드"(인터프리터 내에서만 구현됨)입니다.
* 단위 테스트 라이브러리는 Ruby와 함께 표준으로 제공됩니다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
layout: page
title: "Perl에서 Ruby로"
lang: ko
---

Perl은 굉장합니다. Perl의 문서도 굉장합니다. Perl 커뮤니티도… 굉장합니다.
처음부터 내장된 우아한 객체 지향 기능을 갈망하는 Perler에게는 Ruby가 적합할 수
있습니다.

### 비슷한 점들

Perl처럼, Ruby에서도...

* CPAN과 다소 유사한 패키지 관리 시스템이 있습니다([RubyGems][1]라고 함).
* 정규식 라이브러리는 내장되어 있습니다. 보나페티!
* 일반적으로 사용되는 내장 기능이 상당히 많습니다.
* 괄호는 종종 생략할 수 있습니다.
* 문자열은 기본적으로 동일하게 작동합니다.
* Perl과 유사한 일반 구분 문자열 및 정규식 인용 구문이 있습니다.
`%q{this}`(작은따옴표) 또는 `%Q{this}`(큰따옴표) 및 `%w{단일따옴표 단어 목록의
경우}`처럼 보입니다. 원하는 경우 `%Q|can|` `%Q(use)` `%Q^other^` 구분 기호를
사용할 수 있습니다.
* `"#{like} this"`처럼 보이지만 큰따옴표 변수 보간이 있습니다.(그리고 `#{}` 안에
원하는 Ruby 코드를 넣을 수 있습니다)
* 셸 명령 확장은 `` `backticks` ``를 사용합니다.
* 내장된 문서 도구가 있습니다(Ruby는 rdoc이라고 함).

### 다른 점들

Perl과는 다르게, Ruby에서는...

* Perl과 같은 상황에 따른 규칙이 없습니다.
* 변수는 참조하는 개체와 동일하지 않습니다. 대신 항상 개체에 대한 참조일
뿐입니다.
* `$` 및 `@`는 변수 이름의 첫 번째 문자로 사용되는 경우가 있지만 유형을 나타내는
것이 아니라 범위를 나타냅니다.(`$`는 전역, `@`는 객체 인스턴스, `@@`는 클래스
속성을 나타냅니다)
* 배열 리터럴은 괄호 대신 괄호 안에 들어갑니다.
* 배열의 하위 배열을 작성해도 하나의 큰 배열로 병합되지 않습니다. 대신 배열의
배열을 얻습니다.
* `sub`가 아니라 `def`를 사용합니다.
* 각 줄의 끝에는 세미콜론이 필요하지 않습니다. 여기에 더해 함수 정의, 클래스
정의 및 case 문과 같은 것을 `end` 키워드로 끝냅니다.
* 개체는 강타입입니다. 타입 간 변환이 필요한 경우 `foo.to_i`, `foo.to_s` 등을
직접 호출해야 합니다.
* `eq`, `ne`, `lt`, `gt`, `ge`, `le`은 없습니다.
* 다이아몬드 연산자(`<>`)가 없습니다.
일반적으로 `IO.some_method`를 대신 사용합니다.
* 두꺼운 쉼표 `=>`는 해시 리터럴에만 사용됩니다.
* `undef`가 없습니다. Ruby에는 `nil`이 있습니다. (Ruby안의 다른 것처럼) `nil`은
객체입니다. 정의되지 않은 변수와는 다릅니다. 부울처럼 취급하면 `false`로
평가됩니다.
* 참 거짓을 평가할 때 `false` 및 `nil`만 거짓 값으로 평가됩니다. 다른 모든
것은 true입니다(`0`, `0.0` 및 `"0"` 포함).
* [PerlMonks][2]는 없습니다. ruby-talk 메일링 리스트는 매우 유용한 곳입니다.



[1]: http://guides.rubygems.org
[2]: http://www.perlmonks.org/
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
layout: page
title: "PHP에서 Ruby로"
lang: ko
---

PHP는 웹 애플리케이션에 널리 사용되고 있지만 Ruby on Rails를 사용하고 싶거나
일반적인 용도에 더 적합한 언어를 원한다면 Ruby를 살펴볼 가치가 있습니다.

### 비슷한 점들

PHP처럼, Ruby에서도...

* Ruby는 PHP와 같이 동적으로 타이핑되므로 변수 선언에 대해 걱정할 필요가
없습니다.
* 클래스가 있으며 PHP 5(`public`, `protected` 및 `private`)에서와 같이 클래스에
대한 액세스를 제어할 수 있습니다.
* 일부 변수는 PHP와 동일하게 $로 시작합니다(전부가 아님).
* `eval`도 있습니다.
* 문자열 보간을 사용할 수 있습니다. `"$foo is a $bar"` 대신
`"#{foo} is a #{bar}"`를 사용할 수 있습니다. PHP에서와 같이 작은따옴표
문자열에는 적용되지 않습니다.
* 히어독(heredoc)이 있습니다.
* Ruby에는 PHP 5처럼 예외가 있습니다.
* 상당히 큰 표준 라이브러리가 있습니다.
* 배열 및 해시는 `array()`를 `{`, `}`로 교환하면 예상대로 작동합니다.
`array('a' => 'b')`는 `{'a' => 'b'}`가 됩니다.
* `true` 및 `false`는 PHP처럼 동작하지만 `null`은 `nil`이라고 합니다.

### 다른 점들

PHP와는 다르게, Ruby에서는...

* 강력한 타이핑이 있습니다. `to_s`, `to_i` 등을 호출해야 합니다. 언어에 의존하지
않고 문자열, 정수 등을 변환합니다.
* 문자열, 숫자, 배열, 해시 등은 객체입니다. abs(-1)을 호출하는 대신
-1.abs입니다.
* 메서드 호출에서 괄호는 생략 가능합니다. 단, 어떤 매개변수가 어떤 메서드 호출로
이동하는지 명확히 하는 경우는 예외입니다.
* 표준 라이브러리 및 확장은 모듈 및 클래스로 구성됩니다.
* 리플렉션은 객체 고유의 기능이므로 PHP 5에서와 같이 `Reflection` 클래스를
사용할 필요가 없습니다.
* 변수는 참조입니다.
* `abstract` 클래스나 `interface`가 없습니다.
* 해시와 배열은 상호 교환할 수 없습니다.
* `false` 및 `nil`만 거짓입니다. `0`, `array()` 및 `""`는 조건문에서 모두
참입니다.
* `raise`(PHP에서는 `throw`)를 포함하여 거의 모든 것이 메서드 호출입니다.