# 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
# 5장 주요 내장 클래스/모듈
# 5-1 Numeric(수치 클래스)
# 'SpaceShip 연산자 <=> 왼쪽 값이 오른쪽보다 작으면 음수 같으면 크면 양수를 반환'
# ceil, floor, round, truncate 소수점 올림, 내림, 반올림, 정수만
# step method
# integer: 작은값 Fixnum, 큰값 Bignum
# integer.odd, integer.even, integer.next, integer.succ, integer.pred
# integer.to_s, integer.chr, to_i, Integer()
# upto, downto, map?
# Float:부동소수점 Rational 유리수
# Rational:유리수 r = Rational(1,3) => 1/3
# 나눗셈 .quo
# to_r => to Rational
# Coplex 복소수 첫번째 실수부 두번째 허수부
# 5-2 String
# .empty? , length, bytesize, include?(), start_with?
# 문자열 덧셈, 곱셈 형식 맞추기 가능, 파괴적추가 가능
# slice 문자열 자르기 slice(4, 6) 4부터 시작해서 6번만큼, slice(4..9)
# strip 공백제거, lstrip 왼쪽공백제거, rstrip 오른쪽공백제거
# chomp 줄바꿈코드 하나만 제거, chop 문자열끝제거, squeeze 중복된 문자열 제거,
# upcase 대문자로 변환 downcase 소문자로 변환 swapcase 대문자 소문자 바꿈 capitalize 앞 문자만 대문자로
# 정규표현식 sub, 정규표현식 치환 gsub
# reverse, !가 붙은 String 메소드는 파괴적
# split 문자열 => 배열, to_a toArray
# each_char, each_byte, each_line
# 인코딩 .encoding, encode(Encoding::EUC_KR),encode!(Encoding::EUC_KR)
# 5-3 Regexp 정규표현식
# Regexp === (패턴일치 boolean)
# Regexp ~= (정규표현과 일치하는 위치반환)
# Regexp match (일치하면 객체반환)
# scan 블록을 받아서 일치하는 부분 문자열의 수만큼 반복
# 155p Regexp 기호
# 문자클래스 [a-z], ^예외
# {} 반복메타
# \A 시작 \z 끝
# () 그루핑 후방참조,
# 백트랙억제
# 옵션지정 i 대소문자구별 x,
# 5-4 Comparable
# Object에 정의되어있지 않으므로 include Comparable해야함
# 5-5 Enumerable
# Array, Hash, Range에 include되어있음
# .each_with_index do |name, index| index기반
# .reverse_each_do 각각
# .each_slice 2 do |a,b| 2개씩 잘라서
# .each_cons 2 do |a, b| 하나씩 물려서
# .cycle 무한반복
# .map 블록 평가 결과를 배열로 반한
# 참인가 all? none? any? one?
# grep ===비교
# select, detect, reject, take, drop, take_while, drop_whille
# each_with_object
# group_by
# partition
# max, min, minmax, min_by, max_by
# sort, sort_by
# 5-5-2 Array
# Array.new(5,1) #=> [1,1,1,1,1]
# values_at, first, last, sample
# push, pop
# shift, unshift
# delete_at, delete
# compact nil을 제거함
# unique 중복제거 reverse 역 flatten 다차원=>일차원
# transpose 배열의 행과 열을 바꿈, zip 다차원배열 생성
# 배열 이진탐색(정렬이 끝나야함) find-minimum, find-any
# 5-5-3 Hash
# hash = {one: 1, two: 2}, each do, each_key do, each_value do
# hash[:foo] = 'bar', hash[:hoge] = 'piyo', .delete(:foo), select!, reject!,
# keep_if, delete_if
# merge 해쉬값 통합
# invert 키와 값을 바꿈
# has_key? 키를 가지는지
# has_value? 값을 가지는지
# keys 키를 배열로 반환함
# values 값을 배열로 반환
# values_at 변수에다 복수의 값을 한번에 대입
# hash를 Array로 변환 to_a
# 5-5-4 Enumerator 반복처리
# [].each, {}.each, (1..10).each, ''.each_char, .times, lopp
# enumerator 내에 with_index라는 메소드가 정의되어있음
# 예제
=begin
%w(Alice Bob Charlie).each. do |name, index|
puts "#{index}: #{name}"
=end
# 외부반복 next, rewind(처음부터 다시 반복함)
# .to_enum
# Lazy 큰 배열의 처리, force
# 5-6-1 Time
# Time.now , .zone, .getutc, .utc, to_i, to_s, .year, .month, .day, .hour, .min, .sec, .nsec(Time.to_f보다 정확), wday(요일을 일요일부터 토요일까지 0-6), yday(1월 1일을 1로해서 경과 일수)
# now.dst(서머타임 적용 여부), .sunday?, .monday? ...
# 5-6-2,3,4 Time 비교
# to_s로 같아도 실제로 나노초 단위로 비교하면 다름
# Comparable 모듈을 include하고 있어서 Time 객체 간 비교 가능
# Time.at(0) => 1970-01-01...
# Time.utc(년,월,일,시,분,초,지역), Time.local
# Time.now.to_a => 경과일수 타임존 무시
# 5-6-5 Time 형식 문자열
#.strftime
# 5-7 IO/File
# File.open, write
# 인코딩 처리
# 파일 잠구기(lock)
# .atime, .ctime, .mtime, .size
# 파일 종류, ftype, file, directory, symlink, pipe, socket,
# rename, unlink(파일삭제,
# File객체 말고도 Kernel에서도 접근가능 open()
# Dir 디렉토리 조작 클래스
# Dir.entries
# 5-9 쓰레드
# GVL 잠금구조로 동시 실행이 가능한 스레드는 하나 but IO에서 블록이 발생하는 경우 GVL이 개방
# 5-9-1 쓰레드의 생성
# Thread.fork
# Thread.main, Thread.current, Thread.list
# value, join
# 5-9-2 변수 처리
# 5-9-3 쓰레드 고유 데이터
# Thread 객체에는 고유 데이터를 저장할 수 있어서 thread[:foo]와 같이 해시와 비슷한 방식으로 접근
# 5-9-4 생명 주기
# run, sleep, aborting, false, nil
# 5-9-6 예외 처리
# 5-9-7 스레드 우선순위
# Thread.priority
# 5-9-8 ThreadGroup
#group.add
# 5-9-9 Mutex 상호 배제
# 같은 데이터를 참조할때
# Mutex
# 5-9-10 데드락
# 5-10 파이버(경량 스레드)
# 쓰레드는 생성시점 프로그래머가 제어할 수 없이 바로 실행됌
# 파이버는 경량 스레드로써 생성 시점에 실행되지 않고 Fiber.resume메소드로 실행을 개시해야 시작된다
# 호출한쪽이 부모 호출된 측이 자식, 부모 자식 바꾸려면 yield 사용
# 5-10-2 인수와 반환 값
# 5-10-3 제너레이터
# 부분적 계싼을 반환하고 나중에 계싼을 다시 재개하는 서브루틴
fib = Fiber.new{
a,b = 0,1
loop do
a, b = b, a + b
Fiber.yield(a)
end
}
# 5-10-4 스레드와 같이 사용하는 경우의 제약
# 5-11 Process
# Process.fork
# 5-11-2 부모 자식의관계
# 자식 프로세스 기다리기 .waitpid
# 5-11-3 프로그램 데몬화
# 서버
# 5-12-1 Struct 구조체
# 필드명 상수로 지정하지 말자
# enumerable => each, members, each_pair, map,
# 5-12-2 메소드 정의
# 5-13 Marshal
# 객체를 영속화하기 위한 모듈
# 영속화할 수 없는 객체 인스턴스 시스템객체, 싱글톤 메소드
# 버전 커스터마이즈
# 5-14 objectSpace
# 실행 중인 루비 프로세스 안에 존재하는 모든 객체를 조작하기 위한 모듈이다
# ObjectSpace.each_object는 특정 클래스모듈과 kind_of? 관계에 있는 모든 객체에 대해 반복 처리를 한다
# _id2ref
# define_finializer
# 6장 루비 클래스 객체
# 6-1-1 Class 클래스로 클래스를 만들다
# Class는 인스턴스를 작성, 상속하거나 상속될 수 있다
# 6-1-2 Class.new
# 6-1-4 메소드를 정의
# 6-1-5 클래스명이 없는 클래스
# 6-1-6 class 정의식과 Class.new
# Class.new로 정의하면 바깥쪽 스코프 참조
# 6-2 클래스 객체
# class 정의식 인스턴스 변수 @class_instance_val = :class_instance_val,클래스 메소드 메소드 정의
# 클래스 인스턴스 변수와 클래스 변수는 다르다
# instance_variable_get
# 클래스 변수는 클래스에 영향 클래스 인스턴스 변수는 클래스 인스턴스에
# 6-2-3 클래스 메소드
# 6-2-4 메소드 정의
# defie_method
# .instance_mthod 로 메소드 얻음
# 6-2-5 methodTransplanting
# 6-3 싱글톤 클래스
# ~ 6장끝까지 생략
# 7장 동적 프로그래밍
# eval, binging
# module_eval,class_eval,
# 8장 Proc 객체