본문으로 바로가기
링크허브 공식블로그

연동이 쉬워진다

링크허브 공식블로그

현대리가 생각하는 IT

Programming Ruby 기초 문법 및 특징


Ruby란?
루비(Ruby)는 마츠모토 유키히로가 개발한 객체 지향 스크립트 프로그래밍 언어이다.
루비는 순수 객체 지향 언어라, 정수나 문자열 등을 포함한 데이터 형식 등 모든 것이 객체이다.

● 루비의 기초 출력문은 puts, print 입니다. puts(개행) print(개행x)
● 문자열 ""안에 변수를 넣으려면 #{} 안에 변수를 넣으면 됩니다.
● 모든 것은 객체(Object)입니다. nil(null)도 객체로 봅니다
● 한줄에 하나의 표현식을 사용할 때는 끝에 세미콜론(;) 생략가능합니다.
● 한줄 주석은 #을 이용합니다. 그 줄의 끝까지 적용됩니다.
● 변수선언은 따로 하지 않아도 됩니다. (대입할 때 자동으로 생성)
● 명시적으로 구분가능할 때는 괄호()가 생략 가능합니다.
puts test("aaa")
puts(test("aaa")) 이 둘은 같은 의미
● null을 nil이라고 표현합니다.
● ++, -- 같은 자동증가, 자동감소 연산자는 없습니다. (+=, -= 를 사용)
● 숫자 0이 false로 자동 변환되지 않습니다. (nil과 false가 아닐때만 참이 됨)
● 논리연산자
&&가 and보다 우선순위 높습니다.
||가 or보다 우선순위 높습니다.
and와 or은 우선순위가 같지만 &&는 ||보다 우선순위 높습니다.
not과 !는 같은 기능 (!가 우선순위 높음)
and,or,&&,|| 은 참거짓을 결정하는 피연산자의 값을 반환
● 병렬 대입 가능
a, b = 1, 2 를 실행하면 a에는 1, b에는 2가 대입
좌변의 갯수가 많으면 남은 값은 nil 이 됩니다.
우변의 갯수가 많으면 남은 값은 무시됩니다.
b, *c = a 에서 a가 [1,2,3,4]일 때 b는 1, c는 [2,3,4] 가 됩니다.
b, c = *a 에서 a가 [1,2,3,4]일 때 b는 1, c는 2가 됩니다.
● 치환
a, b = b, a 를 실행하면 a와 b의 값이 치환됩니다.
● 범위
1..10 은 경계값 포함 즉, 1~10 (점2개)
1...10 는 종료값 포함안함 즉 1~9 (점3개)
● 콜론(:)의 사용
:test 는 test에 해당하는 Symbol객체 반환 즉, test 변수 test는 test의 값
● 배열
대괄호([]) 사이에 객체들을 나열하는 방식의 배열 리터럴을 이용해서 새로운 배열을 생성하고, 초기화 합니다. 객체에 접근하기 위해서는 대괄호[] 사이에 인덱스를 적어준다. 루비의 배열의 인덱스는 0부터 시작합니다. 단어의 배열을 만들때에는 단축 문법인 %w를 사용할 수 있다. 

 


● 해시
해시란 배열에서 index 대신 문자열로 데이터를 구분하고 싶을 때 사용 합니다.
{ 'key1' => 'value1', 'key2' -> 'value2'}와 같이 해시 정의함(key1은 유일한 값)
test = Hash.new(0) 과 같이 기본값 지정 가능합니다. 없는 값은 nil 반환


● 반복자(times, each)
- times

- each

● 정규식
/패턴/ 과 같이 사용합니다.
=~(참매치), !~(거짓매치로) 문자열 검사가능 매치되면 첫위치 아니면 nil 반환됩니다.
● 데이터
.to_i - 대상을 정수로 변환(내림)
.to_f - 대상을 실수로 변환
.to_s - 대상을 문자열로 변환
.to_a - 대상을 배열로 변환
.class로 데이터 형식 확인 가능
.include?() 괄호 안에 내용을 담아 존재 여부 확인
● 객체 비교
==          : 두 값이 같은지 비교 합니다.
===        : case구분의 when항목이 비교할 대상과 동일한지 비교 합니다.
<=>        : 일 반적인 비교 합니다.(완쪽이 작으면 -1, 같으면 0, 왼쪽이 크면 +1)
<,<=,>=,> : 작다,작거나같다,크거나같다,크다
eql?        : 왼쪽과 오른쪽이 서로 같은 타임이며 같은 값을 가질때만 참
equal?     : 왼쪽과 오른쪽이 같은 객체 ID일 경우만 참
● 문자리터럴
홑따옴표( ' )는 그대로 객체가 됩니다 (ex: 'test')
쌍따옴표는 이스케이프 합니다/(ex: "test") \n등을 이스케이프
#{expression}와 같은 표현식 삽입(expression interpolation)을 표현값으로 변환해줍니다.
● method(메소드) 정의
def 키워드 필요 def 다음에 메소드 이름을 쓰고 그 다음에는 괄호로 둘러 싸인 메소드 형식 인수를 사용 메소드 끝 부분에 end

 네이밍(Naming)

루비에서는 이름의 첫글자가 용도를 결정합니다.

var지역변수
- 이름이 소문자나 밑줄(_)로 시작
- 인스턴스 변수나 전역변수와는 다르게 초기화전 nil 값을 가지고 있지 않음
@var인스턴스 변수
- 변수 영역은 self가 가리키는 객체 내부로 제한 (public이 아님)
- 선언이 불가하므로, 처음 값이 대입될 때 동적으로 객체에 추가됨
@@var클래스 변수
- 해당 클래스의 모든 객체가 공유하며, 클래스 메서드를 통해 접근 가능
- 사용 전, 반드시 초기화 해야 함 (일반적으로 클래스 정의 시, 간단한 대입문 사용)
$var전역변수
- 프로그램의 어떠한 곳에서도 사용 가능
- 초기화 하지 않은 전역 변수는 nil 값을 지님

● 조건문

루비에서는 if문의 반대의 의미로 unless라는 조건문을 지원합니다.
if와 반대로 주어진 조건이 거짓인 경우 실행됩니다. 
아래 예제의 실행 결과는 false만 출력됩니다.


● 클래스
클래스 정의
class키워드로 시작하여 end로 끝납니다.
initialize 메서드는 자바에서 생성자와 비슷한 역할을 합니다.
런타임시 클래스 정의를 변경할 수 있습니다. (멤버 변수 / 메서드 추가 / 삭제 / 재정의 모두 가능)

객체 생성
new 메소드는 객체를 위한 메모리 공간을 할당하고, 매개변수를 이용해 새로 생성된 객체의 initialize 메서드를 호출합니다.

상속
상속을 위해 "<" 기호를 사용합니다, (자바의 extends 키워드와 동일)

접근제어
루비에서 멤버변수, 클래스 변수는 항상 private입니다. 따라서 메서드를 통해서만 접근이 가능합니다.
메서드의 기본 접근자는 public입니다. (initialize 메서드는 예외로 항상 private 입니다.)
루비에서 private은 단일 객체 내에서만 접근 가능합니다.

루비 attr-accessor (getter, setter)





'현대리가 생각하는 IT' 카테고리의 다른 글

PHP 스타일 가이드 (Style Guide) - PSR  (0) 2018.06.20
php.ini  (0) 2018.06.17
IE 버전 종류 및 css지원 여부  (0) 2018.06.07
PHP 기본 문법  (0) 2018.06.03
  • Today
  • Total