선언 규칙
변수명의 첫 글자에 따라 지역변수, 인스턴스변수, 클래스변수, 전역변수, 상수로 구별된다.
통상적으로 변수명의 두번째 글자는 영문자 또는 _로 시작됨
변수명의 길이는 메모리 사이즈 이외의 제한은 없음
선언
지역변수
foobar
소문자 또는 _로 시작하는 식별자는 지역변수 또는 메소드를 부름.
선언되지 않은 식별자의 참조는 인수가 없는 메소드 호출로 인식됨.
지역 변수의 스코프는 선언된 위치로부터 그 변수가 선언된 블록, 메소드, 클래스/모듈이 끝날 때 까지 유효.
인스턴스 변수
@foobar
@
로 시작하는 변수는 인스턴스 변수
특정 오브젝트에 소속되어 있음. 인스턴스 변수는 그 클래스 또는 서브클래스의 메소드부터 참조 가능.
초기화되지 않은 인스턴스변수를 참조한 경우의 값은 nil이다.
클래스 변수
class Foo
@@foo = 1
def bar
puts @@foo
end
end
@@
로 시작하는 변수는 클래스변수
클래스 변수는 클래스 안에 정의되어 클래스의 인스턴스메소드 등으로 부터 참조/대입 할수있다.
클래스변수와 클래스 자신의 인스턴스변수 와의 차이
- 서브클래스로부터 참조/대입이 가능
- 인스턴스메소드로부터 참조/대입이 가능
클래스 변수는 그 클래스나 서브클래스, 그것들의 인스턴스에 공유되어 전역변수처럼 여겨짐
class Foo
@@foo = 1
end
class Bar < Foo
p @@foo +=1 # => 2
end
class Baz < Bar
p @@foo += 1 # => 3
end
모듈에서 정의된 클래스변수는 그 모듈을 include한 클래스끼리 공유됨
module Foo
@@foo =1
end
class Bar
include Foo
p @@foo += 1 # => 2
end
class Baz
include Foo
p @@foo += 1 # => 3
end
클래스 변수의 스코프는 클래스 내의 하위 클래스, 모듈까지 스코프를 가져감
전역변수
$foobar
$/
$
로 시작하는 변수는 글로벌 변수로, 프로그램 어디서든지 참조 가능
상수
FOOBAR
대문자로 시작하는 식별자는 상수
메소드 내에서는 정의 불가능, 재대입 또한 불가능
상수는 상수가 정의된 클래스/모듈 내, 클래스를 계승하고 있는 클래스,모듈을 인클루드하고 있는 클래스 또는 모듈로 부터 참조가 가능
클래스정의 밖에 선언된 상수는 Object
에 속한 것으로 한다.
class Foo
FOO = 'FOO'
end
class Bar < Foo
BAR = 'BAR'
p FOO # => 'FOO'
class Baz
p BAR # => 'BAR'
end
end
'프로그래밍 > Ruby' 카테고리의 다른 글
Ruby: Symbols (0) | 2020.09.24 |
---|---|
Ruby : Literals(Booleans, Numbers, String) (0) | 2020.09.20 |
Ruby설치하기(Mac) (0) | 2020.09.14 |
Ruby Programing(Intro) (0) | 2020.09.14 |