Skip to content

Update translation of "Ruby From Other Languages" (ko) #2999

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 2 commits into from
Mar 13, 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
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ title: "C나 C++에서 Ruby로"
lang: ko
---

Ruby에서 코드가 C 또는 C++와 어떻게 다른지 항목 별로 설명하는 것은 상당히
Ruby에서 코드가 C 또는 C++와 어떻게 다른지 항목별로 설명하는 것은 상당히
큰 차이가 있기 때문에 어렵습니다.
이 어려움의 원인 중 하나는 Ruby 런타임이 많은 일을 해 주기 때문입니다.
Ruby는 C의 "숨겨진 메커니즘 없음" 원칙에서 가능한 한 멀리 있는 것 같습니다.
Expand All @@ -15,7 +15,7 @@ Ruby의 요점은 런타임이 더 많은 작업을 수행하는 대신 인간
즉, Ruby 코드가 "같은 일을 하는" C 또는 C++ 코드보다 훨씬 느리게 실행될 것으로
예상할 수 있습니다. 동시에 Ruby 프로그램을 얼마나 빨리 시작하고 실행할 수
있는지, 작성하는 데 몇 줄의 코드가 필요한지 빠르게 이해할 수 있습니다.
Ruby는 C++ 보다 훨씬 간단합니다. Ruby는 여러분을 응석받이로 만들 것입니다.
Ruby는 C++보다 훨씬 간단합니다. Ruby는 여러분을 응석받이로 만들 것입니다.

