# 4-1 클래스
# 생성자->이니셜라이져
# 메서드에서의 ?, !사용
# 인스턴스 변수에 접근(attr_accessor, attr_reader, aatr_write)
# ex) attr_accessor :var
=begin
class Ruler
attr_accessor :length, ...
end
=end
# self의 사용
# public, private, protected
# protected 메솓는 자바나 c++의 protected와는 의미가 다르다
# 예를 들어, 동일 클래스에 속해 있는 인스턴스 메소드 안에 있으면 다른 인스턴스의 protected 메소드를 호출할 수 있다
# 다수의 private 정의
# 상속 < 키워드 사용 메서드 상수 상속됌
# 메소드 오버라이드, 메소드 내에서 super를 호출하면 슈퍼 클래스에 정의된 동명의 메소드를 호출할 수 있다
# 싱글톤 메서드 객체는 클래스에 정의한 메소드 이외에도 해당 객체 고유의 메소드를 가질 수 있다 이것을 싱글톤 메서드라 한다
# 클래스변수 클래스변수는 해당 클래스와 서브 클래스 정의 안이나 클래스 메소드 인스턴스 메소드에서 공유할 수 있는 변수다
# 클래스 변수명은 @@또는 언더바로 시작
# 내포관계 :: 접근
# 4-2 모듈
# 특징: 인스턴스생성불가, 상속불가
# 주요기능: 네임스페이스 만든다 모듈의 메소드를 특정 클래스의 인스턴스 메소드로 추가한다(Mix-in) 싱글톤 메소드로 추가한다. 모듈 함수를 정의해서 사용한다.
# Mix-in은 include 키워드를 사용한다
# 메소드를 객체에 추가하려면 extend를 이용한다
# 모듈함수 'private 인스턴스 메소드이면서 동시에 모듈의 싱글톤 메소드'
# include 하면 리시버 없이 호출가능
# module_function
# 클래스나 모듈을 자동으로 읽기
# autoload :심볼, '경로'
# 4-3 객체
# class, is_a?, object_id, nul, frozen
# 객체 변경 금지 .freeze
# 객체를 복사 .dup, .clone 얕은복사라 자신을 참조하고 있는 타 객체는 복사하지 않는다. 예를들어 배열을 복사하면 배열의 요소는 복사되지 않는다
# 객체의 오염여부 tainted?, taint, untaint