프로그래밍/Ruby

Ruby(변수와 상수)

choidacheeze 2020. 9. 15. 15:25

선언 규칙

변수명의 첫 글자에 따라 지역변수, 인스턴스변수, 클래스변수, 전역변수, 상수로 구별된다.
통상적으로 변수명의 두번째 글자는 영문자 또는 _로 시작됨
변수명의 길이는 메모리 사이즈 이외의 제한은 없음

선언

지역변수

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