Ruby는 정적으로 타입이 결정되지 않고 동적으로 결정됩니다. 런타임은 실행 시간에
가능한 한 많은 작업을 수행합니다. 예를 들어, Ruby 프로그램이 "링크"(즉, 로드 및
Expand All @@ -37,22 +37,22 @@ C처럼, Ruby에서도...
* 대부분의 연산자는 동일합니다(복합 할당 및 비트 연산자 포함). 그러나 Ruby에는
`++` 또는 `--`가 없습니다.
* `__FILE__` 및 `__LINE__`이 있습니다.
* 특별한 `const` 키워드는 없지만 상수도 쓸 수 있습니다. 상수다움은 명명
* 특별한 `const` 키워드는 없지만 상수도 쓸 수 있습니다. 상수인지 아닌지는 명명
규칙으로 결정됩니다. 대문자로 시작하는 이름은 상수입니다.
* 문자열은 큰따옴표로 묶습니다.
* 문자열은 변경 가능합니다.
* `man` 페이지와 마찬가지로 `ri` 명령을 사용하여 터미널 창에서 대부분의 문서를
읽을 수 있습니다.
* 동일한 종류의 커맨드 라인 디버거를 사용할 수 있습니다.

### C++ 비슷한 점
### C++ 비슷한 점

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

* 대부분 같은 연산자를 사용합니다(심지어 `::`까지). `<<`는 종종 목록에 요소를
* 대부분 같은 연산자를 사용합니다(심지어 `::`까지). `<<`는 종종 배열에 요소를
추가하는 데 사용됩니다. 하지만 주의할 것이 하나 있습니다. Ruby에서는 `->`를
사용하지 않습니다. 항상 `.`입니다.
* `public`, `private` `protected`는 유사한 작업을 수행합니다.
* `public`, `private`, `protected`는 유사한 작업을 수행합니다.
* 상속 구문은 동일하게 한 문자이지만 `:` 대신 `<`를 사용합니다.
* C++에서 `namespace`가 사용되는 방식과 유사하게 코드를 "모듈"에 넣을 수
있습니다.
Expand All @@ -64,29 +64,29 @@ C++처럼, Ruby에서도...
C와는 다르게, Ruby에서는...

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

### C++ 다른 점
### C++ 다른 점

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

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

Java는 성숙하고 검증되어있고 (Java를 싫어하는 사람들은 여전히 이의를
Java는 성숙하고 검증되어 있고 (Java를 싫어하는 사람들은 여전히 이의를
제기하겠지만) 빠릅니다. 하지만 장황하기도 합니다. Java에서 Ruby로
전환하면 코드량이 상당히 적어질 것입니다. 또 빠르게 프로토타입을
만들 때 시간이 적게 걸릴 것입니다.

### 비슷한 점들
### 비슷한

Java처럼, Ruby에서도...

* 메모리는 가비지 컬렉터에서 관리합니다.
* 객체는 강 타입입니다.
* public, private, protected 메서드가 있습니다.
* 내장된 문서화 툴이 있습니다(Ruby에서는 RDoc이라 합니다). rdoc으로
생성된 문서는 javadoc으로 생성된 문서와 매우 비슷합니다.
생성한 문서는 javadoc으로 생성한 문서와 매우 비슷합니다.

### 다른 점들
### 다른

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

* 코드를 컴파일 할 필요가 없습니다. 직접 실행하시면 됩니다.
* 여러 인기있는 서드파티 GUI 툴킷이 있습니다. Ruby 유저는
[WxRuby][1], [FXRuby][2], [Ruby-GNOME2][3], [Qt][4]
* 코드를 컴파일할 필요가 없습니다. 직접 실행하면 됩니다.
* 여러 인기 있는 서드파티 GUI 툴킷이 있습니다. Ruby 유저는
[WxRuby][1], [FXRuby][2], [Ruby-GNOME2][3], [Qt][4],
[Ruby Tk](https://github.com/ruby/tk) 등을 사용할 수 있습니다.
* 클래스 같은 것을 정의할 때 코드 블록에 중괄호를 넣는 대신, 선언 뒤에
`end` 키워드를 사용합니다.
Expand All @@ -35,18 +35,18 @@ Java와는 다르게, Ruby에서는...
* 2나 3.14159 같은 숫자를 포함해 모든 것이 객체입니다.
* 정적 타입 체크가 없습니다.
* 변수 이름은 라벨일 뿐입니다. 변수 이름에 관련된 타입은 없습니다.
* 타입 선언이 없습니다. 필요할 때 새로운 변수 이름에 대입만 하시면 그대로
"동작"합니다. (예를 들어, `int[] a = {1,2,3};` 대신 `a = [1,2,3]`)
* 형변환이 없습니다. 그냥 메서드를 호출 하세요. 예외를 보게 될 때에는
유닛테스트가 코드를 실행하기도 전에 말해 줄 것입니다.
* 타입 선언이 없습니다. 필요할 때 새로운 변수 이름에 대입만 하면 그대로
"동작"합니다(예를 들어, `int[] a = {1,2,3};` 대신 `a = [1,2,3]`).
* 캐스팅이 없습니다. 그냥 메서드를 호출하세요. 예외를 보게 될 때에는
유닛 테스트가 코드를 실행하기도 전에 말해 줄 것입니다.
* `Foo foo = new Foo("hi")` 대신 `foo = Foo.new("hi")`를 사용합니다.
* 생성자는 클래스 이름 대신 항상 “initialize”로 명명됩니다.
* 인터페이스 대신 “mixins”을 사용합니다.
* YAML을 XML보다 선호하는 경향이 있습니다.
* 인터페이스 대신 "믹스인"을 사용합니다.
* XML보다 YAML을 선호하는 경향이 있습니다.
* `null` 대신 `nil`을 사용합니다.
* Ruby는 `==`과 `equals()` 다르게 취급합니다. Ruby에서 값이 같은지를
* Ruby는 `==`과 `equals()` 다르게 취급합니다. Ruby에서 값이 같은지를
확인하려면 `==`를 사용하고(Java에서는 `equals()`), 객체가 같은지를 확인하려면
`equal?()` 사용합니다.(Java에서는 `==`)
`equal?()` 사용합니다(Java에서는 `==`).



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Perl은 굉장합니다. Perl의 문서도 굉장합니다. Perl 커뮤니티도
처음부터 내장된 우아한 객체 지향 기능을 갈망하는 Perler에게는 Ruby가 적합할 수
있습니다.

### 비슷한 점들
### 비슷한

Perl처럼, Ruby에서도...

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

### 다른 점들
### 다른

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

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


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ lang: ko
PHP는 웹 애플리케이션에 널리 사용되고 있지만 Ruby on Rails를 사용하고 싶거나
일반적인 용도에 더 적합한 언어를 원한다면 Ruby를 살펴볼 가치가 있습니다.

### 비슷한 점들
### 비슷한

PHP처럼, Ruby에서도...

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

### 다른 점들
### 다른

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

* 강력한 타이핑이 있습니다. `to_s`, `to_i` 등을 호출해야 합니다. 언어에 의존하지
않고 문자열, 정수 등을 변환합니다.
* 강 타입을 사용합니다. 문자열, 정수 등을 변환하려면 언어에 의존하는 대신
`to_s`, `to_i` 등을 호출해야 합니다.
* 문자열, 숫자, 배열, 해시 등은 객체입니다. abs(-1)을 호출하는 대신
-1.abs입니다.
* 메서드 호출에서 괄호는 생략 가능합니다. 단, 어떤 매개변수가 어떤 메서드 호출로
Expand All @@ -43,6 +43,6 @@ PHP와는 다르게, Ruby에서는...
* 변수는 참조입니다.
* `abstract` 클래스나 `interface`가 없습니다.
* 해시와 배열은 상호 교환할 수 없습니다.
* `false` 및 `nil`만 거짓입니다. `0`, `array()` `""`는 조건문에서 모두
* `false` 및 `nil`만 거짓입니다. `0`, `array()`, `""`는 조건문에서 모두
참입니다.
* `raise`(PHP에서는 `throw`)를 포함하여 거의 모든 것이 메서드 호출입니다.
Loading