Chapter2. Ruby.new
간단히 루비 맛을 본다.
2.1 객체지향 언어 루비
루비는 진정한 객체 지향 언어다.
모든 객체는 고유한 객체 아이디를 가진다.
각 객체에는 객체별로 고유한 값을 가질 수 있는 인스턴스 변수를 정의할 수 있다.
인스턴스 변수에는 객체의 상태가 저장된다.
클래스 정의 안에서 인스턴스 메서드를 정의할 수도 있다.
이 메서드는 클래스 내부적으로 호출하거나 외부에서 사용할 수 있는 코드의 묶음이다.
인스턴스 메서드들은 객체의 인스턴스 변수, 즉 객체의 상태에 접근할 수 있다.
메서드는 객체에 메시지를 보내 호출할 수 있다. 메시지에는 메서드 이름과 메서드에 필요한 매개 변수들이 포함된다.
객체가 메시지를 받으면 자신의 클래스에서 해당 메서드를 찾는다. 찾으면 실행하고 못찾으면...
puts루비 표준 메서드다. 인자들을 콘솔에 출력하고 마지막에 줄바꿈을 추가한다.
puts두 가지 역할을 한다. 첫 째는 인자를 출력하는 것이고 둘 째는 줄바꿈을 하는 것. 두 가지 일을 하기 때문에thread나process를 다룰때는 사용하지 않는 것이 좋다. 이 때는print를 사용하자.(왜냐면 puts로 인자르 출력하고 줄바꿈을 하려고 할 때 컨텍스트 스위칭이 될 수도 있기 때문)
2.2 루비의 기초
주석은 # 로 시작한다.
메써드의 정의는
def로 시작하고end로 끝난다.인자를 넣어주는 괄호는 없어도 된다.
우선순위에 영향을 줄 수 있다.
그래도 왠만하면 넣는게 좋다.
메써드의 끝은
end다.
Double quote와Single quote는 다르다.Double는 내부적으로 처리하는게 더 많다. 따라서Single보다Double의 속도가 느리다.Double를 사용하면 아래 처럼 변수를 넣을 수 있다.puts "This is Double quote! #{var}"
루비에서는 이름으로 용도를 구분한다.
식별자는 영어로 쓴다.
심볼, 메써드, 변수:
snake_casesnake_case숫자를 쓰지 않는다.
클래스, 모듈
CamelCaseHTTP와 같은 약어는 대문자로 유지한다.
파일, 디렉토리 이름
snake_case
상수
SCREAMING_SNAKE_CASE
서술형 메써드(
boolean을 리턴하는 메써드)반드시 이름이
?로 끝나야 한다.서술형 메써드가 아니면
?로 끝나면 절대 안된다.
단정 메써드(
is,does,can) 같은 보조 전치사를 붙이지 마라이항 연산자를 정의할 때에는 매개변수 이름을
other로 해라인수턴수 변수는
@로 시작한다.클래스 변수는
@@로 시작한다.
전역 변수는
$로 시작한다.배열과 해시는 색인된 컬렉션이다.
문자열 배열을 만들 때
%w를 사용하면 간단히 만들 수 있다. 아래의 두 경우는 같은 결과를 나타낸다.arr1 = ["1", "2", "3"] arr2 = %w {1, 2, 3}해시를 사용할 때 심볼을 사용하면 조금더 쉽게 초기화를 할 수 있다.
심볼은 C언어로 생각하면 define 으로 선언된 값이지만, 따로 초기화 해줄 필요는 없다. 루비에서 알아처 처리해준다. 프로그램 전체에서 공유가 된다.
배열과 해시에 키, 인덱스로 접근할 때 없는 요소라면
nil을 반환한다.
nil또한 객체다.아무것도 없음을 뜻한다.
문자열 길이 0 은
false가 아니다
2.7 블록과 반복자
코드 블록은 매채 변수처럼 메서드 호출과 결합할 수 있는 코드다.
코드 블록은
{}나do end로 묶인다.메서드는
yield를 통해서 블록을 호출할 수 있다.block_test.test do |var| puts "variable from method #{var}" end메서드에서
yield에 인자를 넣으면 코드 블록에 전송된다.코드블록을 반복자 구현에 사용한다.
Last updated
Was this helpful?